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

7cwmlq89  于 2023-05-17  发布在  Node.js
关注(0)|答案(9)|浏览(163)

这是我的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');
      } 
  });

在postman中,我得到了这样的错误:
由于以下错误,无法发送电子邮件:

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
0dxa2lsx

0dxa2lsx1#

更新(2022-05-02)

正如评论中提到的,直接引用自Google:
2022年5月30日,您可能无法访问使用安全性较低的登录技术的应用程序
因此,底部代码可能会停止与Gmail。解决方法是开启两步验证生成应用密码,然后使用生成的密码使用 nodemailer 发送邮件,具体操作如下:
1.转到您的Google帐户https://myaccount.google.com/
1.进入安全
1.在 “登录到谷歌” 部分选择两步验证-在这里你必须验证自己,在我的情况下,它是与电话号码和确认码发送短信。之后,您将能够启用两步验证
1.返回到 “登录Google” 部分中的安全,选择应用密码
1.从 Select app 下拉菜单中选择**Other *(自定义名称)***并输入名称 ,例如nodemailer
1.将出现一个带有密码的模式对话框。获取该密码并在代码中使用它。
如果仍然存在问题,请尝试通过从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之前)

我认为首先你需要在你的谷歌帐户中设置Allow less secure apps to access account-默认情况下,这个设置是关闭,你只需打开它**。您还需要确保禁用帐户的2因素身份验证。您可以查看如何禁用它here
然后,我使用以下脚本从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

您应该在控制台-success中看到邮件是否发送成功或nodemailer返回的错误消息
别忘了先设置-Allow less secure apps to access account
我希望这段代码对你有用。祝你好运!

mccptt67

mccptt672#

如果您在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'
  }
});

我希望这对某人有帮助。

jpfvwuh4

jpfvwuh43#

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

a11xaf1n

a11xaf1n4#

2022年5月,谷歌删除了安全性较低的应用选项(https://myaccount.google.com/lesssecureapps)。
因为将第三方连接到谷歌是有风险的。
Gmail提供了应用程序密码。您可以在其中使用到应用程序(应用程序)
1.转到Google >我的帐户>安全性>两步验证(只需通过OTP或电话验证您的号码)
1.向下滚动到选择应用程序(在密码和登录方法框中),然后选择其他(自定义名称)。
1.为此应用程序的密码命名,例如:“nodemailer”
1.复制生成密码并将其粘贴到Node.js脚本中,而不是实际的Gmail密码。(你不需要空格。)
一旦你复制了应用程序的p/w,只需在https://www.smtper.net/上注册smtp(勾选所有选项,不要留下任何字段填写。)然后点击“提交”(检查你的Gmail帐户)。

nodemailer代码

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");
});

为了更好地理解,请遵循下面给出的两个链接。
1.官方SMTP:https://nodemailer.com/smtp/
1.安装免费的Google SMTP服务器:https://www.youtube.com/watch?v=ql5Dex4m40w

kcugc4gi

kcugc4gi5#

确保您使用的是正确的端口:port: 587目前
访问此链接以允许不太安全的应用程序访问:https://myaccount.google.com/lesssecureapps
在此链接上启用recaptcha:https://accounts.google.com/b/0/DisplayUnlockCaptcha
等待几分钟并尝试发送电子邮件。
或者使用sendgrid。它有一个免费版本。
如果您在收件箱中看不到电子邮件,请检查垃圾邮件文件夹。

2lpgd968

2lpgd9686#

我遇到了同样的问题,我是这样解决的:
1.后藤https://admin.google.com并使用用于设置企业帐户和创建用户的主帐户登录。请记住使用主电子邮件ID。

1.点击安全图标,你会被带到这个页面,你会看到不太安全的应用程序部分,点击它。

1.现在你会看到这个,允许用户或给予权限这里.

1.你还没有完成,不去下面的链接:https://myaccount.google.com/u/1/lesssecureapps

现在你会看到开关。启用它并尝试它肯定会工作。
Peace:)

6ju8rftf

6ju8rftf7#

您必须允许Less-Secure-Apps访问您的Google帐户中的帐户设置-默认情况下,此设置是关闭的,您可以简单地将其打开。Image example

ngynwnxp

ngynwnxp8#

有一些帐户设置是必要的,你通过它发送使用SMTP。
如果您在帐户上启用了两步验证,则需要在设备设置中使用应用程序特定的密码(在Gmail帐户中创建):使用特定于应用程序的密码登录
如果没有,请试试这个:在https://mail.google.com使用网络浏览器登录Gmail帐户,然后转到“设置”>“帐户和导入”>“其他Google帐户设置”。在“安全性”下,向下滚动并启用对安全性较低的应用程序的访问。启用SMTP、POP或IMAP访问需要此设置。
如果仍然存在问题,请尝试清除验证码:访问https://accounts.google.com/DisplayUnlockCaptcha并使用Gmail用户名和密码登录。如有必要(通常不需要),请输入扭曲图片中的字母,然后按“继续”。这将允许设备在10分钟内注册为已批准的连接。请注意,您必须使用您尝试添加到设备的帐户-如果浏览器已登录到另一个帐户,则必须先注销。此外,您必须在按下“继续”后的十分钟内触发设备进行连接。
Google支持团队的解释

ejk8hzay

ejk8hzay9#

您正在使用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');
    } 
});

相关问题