我目前正在尝试测试新的Gmail REST API 。
在API Explorer中,可以使用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"
}
}
我还得到一个200 OK
和以下结果,看起来不错。
{
"id": "146dee391881b35b",
"threadId": "146dee391881b35b",
}
但是,邮件将无法成功发送,我可以在收件箱中找到来自nobody@gmail.com
的邮件; "An error occurred, your message has not been sent."
问题:
的 1。有人测试过这个吗?
2.我是否必须添加其他参数才能使其运行?
编辑:有两种不同的HTTP请求方法,
The API Explorer currently supports metadata requests only
,这意味着没有附件的纯文本邮件,这就是我想要做的。
答案 0 :(得分:50)
得到了它!
在阅读我发现的RFC 2822 specification之后,需要在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".
因此,在base64对完整消息进行编码后,将其传递给raw
参数而不使用任何其他参数,它可以正常工作。
编辑1:
正如@Amit所提到的那样,它必须是 web-safe base64 编码,另请参阅https://code.google.com/p/stringencoders/wiki/WebSafeBase64
所以要将base64 alpha转换为“web-safe”格式 建议进行以下更改:
+ --> - (char 62, plus to dash) / --> _ (char 63, slash to underscore) = --> * padding
仅将+
转换为-
和/
转换为_
对我来说已足够。
编辑2:
要在这里回答@Hjulle的问题示例:您只需要userId
并且在请求正文中需要raw
参数。我们假设您的电子邮件地址为jdoe@machine.example
First Base64使用online encoder编码完整的消息(见上文),你得到这个字符串:
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ+IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
现在将+
转换为-
,将/
转换为_
即可
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ-IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
现在在API Explorer的raw
参数中传递此内容。
答案 1 :(得分:1)
注意:这是PHP特定的答案,但我相信你们中的一些人会发现它很有用。
如果你正在努力在PHP中正确设置原始数据,那么使用PHPMailer会让事情变得更清晰,更容易。
在您的代码中包含库之后(如果您使用composer,只需在composer.json的require部分添加“phpmailer / phpmailer”:“~5.2”),您可以设置基本的详细信息:
$mail = new PHPMailer();
$mail->From = 'FROM_EMAIL';
$mail->FromName = 'FROM_NAME';
$mail->addAddress('TO_EMAIL','TO_NAME');
$mail->Subject = 'EMAIL_SUBJECT';
$mail->Body = 'EMAIL_BODY';
$mail->preSend();
$mime = $mail->getSentMIMEMessage();
现在,您可以对$ mime进行base64编码,以获取Gmail API的原始字符串。使用此代替简单的base64_encode,以获得有效的Web安全编码字符串。
rtrim(strtr(base64_encode($mime), '+/', '-_'), '=');
答案 2 :(得分:0)
这对我有用
网址:https://www.googleapis.com/upload/gmail/v1/users/me/messages/send
(POST方法)
InHeaders:-
“ Authorization
”:“ Bearer ya29.Il-iBylW9AUr6V0QO72ryo17r7hf8i5zh8dU63ZjDNaxAApumh6T7lh20my_DQZomtL_qokZnJEgapYN20LmdlG6lFbqGASL5lqFAKnOoUtZA992JwOlUQxMVW6_Yto7jQ
”,
“ Content-Type
”:“ message/rfc822
”
InBody:-
{"raw": "From: <from@gmail.com>
To: <to@gmail.com>
Subject: Saying Hello
This is a message just to say hello. So, "Hello"."}