1

我正在使用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,这让我得到了这个(我尝试在其他 StackOverflow 帖子中交换“+”和“-”但无济于事):

dG86ICdNaWNoYWVsIFRvJyA8RmFrZU1pY2hhZWxAZ21haWwuY29tPg1mcm9tOiAnSm9obiBGcm9tJyA8Sm9obkZAbXlkb21haW4uY29tPg1zdWJqZWN0OiAnVGVzdCBNZXNzYWdlJw1odG1sQm9keTogJzxiPkhJITwvYj48YnI-VGVzdCBNZXNzYWdlJw==

在操场上,我的方法是 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 发送邮件文件夹时,邮件在那里,但收件人、主题或正文字段中没有任何内容:请参阅屏幕截图

我不得不想象这很简单,但由于我是 Google Gmail API、MIME 和处理原始 Base64 东西的新手,所以我运气不佳。

提前感谢您的任何帮助。

--- 编辑每 THOLLE 的回应 ---

这有帮助!我删除了原始 base64 字符串标题并输入:

From: 'John From' <JohnF@mydomain.com>
Subject: Test Message
To: 'Michael To' <FakeMichael@gmail.com>
Test Message

进入“输入请求正文”并发送,这很棒!

三个后续问题:

  1. 是否有任何安全风险或限制(最大长度?我看到可能有 2mb 的限制,但这将是很多文本。)以这种方式(在正文中)发送它,而不是在标头中使用原始 Base64 字符串?
  2. (我将对此进行深入研究)如何制作邮件正文 HTML?“Content-Type:message/rfc822”的内容类型是否会阻止我发送 HTML?发送 HTML 是此应用程序的一项要求,我不能有两种内容类型,是否有可以使用的 HTML 参数,或者我不走运?
  3. (我也会在这方面做功课)如何在电子邮件中包含附件,比如 PDF 文件?

再次感谢!

4

1 回答 1

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>
于 2015-06-10T17:58:38.783 回答