代码之家  ›  专栏  ›  技术社区  ›  JC97

在nodemail中使用oauth2时,gmail api“用户名或密码无效”

  •  2
  • JC97  · 技术社区  · 6 年前

    我正在尝试将gmail smtp与最新版本的nodemail结合使用。 我已经完成了描述的步骤 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次,所以我很确定所有凭据都正确填写。

    提前谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   abielita    6 年前

    基于此 post ,尝试配置您的Transporter,如下所示:

    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 因为可能的原因你会遇到那个错误。