尝试使用Gmail Nodejs Nodemailer发送电子邮件时,OAuth2正在生成“用户名和密码未被接受”错误
代码 - Nodejs - Nodemailer和xoauth2
var nodemailer = require("nodemailer");
var generator = require('xoauth2').createXOAuth2Generator({
user: "", // Your gmail address.
clientId: "",
clientSecret: "",
refreshToken: "",
});
// listen for token updates
// you probably want to store these to a db
generator.on('token', function(token){
console.log('New token for %s: %s', token.user, token.accessToken);
});
// login
var smtpTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
xoauth2: generator
}
});
var mailOptions = {
to: "",
subject: 'Hello ', // Subject line
text: 'Hello world ', // plaintext body
html: '<b>Hello world </b>' // html body
};
smtpTransport.sendMail(mailOptions, function(error, info) {
if (error) {
console.log(error);
} else {
console.log('Message sent: ' + info.response);
}
smtpTransport.close();
});
问题:
-
我使用Google OAuth2游乐场创建令牌,https://developers.google.com/oauthplayground/
-
它看起来使用refreshToken获取有效的accessToken ok(即它在屏幕上打印新的访问令牌 . )在尝试发送电子邮件之前没有错误 .
-
我添加了可选的accessToken:但是得到了同样的错误 . (“不接受用户名和密码”)
-
我不是100%肯定“用户名”,文档说它需要一个“用户”的电子邮件地址 - 我想是创建给令牌的帐户的电子邮件,但不是100%清楚 . 我尝试了几件事但都没有用 .
-
我搜索了gmail帐户上的选项,没有发现任何看起来错误的内容 .
-
此外,当我使用Java执行此操作时,它需要google用户ID而不是电子邮件地址,不确定为何使用电子邮件地址而Java正在使用UserId .
1 回答
nodemailer以“compose”范围失败
问题是“范围”
它失败了:https://www.googleapis.com/auth/gmail.compose
但如果我使用https://mail.google.com/就可以正常工作