2014-10-30 64 views
2

我正在尝试使用其API创建附件到Gmail的草稿(或发送消息)。我读过一些答案,并试图根据我在这里阅读的内容构建请求:Mail attachment wrong media type Gmail API使用API​​发送gmail附件失败

在编写函数本身之前,我决定使用Chrome扩展(Simple Rest Client)来模拟API请求。这里的请求体:

Content-Type: multipart_mixed; boundary="foo_bar_baz" 
MIME-Version: 1.0 
to: [email protected] 
from: [email protected] 
subject: Testing Subject 

--foo_bar_baz 
Content-Type: text/plain; charset="UTF-8" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 

This is the testing text 

--foo_bar_baz 

Content-Type: image/jpeg 
MIME-Version: 1.0 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="test.jpg" 

{ 
"message": 
{ 
"raw" :  "_9j_4AAQSkZJRgABAQEAYABgAAD_2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz_2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz_wAARCAAJAAsDASIAAhEBAxEB_8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL_8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4-Tl5ufo6erx8vP09fb3-Pn6_8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL_8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3-Pn6_9oADAMBAAIRAxEAPwD9Pfiv-wN4q8cftk3Pji30_wCH9z9v8V6H4ksPiFe3cy-MvAunaeuni68N6bCLR92n3_2G8ErLf2yAeIL_AHW021xdfX9FFAH_2Q**" 
} 
} 

--foo_bar_baz--  

请求头参数如下:

Authorization: Bearer *given token* 
Content-Type: multipart/mixed; boundary="foo_bar_baz" 
Content-Length: 1428 

正如你所看到的,这是非常类似于上面的链接的例子。不过,我不断收到以下回应:

"message": "Media type 'application/octet-stream' is not supported. Valid media types: [message/rfc822]" 

我知道API文档说唯一有效的媒体类型的消息/ RFC822(https://developers.google.com/gmail/api/v1/reference/users/drafts/create)。尽管如此,这个示例(https://developers.google.com/gmail/api/guides/uploads#multipart)和Stackoverflow中的其他人却说不然。上述链接中问题的作者似乎已经解决了他的问题,而未使用message/rfc822媒体类型。

我得失去一些东西。有人可以帮我弄这个吗?如果有人能帮我弄明白,我真的很感激。

+2

嗨杰佩托。你能分享一下你的最终POST格式吗?自己挣扎着。谢谢! – Tholle 2015-03-03 09:53:49

回答

2

OK,所以如果你使用/上传媒体功能(适用于尺寸的所有消息irregardless),那么例如,它应该像下面的(貌似我有点错):

 
POST https://www.googleapis.com/upload/gmail/v1/users/me/messages/send 
Content-Type: multipart/related; boundary=foo_bar_baz 

那么你的POST主体应该是类似以下(不编码等):

 
--foo_bar_baz 
Content-Type: application/json; charset=UTF-8 

{ 
} 

--foo_bar_baz 
Content-Type: message/rfc822 
MIME-Version: 1.0 
to: [email protected] 
from: [email protected] 
subject: Testing Subject 

--foo_bar_baz 
Content-Type: text/plain; charset="UTF-8" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 

This is the testing text 

--foo_bar_baz 

Content-Type: image/jpeg 
MIME-Version: 1.0 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="test.jpg" 




--foo_bar_baz-- 

所以要注意的事情是,它实际上是“多部分/相关”,并具有应用程序/ JSON(用于一些请求你可以添加参数)部分以及消息/ rfc822参数包含整个电子邮件。

这确实不容易 - 如果你可以使用它们,库肯定会减少它的痛苦!

+0

嗨,@EricDeFriez。感谢你的回答。我直接发布到https://www.googleapis.com/upload/gmail/v1/users/me/drafts?uploadType=multipart。那么,我是否应该在_raw_参数中包含消息和附件?我该怎么做呢?例如,我在哪里包含文件名? – Geppetto 2014-10-30 20:10:21

+0

知道了!我肯定混合了很多不同的东西。冷却下来,读一下,找出答案。您在POST标头上设置“Content-Type:message/rfc822”的提示非常重要。除了这里,我还没有读过它。非常感谢。我很快就会发布我的最终HTTP POST格式,所以其他人也可以从中受益。再一次,谢谢你,你的回答非常节省时间。 – Geppetto 2014-10-30 21:12:08

+0

@Geppetto,尽管3年后,我急切地等待您的最终HTTP POST格式评论。由于您正在进行此项工作,因此文档没有太多改进。如果你有它,我很乐意看到它。谢谢! – Bryan 2017-08-26 19:32:45

相关问题