Gmail API 游乐场:发送方法,转换后的 MIME 原始标头在发送时未填充电子邮件字段
Posted
技术标签:
【中文标题】Gmail API 游乐场:发送方法,转换后的 MIME 原始标头在发送时未填充电子邮件字段【英文标题】:Gmail API playground: Send method, converted MIME raw header not populating email fields on send 【发布时间】:2015-08-26 01:28:10 【问题描述】:我正在使用Google OAuth 2.0 Playground 并尝试发送电子邮件。 autentication 工作正常。这是我要发送的非常简单的消息(更改了电子邮件地址以防止垃圾邮件):
to: 'Michael To' <FakeMichael@gmail.com> from: 'John From' <JohnF@mydomain.com> subject: 'Test Message' htmlBody: '<b>HI!</b><br>Test Message'
我使用 VBA 将其转换为 Base64 RFC 822,这让我得到了这个(我尝试在其他 *** 帖子中交换“+”和“-”但无济于事):
dG86ICdNaWNoYWVsIFRvJyA8RmFrZU1pY2hhZWxAZ21haWwuY29tPg1mcm9tOiAnSm9obiBGcm9tJyA8Sm9obkZAbXlkb21haW4uY29tPg1zdWJqZWN0OiAnVGVzdCBNZXNzYWdlJw1odG1sQm9keTogJzxiPkhJITwvYj48YnI-VGVzdCBNZXNzYWdlJw == P>
在 Playground 中,我的方法是 POST,我添加了 2 个标题:
raw: and the Base64 string above (no quotes or anything)
Content-Type: message/rfc822 <I added this because I kept getting an a different error. Putting this prevetned that error>
请求 URI(删除了 https 的原因,所以不会让我发布超过 2 个链接)://www.googleapis.com/upload/gmail/v1/users/me/messages/send
我点击“发送请求”并得到 OK 响应:
这是我的要求:
POST /upload/gmail/v1/users/me/messages/send HTTP/1.1
Host: www.googleapis.com
Raw: <string above>
Content-length: 0
Content-type: message/rfc822
Authorization: Bearer <my token>
回复:
HTTP/1.1 200 OK
Alternate-protocol: 443:quic,p=1
Content-length: 91
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Vary: Origin, X-Origin
Server: UploadServer ("Built on Jun 6 2015 11:14:45 (1433614485)")
Etag: "YAnoF_dHYOakPARISZQhTvRsqto/nwevNUuzaUU_lB19L-UhrwaaUSM"
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Wed, 10 Jun 2015 15:59:36 GMT
Content-type: application/json; charset=UTF-8
"labelIds": [
"SENT"
],
"id": "14dde32bc92c9XYZ",
"threadId": "14dde32bc92c9XYZ"
但是,当我转到我的 Gmail 发送邮件文件夹时,邮件在那里,但收件人、主题或正文字段中没有任何内容:See Screenshot
我不得不想象这很简单,但由于我是 Google Gmail API、MIME 和处理 Raw Base64 东西的新手,所以我运气不佳。
提前感谢您的帮助。
--- 编辑 PER THOLLE 的回应 ---
这有帮助!我删除了原始 base64 字符串标题并放入:
From: 'John From' <JohnF@mydomain.com>
Subject: Test Message
To: 'Michael To' <FakeMichael@gmail.com>
Test Message
进入“输入请求正文”并发送,这很棒!
三个后续问题:
-
是否有任何安全风险或限制(最大长度?我看到可能有 2mb 的限制,但那会是很多文本。)以这种方式(在正文中)发送它,而不是在标头中使用原始 Base64 字符串?
(我将对此进行深入研究)如何将邮件正文设为 HTML? “Content-Type:message/rfc822”的内容类型是否会阻止我发送 HTML?向它发送 HTML 是此应用程序的一项要求,我不能有两种内容类型,是否有可以使用的 HTML 参数,还是我不走运?
(我也会做这方面的功课)如何在电子邮件中包含附件,比如 PDF 文件?
再次感谢!
【问题讨论】:
编辑了我的答案以支持 HTML :) 【参考方案1】:我认为您违反了 RFC 822 标准的一些小细节:
推荐 如果存在,标头将按“返回- 路径”、“接收”、“日期”、“发件人”、“主题”、“发件人”、 “收件人”、“抄送”等
我一辈子都找不到它,但我也认为标题的第一个字符必须大写。试试这个:
From: John From <JohnF@mydomain.com>
Subject: Test Subject
To: Michael To <FakeMichael@gmail.com>
Test Message
如果您选择 message/rfc822 作为您的 Content-Type,您也不想发送 base64 编码的邮件。只需按原样提供上面的示例邮件即可。
POST /upload/gmail/v1/users/me/messages/send HTTP/1.1
Host: www.googleapis.com
Content-length: 108
Content-type: message/rfc822
Authorization: Bearer YOUR_ACCESS_TOKEN
From: John From <JohnF@mydomain.com>
Subject: Test Subject
To: Michael To <FakeMichael@gmail.com>
Test Message
如果您想要 HTML,只需将您的消息修改为:
From: John From <JohnF@mydomain.com>
Subject: Test Subject
To: Michael To <FakeMichael@gmail.com>
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<b>Test Message</b>
【讨论】:
太棒了。让我试试,希望能把它关掉! 这适用于 HTML 电子邮件。非常非常感谢你。添加附件就这么简单吗? 甜蜜! ***.com/questions/24908700/…这可能会对你有所帮助。检查“带有附件的邮件”。以上是关于Gmail API 游乐场:发送方法,转换后的 MIME 原始标头在发送时未填充电子邮件字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中向 Gmail-API 发送批处理请求?
尝试在 Java 中使用 Gmail API 发送电子邮件时出错