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

uma*_*aja 17 node.js nodemailer

这是我的settingController:

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');
      } 
  }); 
Run Code Online (Sandbox Code Playgroud)

在邮差我得到了这样的错误:

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

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
Run Code Online (Sandbox Code Playgroud)

cod*_*tex 25

我认为,首先你需要允许不够安全的应用访问帐户,在您的谷歌帐户设置-默认情况下此设置为关闭,你只需把它.

然后我使用以下脚本从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.com',
    subject: 'Test',
    text: 'Hello World!'
};

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

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

node send-email
Run Code Online (Sandbox Code Playgroud)

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

不要忘记首先进行设置 - 允许安全性较低的应用访问帐户.

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

  • 绝对适合“更新 (2022-05-02)”部分,感谢您分享正确的方向和步骤! (3认同)
  • 仅供参考,如果您启用了 2F 身份验证,则禁用“不太安全的应用程序”功能。您需要生成应用密码。为此,请按照以下步骤操作:support.google.com/accounts/answer/185833 (2认同)
  • 此设置在 2022 年 5 月 30 日之后将不再可用 (2认同)

小智 10

如果您在自己的Google帐户中启用了双因素身份验证,则无法使用常规密码以编程方式访问Gmail.您需要生成特定于应用程序的密码,并使用该密码代替您的实际密码.

脚步:

  • 登录您的Google帐户
  • 转到我的帐户>登录和安全>应用密码
  • (再次登录确认是你)
  • 向下滚动到选择应用程序(在密码和登录方法框中),然后选择其他(自定义名称)
  • 为此应用程序密码命名,例如"nodemailer"
  • 选择生成
  • 复制生成的长密码并将其粘贴到Node.js脚本中,而不是实际的Gmail密码.(你不需要空格.)

您的脚本现在看起来像这样:

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'YOUR-GMAIL-USERNAME@gmail.com',
    pass: 'YOUR-GENERATED-APP-PASSWORD'
  }
});
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人.

  • 除此之外,我还必须启用验证码(下面的链接)“https://accounts.google.com/DisplayUnlockCaptcha”,然后它对我有用。 (3认同)

小智 10

2022 年 5 月,Google 删除了安全性较低的应用程序选项 ( https://myaccount.google.com/lesssecureapps )。

因为将第三方连接到 Google 存在风险。

因此,Gmail 提供了应用程序密码。您可以在应用程序(应用程序)中使用

  1. 转至 Google > 我的帐户 > 安全 > 两步验证(只需通过 OTP 或致电验证您的号码)
  2. 向下滚动到选择应用程序(在密码和登录方法框中),然后选择其他(自定义名称)。
  3. 为该应用程序的密码命名,例如“nodemailer”
  4. 复制生成密码并将其粘贴到您的 Node.js 脚本中,而不是您的实际 Gmail 密码。(您不需要空格。)

复制应用程序密码后,只需在https://www.smtper.net/上注册 smtp (勾选所有选项,不要留下任何要填写的字段。)然后单击“提交”(检查您的 Gmail帐户)。

节点邮件程序代码

const nodemailer = require("nodemailer");

const smtpTransport = require("nodemailer-smtp-transport");

var transporter = nodemailer.createTransport(
  smtpTransport({
    service: "gmail",
    host: "smtp.gmail.com",
    port: 587,
    secure: false,
    auth: {
      user: "your.gmail.account@gmail.com",
      pass: "app 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");
});
Run Code Online (Sandbox Code Playgroud)

为了更好地理解,请点击下面给出的两个链接。

  1. 官方 SMTP: https: //nodemailer.com/smtp/
  2. 设置免费的 Google Smtp 服务器:https://www.youtube.com/watch ?v=ql5Dex4m40w

  • 将“secure”添加到“false”允许我发送电子邮件,谢谢。 (2认同)

小智 8

https://myaccount.google.com/lesssecureapps如果关闭,请将其打开以启用 lesssecureapps。(我有同样的问题打开它解决我的问题)


tru*_*cng -1

您正在使用 gmail 服务,因此您的邮件必须在 gmail 中:

var transport = nodemailer.createTransport({
service:'gmail',
 auth: {
             user: "asdfqweerrccb@gmail.com",
             pass: "qwerr@wee"
        }
    });
var mailOptions = {
        from: "transactions@gmail.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');
    } 
}); 
Run Code Online (Sandbox Code Playgroud)