如何使用新的Gmail REST API成功发送邮件?

Tai*_*fun 24 rest gmail gmail-api

我目前正在尝试测试新的Gmail REST API.

API资源管理器中,可以使用OAuth 2.0授权请求并执行请求,即发送消息.

首先我授权. 在此输入图像描述

我正在使用以下测试数据(当然我使用的是有效的to电子邮件地址):

{    
   "raw": "c2VuZGluZyBhIG1haWwgdXNpbmcgR21haWwgUkVTVCBBUEk=",  
   "payload": { 
     "headers": [ 
       { "name": "to",      "value": "info@something.com"   }, 
       { "name": "from",    "value": "taifunbaer@gmail.com" }, 
       { "name": "subject", "value": "Test Gmail REST API"  } 
     ],
     "mimeType": "text/plain" 
   }
}
Run Code Online (Sandbox Code Playgroud)

我也得到了一个200 OK和以下的结果,看起来很好.

{
  "id": "146dee391881b35b",
  "threadId": "146dee391881b35b",
}
Run Code Online (Sandbox Code Playgroud)

但是,邮件将无法成功发送,我可以nobody@gmail.com在收件箱中找到一条消息;"An error occurred, your message has not been sent."

在此输入图像描述

问题:
1.有人成功测试过吗?
2.我是否必须添加一些其他参数才能使其运行?



编辑:有2种不同的HTTP请求方法,

  1. 媒体上传请求的上传URI,以及
  2. 仅元数据请求的元数据URI

The API Explorer currently supports metadata requests only,这意味着没有附件的纯文本消息,这就是我想要做的.

Tai*_*fun 50

得到它了!

在阅读了我发现的RFC 2822规范之后,需要在raw参数中传递完整的消息,请参阅示例:

From: John Doe <jdoe@machine.example> 
To: Mary Smith <mary@example.net> 
Subject: Saying Hello 
Date: Fri, 21 Nov 1997 09:55:06 -0600 
Message-ID: <1234@local.machine.example>

This is a message just to say hello. So, "Hello".
Run Code Online (Sandbox Code Playgroud)

所以在base64编码完整的消息后,在raw参数中传递它而不使用任何其他参数,它工作正常.

编辑1:
正如@Amit所提到的,它必须是网络安全的base64编码,另请参阅https://code.google.com/p/stringencoders/wiki/WebSafeBase64

因此,要将base64 alpha转换为"Web安全"格式,建议进行以下更改:

+ --> - (char 62, plus to dash)
/ --> _ (char 63, slash to underscore)
= --> * padding
Run Code Online (Sandbox Code Playgroud)

要只转换+-/_足够我.

编辑2:
在这里回答@Hjulle的问题一个例子:你只需要userId在请求体中的和raw参数.我们假设您的电子邮件地址是jdoe@machine.example

First Base64使用在线编码器编码完整的消息(见上文),你得到这个字符串:

RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ+IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
Run Code Online (Sandbox Code Playgroud)

现在转换 +-/_和你

RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ-IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
Run Code Online (Sandbox Code Playgroud)

现在raw在API Explorer 的参数中传递它.

  • 必需的url编码。http://stackoverflow.com/questions/22128789/converting-string-to-web-safe-base64-format (2认同)