仅使用令牌使用 Gmail 的 API 发送电子邮件?



我正在尝试使用Google的API发送电子邮件。我有一个由AngularJS支持的网络应用程序,用户可以使用oauth2使用他们的谷歌帐户(通过passport.js(登录。一个新的访问令牌被写入他们在我的数据库上的帐户。他们的谷歌用户ID也会写入他们的账户。我希望用户能够通过HTTP请求发送电子邮件,只需使用他们的用户Id和访问令牌。我正在使用Postman进行一些测试请求,但我一直收到这个错误:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "insufficientPermissions",
        "message": "Insufficient Permission"
      }
    ],
    "code": 403,
    "message": "Insufficient Permission"
  }
}

我使用以下链接进行POST请求:

https://content.googleapis.com/gmail/v1/users/106xxxxxxxxxxx/messages/send

在我的标题中,我有:

Authorization: Bearer yaxx._wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

我的身体:

{
 "raw": "test"
}

我曾使用这种方法间歇性地收到一些电子邮件,但我似乎无法确定地重新创建成功的请求。谷歌的文档让我有点困惑。如本页底部的示例所示,我是否需要明确授予访问权限?

您提到的access token需要出现在发送邮件的POST请求中。Oauth2 procotol指示您需要传递一个标头Authorization: Bearer <ACCESS_TOKEN>或一个参数access_token=<ACCESS_TOKEN>

raw的值还需要是一个有效的base64编码的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.0n" +
      "Content-Transfer-Encoding: 7bitn" +
      "Subject: Subject of the mailn" +
      "From: sender@gmail.comn" +
      "To: reciever@gmail.comnn" +
      "This is where the mail text will go"
    ).replace(/+/g, '-').replace(///g, '_');

这将导致在请求正文中使用一个字符串作为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-标头提供值application/json。请注意,您不必使用userId。提供me将使Google自动使用与所提供的访问令牌相关联的用户。

此外,请确保您使用Passport申请了足够的scope权限。https://mail.google.com/将起作用。

相关内容

  • 没有找到相关文章

最新更新