我正在尝试使用Nodemailer和nodeJS服务器上的gmail帐户发送电子邮件。我知道在Stackoverflow上有很多关于如何做到这一点的问题。
最有帮助的是下面的答案。其中介绍了如何使用Oauth playground工具访问Drive API(在我的案例中为GMAIL API)。
How do I authorise an app (web or installed) without user intervention? (canonical ?)
所以我完全按照这些步骤(加上允许更少保护应用程序)然后在nodejs中我尝试使用Nodemailer发送电子邮件如下:
createTransport
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: globals.admin_email,
clientId: globals.client_id,
clientSecret: globals.secret,
refreshToken: globals.refresh_token,
accessToken: globals.access_token,
},
});
定义电子邮件选项
var mail_options = {
from: globals.admin_email,
to: receiver_email, // list of receivers
subject: 'API key request',
html: '<h3>A new API key request<h3> </br> <h5>From: ' + user_name + '</h5> </br>' +
'<h5>Email: ' + user_email + '</h5> </br> <h5> Institute: ' + user_insititute + '</h5>' +
'<p>You can generate keys by going to /gen_keys</p>',
};
Sendmail的
transporter.sendMail(mail_options, function (err, info) {
if (err) {
console.log(err);
return err;
}
console.log('Sent email: ' + info.response);
})
但是,当我运行代码时,我收到以下错误
{ [Error: Invalid login: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 https://support.google.com/mail/?p=BadCredentials 43sm6162153wrx.26 - gsmtp]
code: 'EAUTH',
response: '535-5.7.8 Username and Password not accepted. Learn more at\n535 5.7.8 https://support.google.com/mail/?p=BadCredentials 43sm6162153wrx.26 - gsmtp',
responseCode: 535,
command: 'AUTH PLAIN' }
这很奇怪,因为我没有使用基本身份验证(用户名和密码)。我正在使用Oauth使用我在开发人员控制台上创建的凭据(OAuth客户端ID)
有什么建议吗?
编辑:
有些错误是错误地设定范围。
我检查了授权范围,它是https://mail.google.com/
所以这可能不是这里的问题