在nodemailer中使用OAuth2时,Gmail API“无效的用户名或密码”

时间:2018-07-27 09:45:03

标签: node.js gmail-api nodemailer

我正在尝试将gmail smtp与最新版本的nodemailer一起使用。 我已经完成了here中描述的步骤。发送邮件时,我仍然收到以下错误消息:

错误:无效的登录名:535-5.7.8用户名和密码不被接受

这很奇怪,因为我从不尝试使用密码/用户名登录,而是使用OAuth2:

    transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            type: 'OAuth2',
            user: 'hello@company.com',
            clientId: '<clientId>.apps.googleusercontent.com',
            clientSecret: '<clientSecret>',
            accessToken: '<accessToken>',
            refreshToken: '<refreshToken>',
        }
    });

     transporter.sendMail({
        from: from,
        to: to,
        subject: subject,
        text: message,
        html: htmlMessage
    }, function (err, data) {
            if (err) {
                console.log(err);
                console.log("======");
                console.log(subject);
                console.log(message);
            } else {
                console.log('Email sent:');
                console.log(data);
            }
    });

有人知道我错过了什么吗?我尝试执行所有这些步骤来生成这些令牌3次,所以我很确定所有凭据都正确填写。

预先感谢

2 个答案:

答案 0 :(得分:2)

基于此post,尝试如下所示配置传输器:

const transporter = nodemailer.createTransport({
  host: 'smtp.gmail.com',
  port: 465,
  secure: true,
  auth: {
    type: 'OAuth2',
    user: process.env.MAIL_USER,
    clientId: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    refreshToken: process.env.GOOGLE_CLIENT_REFRESH_TOKEN
  }
});
     

如果不确定如何生成ID,机密和令牌,请按照此处的步骤https://medium.com/@pandeysoni/nodemailer-service-in-node-js-using-smtp-and-xoauth2-7c638a39a37e

您也可以检查此link,以了解导致该错误的可能原因。

答案 1 :(得分:0)

就我而言,将用户设置为仅我的用户名似乎很神奇!

const transport = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    type: 'OAuth2',
    user: 'test', //Excluding the part after '@' Example: test@gmail.com to only 'test'
    clientId: CLIENT_ID,
    clientSecret: CLEINT_SECRET,
    refreshToken: REFRESH_TOKEN,
    accessToken: accessToken,
  },
});