仅使用访问令牌使用 Google API 发送电子邮件

Posted

技术标签:

【中文标题】仅使用访问令牌使用 Google API 发送电子邮件【英文标题】:Send email using Google API with only access token 【发布时间】:2015-06-12 19:11:22 【问题描述】:

我想通过 Google API 发送一封没有不必要 OAUTH2 参数的电子邮件。我只有那个用户的 access_token 和 refresh_token。

如何使用 Request npm 插件通过 NodeJS 中的基本 POST 请求通过 Gmail API 发送电子邮件?

【问题讨论】:

我怎样才能为用户生成Access_token而不是麻烦? 【参考方案1】:

亚伯拉罕是对的,但我只是想给你举个例子。

var request = require('request');

server.listen(3000, function () 
  console.log('%s listening at %s', server.name, server.url);

  // Base64-encode the mail and make it URL-safe 
  // (replace all "+" with "-" and all "/" with "_")
  var encodedMail = new Buffer(
        "Content-Type: text/plain; charset=\"UTF-8\"\n" +
        "MIME-Version: 1.0\n" +
        "Content-Transfer-Encoding: 7bit\n" +
        "to: reciever@gmail.com\n" +
        "from: sender@gmail.com\n" +
        "subject: Subject Text\n\n" +

        "The actual message text goes here"
  ).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');

  request(
      method: "POST",
      uri: "https://www.googleapis.com/gmail/v1/users/me/messages/send",
      headers: 
        "Authorization": "Bearer 'access_token'",
        "Content-Type": "application/json"
      ,
      body: JSON.stringify(
        "raw": encodedMail
      )
    ,
    function(err, response, body) 
      if(err)
        console.log(err); // Failure
       else 
        console.log(body); // Success!
      
    );
);

不要忘记更改收件人和发件人电子邮件地址以使示例正常工作。

【讨论】:

这个答案解决了我的凭据无效问题。非常感谢。 @ShashidharGr 太棒了 :) 很高兴我能帮上忙! 如果我使用https://www.googleapis.com/upload/gmail/v1/users/userId/messages/send 我收到错误媒体类型'application/json' is not supported。有效的媒体类型:[message/rfc822]。我需要发送带有附件的电子邮件【参考方案2】:

two methods 用于将 OAuth2 访问令牌附加到 Google API 请求。

像这样使用 access_token 查询参数:?access_token=oauth2-token 像这样使用 HTTP 授权标头:Authorization: Bearer oauth2-token

第二个更适合 POST 请求,因此用于发送电子邮件的原始 HTTP 请求看起来像这样。

POST /gmail/v1/users/me/messages/send HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer oauth2Token
"raw":"encodedMessage"

【讨论】:

在 Authorization 标头中使用 Bearer 或 OAuth 有什么区别?示例:`'Authorization': 'OAuth' + account.access_token, Authorization: Bearer ... 是 OAuth 2,Authorization: OAauth ... 是 OAuth 1。虽然我确信两者都有其他用途。

以上是关于仅使用访问令牌使用 Google API 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

无需 Oauth 令牌即可访问 Google 电子表格 API

使用 google API 发送电子邮件时出现“unauthorized_client”错误

使用 OAuth 刷新令牌获取新的访问令牌 - Google API

无法访问通过 Google 电子表格 API 通过服务帐户创建的工作表

如何使用 api 通过应用程序发送电子邮件

Google API OAuth2 刷新令牌突然被撤销