我正在尝试使用服务帐户和JWT身份验证发送电子邮件,并通过一条非常无用的消息继续收到错误:{ code: 500, message: null }
此代码段来自以下StackOverflow链接:Failed sending mail through google api in nodejs
似乎解决方案是将参数中的键更改为resource
而不是message
,但它对我不起作用。这很奇怪,因为在文档(https://developers.google.com/gmail/api/v1/reference/users/messages/send)中的JS示例中,它声称密钥仍为message
我正在使用
进行身份验证var jwtClient = new google.auth.JWT(config.SERVICE_EMAIL, config.SERVICE_KEY_PATH, null, config.ALLOWED_SCOPES);
然后发送电子邮件
jwtClient.authorize(function(err, res) {
if (err) return console.log('err', err);
var email_lines = [];
email_lines.push("From: \"Some Name Here\" <rootyadaim@gmail.com>");
email_lines.push("To: hanochg@gmail.com");
email_lines.push('Content-type: text/html;charset=iso-8859-1');
email_lines.push('MIME-Version: 1.0');
email_lines.push("Subject: New future subject here");
email_lines.push("");
email_lines.push("And the body text goes here");
email_lines.push("<b>And the bold text goes here</b>");
var email = email_lines.join("\r\n").trim();
var base64EncodedEmailSafe = new Buffer(email).toString('base64').replace(/\+/g, '-').replace(/\//g, '_');
var params = {
auth: jwtClient,
userId: "myaddress@gmail.com",
resource: {
raw: base64EncodedEmailSafe
}
};
gmail.users.messages.send(params, function(err, res) {
if (err) console.log('error sending mail', err);
else console.log('great success', res);
});
}
图书馆中的评论似乎也说资源也是正确的属性(https://github.com/google/google-api-nodejs-client/blob/master/apis/gmail/v1.js)
我错过了什么?
答案 0 :(得分:1)
根据github上的@ryanseys
您无法使用JWT授权Gmail API请求,您必须使用OAuth 2.0,因为它需要为特定用户授权。否则你就可以做一些非常阴暗的事情,例如发送冒充他人的消息。 Google API Explorer使用OAuth 2.0进行身份验证,这就是它的工作原理。有关详细信息,请参阅https://developers.google.com/gmail/api/auth/about-auth。
正如您在Failed sending mail through google api in nodejs,auth: OAuth2Client
中看到的那样,他们正在使用OAuth2客户端进行身份验证。目前无法使用GMail API发送邮件,而无需作为特定GMail用户进行身份验证。服务帐户无法像普通用户那样访问GMail。
希望这有助于其他人尝试使用服务帐户发送邮件!