仅使用令牌发送带有 Gmail API 的电子邮件?
Sending an email with Gmail's API using only a token?
我正在尝试使用 Google 的 API 发送电子邮件。我有一个由 AngularJS 提供支持的 Web 应用程序,其中用户使用 oauth2 使用他们的 google 帐户(通过 passport.js)登录。一个新的访问令牌被写入他们在我的数据库中的帐户。他们的 google 用户 ID 也写入了他们的帐户。我希望用户能够仅使用他们的用户 ID 和访问令牌通过 HTTP 请求发送电子邮件。我正在使用 Postman 发出一些测试请求,但我一直收到此错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
我正在使用以下 link 发出 POST 请求:
https://content.googleapis.com/gmail/v1/users/106xxxxxxxxxxx/messages/send
在我的 header 中,我有:
Authorization: Bearer yaxx._wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
我的body:
{
"raw": "test"
}
我已经收到一些使用此方法间歇性发送的电子邮件,但我似乎无法确定地重新创建成功的请求。 Google 的文档让我有点困惑。我是否需要明确授予访问权限,如 this page 底部的示例所示?
您提到的 access token
需要出现在您发送邮件的 POST
-请求中。 Oauth2-协议规定您需要传递 header Authorization: Bearer <ACCESS_TOKEN>
或参数 access_token=<ACCESS_TOKEN>
.
raw
的值也需要是有效的 base64-encoded rfc822 邮件。 JavaScript 中的示例如下所示:
// Base64-encode the mail and make it URL-safe
// (replace all "+" with "-" and all "/" with "_")
var encodedMail = btoa(
"Content-Type: text/plain; charset=\"UTF-8\"\n" +
"MIME-Version: 1.0\n" +
"Content-Transfer-Encoding: 7bit\n" +
"Subject: Subject of the mail\n" +
"From: sender@gmail.com\n" +
"To: reciever@gmail.com\n\n" +
"This is where the mail text will go"
).replace(/\+/g, '-').replace(/\//g, '_');
这将导致您在请求 body.
中用作 raw
的字符串
Postman 中的请求将如下所示:
POST https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token=<ACCESS_TOKEN>
{ // The encoded mail from the example above.
"raw": "Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdApTdWJqZWN0OiBTdWJqZWN0IG9mIHRoZSBtYWlsCkZyb206IHNlbmRlckBnbWFpbC5jb20KVG86IHJlY2lldmVyQGdtYWlsLmNvbQoKVGhpcyBpcyB3aGVyZSB0aGUgbWFpbCB0ZXh0IHdpbGwgZ28="
}
您还需要为 Content-Type
-header 提供 application/json
的值。请注意,您不必使用 userId。提供 me
将使 Google 自动使用与提供的访问令牌关联的用户。
还要确保您使用 Passport 请求了足够的权限 scope
。 https://mail.google.com/
会起作用。
我正在尝试使用 Google 的 API 发送电子邮件。我有一个由 AngularJS 提供支持的 Web 应用程序,其中用户使用 oauth2 使用他们的 google 帐户(通过 passport.js)登录。一个新的访问令牌被写入他们在我的数据库中的帐户。他们的 google 用户 ID 也写入了他们的帐户。我希望用户能够仅使用他们的用户 ID 和访问令牌通过 HTTP 请求发送电子邮件。我正在使用 Postman 发出一些测试请求,但我一直收到此错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
我正在使用以下 link 发出 POST 请求:
https://content.googleapis.com/gmail/v1/users/106xxxxxxxxxxx/messages/send
在我的 header 中,我有:
Authorization: Bearer yaxx._wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
我的body:
{
"raw": "test"
}
我已经收到一些使用此方法间歇性发送的电子邮件,但我似乎无法确定地重新创建成功的请求。 Google 的文档让我有点困惑。我是否需要明确授予访问权限,如 this page 底部的示例所示?
您提到的 access token
需要出现在您发送邮件的 POST
-请求中。 Oauth2-协议规定您需要传递 header Authorization: Bearer <ACCESS_TOKEN>
或参数 access_token=<ACCESS_TOKEN>
.
raw
的值也需要是有效的 base64-encoded rfc822 邮件。 JavaScript 中的示例如下所示:
// Base64-encode the mail and make it URL-safe
// (replace all "+" with "-" and all "/" with "_")
var encodedMail = btoa(
"Content-Type: text/plain; charset=\"UTF-8\"\n" +
"MIME-Version: 1.0\n" +
"Content-Transfer-Encoding: 7bit\n" +
"Subject: Subject of the mail\n" +
"From: sender@gmail.com\n" +
"To: reciever@gmail.com\n\n" +
"This is where the mail text will go"
).replace(/\+/g, '-').replace(/\//g, '_');
这将导致您在请求 body.
中用作raw
的字符串
Postman 中的请求将如下所示:
POST https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token=<ACCESS_TOKEN>
{ // The encoded mail from the example above.
"raw": "Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdApTdWJqZWN0OiBTdWJqZWN0IG9mIHRoZSBtYWlsCkZyb206IHNlbmRlckBnbWFpbC5jb20KVG86IHJlY2lldmVyQGdtYWlsLmNvbQoKVGhpcyBpcyB3aGVyZSB0aGUgbWFpbCB0ZXh0IHdpbGwgZ28="
}
您还需要为 Content-Type
-header 提供 application/json
的值。请注意,您不必使用 userId。提供 me
将使 Google 自动使用与提供的访问令牌关联的用户。
还要确保您使用 Passport 请求了足够的权限 scope
。 https://mail.google.com/
会起作用。