在使用 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
80116 次浏览

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

更新(2022-05-02)

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

在2022年5月30日,你可能会失去访问那些使用不太安全的应用程序的权限 登录技术登录技术

因此底层代码可能会停止使用 Gmail。解决方案是对 启用2步验证生成应用程序密码,然后你可以使用生成的密码发送电子邮件使用 没有邮递员。要做到这一点,你需要做到以下几点:

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

如果仍然有问题,尝试清除验证码访问 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之前)

我认为,首先你需要在你的谷歌帐户设置 允许不太安全的应用程序访问帐户-默认情况下,这个设置是 关掉,你只需把它 开始。此外,您还需要确保禁用帐户的2因素身份验证。你可以检查如何禁用它 这里

然后,我使用以下脚本发送电子邮件从一个 Gmail帐户,也测试与 雅虎Hotmail帐户。

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是否返回了错误消息

不要忘记首先做设置-允许不太安全的应用程序访问帐户

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

如果你在你的 Google 账户上启用了双因素认证,你就不能使用你的常规密码以编程方式访问 Gmail。您需要生成一个应用程序特定的密码,并使用该密码代替您的实际密码。

步骤:

  • 登录你的谷歌账户
  • 到我的帐户 > 登入及保安 > 应用程式密码
  • (再次登录确认是你)
  • 向下滚动到“选择应用程序”(在“密码和登录方法”框中) 并选择其他(自定义名称)
  • 给这个应用程序的密码命名,例如“ nodemailer”
  • 选择生成
  • 复制长时间生成的密码并将其粘贴到 Node.js 脚本中,而不是实际的 Gmail 密码。(你不需要空格。)

你的剧本现在看起来是这样的:

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

我希望这能帮到别人。

确保您正在使用正确的端口: 即 port: 587目前为止。

访问此链接,以允许不太安全的应用程序访问: https://myaccount.google.com/lesssecureapps

在这个链接启用重演: https://accounts.google.com/b/0/DisplayUnlockCaptcha

等待几分钟,尝试发送一封电子邮件。

或者使用 Sendgrid。它有一个免费的版本。

如果您没有看到您的收件箱中的电子邮件,检查垃圾邮件文件夹。

我遇到了同样的问题,我解决了它如下:

  1. GOTO https://admin.google.com和登录与主要帐户,你用来建立业务帐户和创建用户。请记住使用主电子邮件 ID。

Main Screen after logging in

  1. 点击安全图标,你会被带到这个页面,在那里你会看到较不安全的应用程序部分,点击它。 enter image description here

  2. 现在你会看到这一点,允许用户或给予许可在这里。“一个 href = “ https://i.stack.imgur.com/qMf4D.png”rel = “ nofollow noReferrer”> “ img src = “ https://i.stack.imgur.com/qMf4D.png”alt = “在这里输入图像描述”/>

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

enter image description here

现在你会看到开关。启用它,并尝试它一定会工作。

和平:)

要使用 SMTP 通过它发送,有一些帐户设置是必需的。

如果你在账户上启用了两步验证,你需要在设备设置中使用应用程序特定的密码(在 Gmail 账户中创建) : 使用应用程序特定的密码登录

如果没有,请尝试这样做: 使用网页浏览器在 https://mail.google.com登录到 Gmail 帐户,然后进入设置 > 帐户和导入 > 其他谷歌帐户设置。在“安全”下,向下滚动并启用不太安全的应用程序的访问。此设置是启用 SMTP、 POP 或 IMAP 访问所必需的。

如果仍然存在问题,请尝试清除 Captcha: 访问 https://accounts.google.com/DisplayUnlockCaptcha并使用 Gmail 用户名和密码登录。如果需要(通常不需要) ,输入扭曲图片中的字母,然后按“继续”。这将允许设备在10分钟内注册为已批准的连接。请注意,您必须使用您试图添加到设备的帐户-如果浏览器已经登录到另一个帐户,您必须首先注销。此外,必须在按下“继续”后10分钟内触发设备建立连接。

来自 Google 支持团队的解释

你必须允许较不安全的应用程序访问帐户设置在你的谷歌帐户-默认情况下,这个设置是关闭的,你可以简单地打开它。 图片例子

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

May 2022, google has remove this below the link of option ( https://myaccount.google.com/lesssecureapps if it is OFF, turn it ON to enable lesssecureapps. )


because it's risky to connect third party in google..


so, gmail has provide app password. where you can use  into app(application)


> go to google > my account > security > 2-two steps verification(just verified your number by otp or call) >
> Scroll down to Select App (in the Password & sign-in method box) and choose Other (custom name)
> Give this app password a name, e.g. "nodemailer"
> Copy Generate password and paste it into your Node.js script instead of your actual Gmail password. (You don't need the spaces.)


once you copied app p/w, just regsiter for smtp on https://www.smtper.net/ (tick all option and don't left any field to fill up )
then click on submit (check gmail acc)








nodemailer code


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




for more better understanding follow this 2links are given in below
offical smtp : https://nodemailer.com/smtp/
setup free google smtp server : https://www.youtube.com/watch?v=ql5Dex4m40w