【发布时间】:2017-06-22 14:58:56
【问题描述】:
在 Javascript 中使用 Gmail API 发送带有 HTML 正文和约 100KB PDF 附件的邮件时,附件会正确显示为附加到发件人的 Gmail 已发送文件夹中的邮件,但不会显示在收件人的邮件中.
API 调用是 POST 到:
https://www.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=media
发送到 API 的请求正文是:
{
"headers": {
"Authorization": "Bearer authToken-removedForThisPost"
},
"method": "POST",
"contentType": "message/rfc822",
"contentLength": 134044,
"payload": "exampleBelow",
"muteHttpExceptions": true
}
这是有效载荷的样子:
MIME-Version: 1.0
To: =?utf-8?B?TWlrZSBD?=<recipient@test.com>
CC: =?utf-8?B?TWlrZSBD?=<secondrecipient@gmail.com>
BCC: =?utf-8?B??=<bccrecipient@test.com>
From: =?utf-8?B?TWlrZSBxWXsd2lr?=<sender@test.com>
Subject: =?utf-8?B?subjectLine-removedForThisPost?=
Content-Type: multipart/alternative; boundary=__boundary__
--__boundary__
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
base64EncodedStringHere-removedForThisPost
--__boundary__
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
base64EncodedStringHere-removedForThisPost
--__boundary__
Content-Type: application/pdf; name="File Name.pdf"
Content-Disposition: attachment; filename="File Name.pdf"
Content-Transfer-Encoding: base64
base64EncodedStringHere-removedForThisPost
--__boundary__--
注意:Gmail API Uploading Attachments documentation 声明在上传简单附件(小于 5MB)时需要Content-Length。我这样做是为了让我的代码生成 PDF 附件总字节数的整数值。但是,我注意到 Content-Length 不包含在有效负载中。
我尝试将邮件的 multipart/alternative Content-Type 更改为 multipart/mixed - 这使得 PDF 附件正确附加到收件人的邮件中,但邮件的 HTML 正文呈现为纯文本( HTML 标记已显示),还有一个名为 noname.html 的附加附件,其中包含呈现为 HTML 的 HTML 内容。
我需要使收件人邮件中的电子邮件具有 HTML 呈现的正文和 PDF 附件。
更新:我上传了 here 的原始电子邮件示例。 已发送消息在左侧,已接收消息在右侧。
【问题讨论】:
-
您是否尝试过引用边界 (
boundary="__boundary__") 并使用最终边界 (--__boundary__--)?试试like this 看看它是否有效。 -
刚刚意识到我的payload确实包含
--__boundary__--的最终边界,但是当我将它粘贴到这里时它被切断了,因为console.log消息由于超长的附件base64字符串而被截断。至于双引号 - 我将它们添加到第一行Content-Type:,但它根本没有改变行为 - 无论有没有它们都一样。 -
只是为了检查,当从 UI 发送此消息时,是否收到了带有相同附件的消息?此外,所有收件人都发生这种情况吗?还是只针对特定的域/用户?
-
是的,当在 Gmail UI 中发送带有附件的邮件时,收件人会正确接收。我还测试了多个不同的附件,以排除文件存在问题的可能性。而且我已经在不同域中对几个不同的收件人进行了测试,所有收件人都缺少附件。
标签: email gmail attachment email-attachments gmail-api