api - 使用api发送gmail附件失败

标签 api google-api gmail attachment gmail-api

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

在对函数本身进行编码之前,我决定使用 Chrome 扩展程序(Simple Rest Client)来模拟 API 请求。这是请求正文:

Content-Type: multipart_mixed; boundary="foo_bar_baz"
MIME-Version: 1.0
to: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b5c7d0d6d0dcc3d0c7f5d2d8d4dcd99bd6dad8" rel="noreferrer noopener nofollow">[email protected]</a>
from: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b2c1d7dcd6d7c0f2d5dfd3dbde9cd1dddf" rel="noreferrer noopener nofollow">[email protected]</a>
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 文档说唯一有效的媒体类型是 message/rfc822 ( https://developers.google.com/gmail/api/v1/reference/users/drafts/create )。尽管如此,这个示例 ( https://developers.google.com/gmail/api/guides/uploads#multipart ) 和 Stackoverflow 中的其他示例却另有说法。上面链接中问题的作者似乎在不使用 message/rfc822 媒体类型的情况下解决了他的问题。

我一定错过了一些东西。有人可以帮我弄这个吗?如果有人能帮助我解决这个问题,我将非常感激。

最佳答案

好的,所以如果您使用/upload 媒体功能(适用于所有消息,无论大小),那么它应该类似于以下内容(看起来我有点错误):

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--

所以需要注意的是,它实际上是“多部分/相关的”,并且有一个 application/json (对于某些请求,您可以在其中添加参数)部分以及包含整个电子邮件的 message/rfc822 部分。

这确实不容易——如果你能使用库,它肯定会减轻你的痛苦!

关于api - 使用api发送gmail附件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659744/

相关文章:

java - 有没有办法通过 API 在 MS Exchange Server 中创建帐户

c# - 在 C# 中使用 OAuth2 通过 Google API 进行身份验证

java - 有关 google-api-java-client 的帮助

ios - MFMailComposeViewController 邮件收件人限制

c++ - IAT Hook 但未调用 Hook 函数

javascript - 使用 googleapis 检测地理位置并使用 jQuery 从 openweathermap 接收该位置的当前天气

c++ - 如何获取打印机端口详细信息?

iphone - Google direction api 请求在 ios5 中无效

android-intent - 将我的应用程序添加到 "Complete Action Using"列表中,用于 Gmail 中的附件

gmail - 在 Gmail 中搜索电子邮件时,如何始终排除环聊 (-in :chats)