【发布时间】:2016-10-20 11:58:40
【问题描述】:
我正在为 nodeJS 使用最新 (0.9.8) 的 google-api-nodejs-client 库。
我使用服务帐户和范围为 https:\\googleapis.com/auth/gmail.send(以及 /auth/drive FWIW)的 JWT 进行身份验证。
我尝试像这样发送电子邮件(base64urlencoded):
req = mail.users.messages.send(
{
auth: jwtClient, // really works with google drive
userId: actual@gmail.com // actually a legit gmail address
resource: {
raw: message // base64encode(urlencode(RFC822 msg))
}
}, (err, res) => { console.log(err); }
);
并且回调接收到这个非常有用的对象:
{"code": 400,"errors":[{"domain":"global","reason":"failedPrecondition","message":"Bad Request"}]}
我知道 google-api-nodejs-client 是 alpha 版,并且 GMail API 本身正在发展(消息与资源等)。因此,一些在线信息——包括谷歌自己的文档——不一致是可以理解的。我正在寻找任何建议,因为错误似乎很笼统。
【问题讨论】:
-
更新:我也得到了
users.labels.list({auth: jwtClient, userId: 'me'})的(400,错误请求)。暂时将auth设置为 null 会出现权限错误,所以我知道我的 JWT 很好。如果我改为为用户(不是我的服务帐户)使用 OAuth2,我得到的标签就好了。我会说我对服务帐户做了一些全局错误,但我可以使用相同的 JWT list() 和 create() Google Drive 文档,没问题。 ??? -
好的,看起来 (github.com/google/google-api-nodejs-client/issues/399) 可能 GMail 只能与 OAuth2 客户端 ID 一起使用,而不能与服务帐户一起使用。我将设置域范围的委派,为服务帐户创建一个客户端 ID,然后使用该客户端 ID 尝试 GMail。
标签: gmail-api