我收到一个错误“ {错误:无效的登录名:535-5.7.8用户名和密码不被接受。”当我尝试从Node JS使用模块nodemailer发送邮件时

时间:2018-07-06 21:23:36

标签: node.js email login smtp

我是Node js的新手,我尝试将示例消息发送到其他电子邮件,当我从linux在终端中运行文件时,出现此错误:

root@me:/home/memee/Desktop/test/NodeJS/mail# nano example.js
root@me:/home/memee/Desktop/test/NodeJS/mail# node example.js
{ 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 77-v6sm41437784pga.40 - gsmtp
    at SMTPConnection._formatError (/home/memee/Desktop/test/NodeJS/mail/node_modules/nodemailer/lib/smtp-connection/index.js:606:19)
    at SMTPConnection._actionAUTHComplete (/home/memee/Desktop/test/NodeJS/mail/node_modules/nodemailer/lib/smtp-connection/index.js:1335:34)
    at SMTPConnection._responseActions.push.str (/home/memee/Desktop/test/NodeJS/mail/node_modules/nodemailer/lib/smtp-connection/index.js:366:26)
    at SMTPConnection._processResponse (/home/memee/Desktop/test/NodeJS/mail/node_modules/nodemailer/lib/smtp-connection/index.js:762:20)
    at SMTPConnection._onData (/home/memee/Desktop/test/NodeJS/mail/node_modules/nodemailer/lib/smtp-connection/index.js:558:14)
    at TLSSocket._socket.on.chunk (/home/memee/Desktop/test/NodeJS/mail/node_modules/nodemailer/lib/smtp-connection/index.js:510:47)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
  code: 'EAUTH',
  response: '535-5.7.8 Username and Password not accepted. Learn more at\n535 5.7.8  https://support.google.com/mail/?p=BadCredentials 77-v6sm41437784pga.40 - gsmtp',
  responseCode: 535,
  command: 'AUTH PLAIN' }

我知道我的错误是登录名,但是我的密码和电子邮件是正确的。

我的代码:

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'example@gmail.com',
    pass: 'here I put my password'
  }
});

var mailOptions = {
  from: 'from@gmail.com',
  to: 'to@gmail.com',
  subject: 'Sending Email using Node.js',
  text: 'That was easy!'
};

transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log(error);
  } else {
    console.log('Email sent: ' + info.response);
  }
});

我的node和npm版本:

root@me:~# node --version
v8.11.3
root@me:~# npm --v
6.1.0
root@me:~# 

我使用了本教程:tutorial

8 个答案:

答案 0 :(得分:5)

我之前遇到过同样的问题,但是在从用户名中删除'@gmail.com' 后,对我来说效果很好。
错误'535-5.7.8 Username and Password not accepted'仅在以下情况下发生:

  1. 错误的凭据。
  2. 在用户名中添加@gmail.com,请避免使用它!
  3. 启用了双重身份验证。如果是,则将其禁用。
  4. https://myaccount.google.com/lesssecureapps(如果已关闭),请将其打开以启用lesssecureapps。

答案 1 :(得分:4)

https://www.google.com/settings/security/lesssecureapps上启用“允许安全性较低的应用程序”

答案 2 :(得分:1)

您的电子邮件和密码不匹配,请查看错误消息:response: '535-5.7.8 Username and Password not accepted.

查看代码的这一部分:

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'example@gmail.com', // here use your real email
    pass: 'here I put my password' // put your password correctly (not in this question please)
  }
});

如果使用您的用户名和密码登录,则可以发送电子邮件。

我使用相同的代码发送此电子邮件,但是具有我的凭据: I used the same code to send this email

答案 3 :(得分:1)

我最近遇到了这个问题,它与帐户上的Less secure apps设置有关。

选择了“允许用户管理对安全性较低的应用的访问权限”。

enter image description here

答案 4 :(得分:1)

从您的用户名中删除“ @ gmail.com”。

答案 5 :(得分:0)

这是完整的解决方案。干杯!!!

如果有人面临以下问题

(firebase functions) Error: Forbidden Your client does not have permission to get URL /

解决方案是:

  • 删除云功能
  • 更新Firebase CLI npm install -g firebase-tools
  • 重新部署您的功能

答案 6 :(得分:0)

步骤 1 但是,您需要允许来自您的 google 帐户的安全性较低的应用发送电子邮件。 Through this link。允许来自您的 Google 帐户的安全性较低的应用

阅读以下说明 Enable imap

在 IMAP 访问部分启用 IMAP 的短网址 GO TO URL

const nodemailer = require("nodemailer");
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 587,
secure: false, // true for 465, false for other ports
type:"oauth2",
auth: {
  user: "myusernmae@gmail.com", // generated ethereal user
  pass: "Mypassword", // generated ethereal password
}});

transporter.verify(async function(error, success) {
if (error) {
  console.log(error);
} else {
  let info = await transporter.sendMail({
      from: '"Fred Foo ?" <foo@example.com>', // sender address
      to: "manoj@gmail.com, baz@example.com", // list of receivers
      subject: "Hello ✔", // Subject line
      text: "Hello world?", // plain text body
      html: "<b>Hello world?</b>", // html body
  });
  console.log(info);
  console.log("Server is ready to take our messages");
}});

工作示例

答案 7 :(得分:0)

我尝试了这个并为我工作:

#1 创建谷歌应用密码 https://support.google.com/accounts/answer/185833

#2 使用:

host: "smtp.gmail.com",
port: 587,
auth: {
  user: "Your username here e.g:abc@gmail.com",
  pass: "Your password here"
}