使用 nodemailer 时不接受用户名和密码?

新手上路,请多包涵

这是我的设置控制器:

 var sendSmtpMail = function (req,res) {
  var transport = nodemailer.createTransport({
  service:'gmail',
   auth: {
             user: "asdfqweerrccb@limitlesscircle.com",
             pass: "qwerr@wee"
        }
   });
   var mailOptions = {
        from: "transactions@limitlesscircle.com",
        to:'umaraja1124@gmail.com',
        subject: req.body.subject+"nodejs working ?",
        text: "Hello world ?",
    }
    transport.sendMail(mailOptions, function(error, response){
      if(error){
         res.send("Email could not sent due to error: "+error);
         console.log('Error');
       }else{
         res.send("Email has been sent successfully");
         console.log('mail sent');
      }
  });

在邮递员中,我得到了这样的错误:

由于错误无法发送电子邮件:

 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 g7sm64435626pfj.29 - gsmtp

原文由 uma raja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 776
1 个回答

更新 (2022-05-02)

正如评论中提到的并直接引用自谷歌:

2022 年 5 月 30 日,您可能无法访问使用安全性较低的登录技术的应用

所以底部代码可能会停止与 Gmail 一起工作。解决方案是 启用两步验证生成应用程序密码,然后您可以使用生成的密码使用 nodemailer 发送电子邮件。为此,您需要执行以下操作:

  1. 通过 https://myaccount.google.com/ 转到您的 Google 帐户
  2. 安全
  3. “登录谷歌” 部分选择 两步验证- 在这里你必须验证自己,在我的例子中是电话号码和确认码作为短信发送。之后,您将能够启用两步验证
  4. 返回 “登录 Google”部分中安全 性,选择 应用密码
  5. 选择应用程序 下拉菜单中选择 其他 (自定义名称) 并输入一个名称, 例如 nodemailer
  6. 将出现一个带有密码的模式对话框。获取该密码并在您的代码中使用它。

如果仍有问题,请尝试通过从您的 Google 帐户访问 https://accounts.google.com/DisplayUnlockCaptcha 来清除验证码。

示例用法

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'YOUR-USERNAME',
        pass: 'THE-GENERATED-APP-PASSWORD'
    }
});

send();

async function send() {
    const result = await transporter.sendMail({
        from: 'YOUR-USERNAME',
        to: 'RECEIVERS',
        subject: 'Hello World',
        text: 'Hello World'
    });

    console.log(JSON.stringify(result, null, 4));
}

旧答案(2022-05-02 之前)

我认为首先您需要 允许安全性较低的应用程序访问您 Google 帐户中的帐户 设置 - 默认情况下此设置是 关闭的,您只需将其 打开 即可。您还需要确保禁用该帐户的 2 因素身份验证。您可以 在此处 查看如何禁用它。

然后我使用以下脚本从 gmail 帐户发送电子邮件,也使用 yahoohotmail 帐户进行了测试。

 const nodemailer = require('nodemailer');

let transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
    secure: false,
    requireTLS: true,
    auth: {
        user: 'your.gmail.account@gmail.com',
        pass: 'your.password'
    }
});

let mailOptions = {
    from: 'your.gmail.account@gmail.com',
    to: 'receivers.email@domain.example',
    subject: 'Test',
    text: 'Hello World!'
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error.message);
    }
    console.log('success');
});

如果你把前面的代码放在 send-email.js 例如,打开终端并写:

 node send-email

您应该在控制台中看到 - 成功,如果电子邮件已成功发送或 nodemailer 返回错误消息

不要忘记先进行设置 - Allow less secure apps to access account

我希望这段代码对你有用。祝你好运!

原文由 codtex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题