我正在尝试使用其 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/