如何使用新的 Gmail REST API 成功发送邮件? [英] How to send a message successfully using the new Gmail REST API?
问题描述
我目前正在尝试测试新的 后,我发现,完整的消息需要传入raw
参数,看例子:
发件人:John Doe 致:玛丽·史密斯 <mary@example.net>主题:打个招呼日期:1997 年 11 月 21 日星期五 09:55:06 -0600消息 ID:<1234@local.machine.example>这是一条消息,只是为了打个招呼.所以,你好".
因此在对完整消息进行 base64 编码后,将其传递到 raw
参数中而不使用任何其他参数,它工作正常.
编辑 1:
正如@Amit 提到的,它必须是网络安全的 base64 编码,另见 https://code.google.com/p/stringencoders/wiki/WebSafeBase64
因此,要将 base64 alpha 转换为网络安全"格式,请执行以下操作:这建议进行以下更改:
+ -->- (字符 62,加上破折号)/-->_(字符 63,斜线到下划线)= -->* 填充
仅将 +
转换为 -
并将 /
转换为 _
对我来说就足够了.
编辑 2:
为了回答@Hjulle 的问题,举个例子:你只需要 userId
和请求正文中的 raw
参数.假设您的电子邮件地址是 jdoe@machine.example
首先使用 在线编码器 对完整消息(见上文)进行 Base64 编码,您将得到这个字符串:
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1hcnlAZXhhbXBsZS5uZXQ+IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhhbXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
现在将 +
转换为 -
并将 /
转换为 _
并得到
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1hcnlAZXhhbXBsZS5uZXQ-IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhhbXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
现在将其传递到 API Explorer 的 raw
参数中.
I'm currently trying to test the new Gmail REST API.
In the API Explorer it is possible to authorize requests using OAuth 2.0 and to execute a request, i.e. send a message.
First I authorized.
I'm using the following test data (and of course I used a valid to
email address):
{
"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"
}
}
I also get a 200 OK
and the following result back, which looks fine.
{
"id": "146dee391881b35b",
"threadId": "146dee391881b35b",
}
However, the mail will not be sent successfully and I can find an message from nobody@gmail.com
in the inbox instead;: "An error occurred, your message has not been sent."
Questions:
1. Did someone test this successfully?
2. Do I have to add some other parameter to get this running?
EDIT: There are 2 different HTTP request methods,
- the Upload URI for media upload requests, and
- the Metadata URI for metadata-only requests
The API Explorer currently supports metadata requests only
, which means plain-text messages without attachment, and this is what I'm trying to do.
got it!
after reading the RFC 2822 specification I found out, that the complete message needs to be passed in the raw
parameter, see the example:
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".
So after base64 encoding the complete message, passing it in the raw
parameter without using any other parameter, it works fine.
Edit 1:
As @Amit mentioned, it must be web-safe base64 encoded, see also https://code.google.com/p/stringencoders/wiki/WebSafeBase64
So to convert the base64 alpha into a format that is "web-safe" the following changes are recommended:
+ --> - (char 62, plus to dash) / --> _ (char 63, slash to underscore) = --> * padding
To only convert +
to -
and /
to _
was sufficient for me.
Edit 2:
To answer the question of @Hjulle here an example: you only need the userId
and in the request body the raw
parameter. Let's assume, your email address is jdoe@machine.example
First Base64 encode the complete message (see above) using an online encoder and you get this string:
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ+IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
Now convert +
to -
and /
to _
and you get
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ-IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
Now pass this in the raw
parameter of the API Explorer.
这篇关于如何使用新的 Gmail REST API 成功发送邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!