【发布时间】:2015-01-10 03:49:37
【问题描述】:
OAuth2 在尝试使用 Gmail+Nodejs+Nodemailer 发送电子邮件时产生“用户名和密码不被接受”错误
代码 - 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 Playground 创建令牌,https://developers.google.com/oauthplayground/
它看起来可以使用 refreshToken 获取有效的 accessToken(即,它会在屏幕上打印新的访问令牌。)在尝试发送电子邮件之前不会出错。
我添加了可选的 accessToken: 但得到了同样的错误。 ( "用户名和密码不被接受")
我不是 100% 确定“用户名”,文档说它需要一个“用户”电子邮件地址 - 我猜是创建令牌的帐户的电子邮件,但不是 100% 清楚。我已经尝试了几件事,但都没有成功。
我已经搜索了 gmail 帐户上的选项,没有发现任何看起来有问题的内容。
另外,当我使用 Java 执行此操作时,它需要 google 用户 ID 而不是电子邮件地址,不知道为什么这是使用电子邮件地址而 Java 使用的是 UserId。
【问题讨论】:
标签: oauth oauth-2.0 gmail google-apps nodemailer