【问题标题】:Nodemailer is not able send mail using gmailNodemailer 无法使用 gmail 发送邮件
【发布时间】:2015-11-03 07:54:37
【问题描述】:

我正在尝试通过 nodemailer 发送电子邮件,但无法发送电子邮件并显示以下错误。

{ [Error: Invalid login]
  code: 'EAUTH',
  response: '534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsTr\n534-5.7.14 2r0PE8hXz57GMK9aydA3GouUGQr1Pc2wBywEf6i09kKVOv9Qv5y9Csy_lL-PIgUO6ML8uA\n534-5.7.14 ZsEiEkpAU0N5aiQBZdI1urKo3XfCiiS2MhjiUZaBgpn88sFXR-sBeA5ydMc_Md1F5wDcbX\n534-5.7.14 7ynrcVC-h0H_-e_ptvGhA3ywiHOSoDZAxzrindvEMNkXmCilbo9J7ITdlXFKwQjITaIkei\n534-5.7.14 Tk8QMKEY22ldNjE78Lh2ekheLd5M> Please log in via your web browser and\n534-5.7.14 then try again.\n534-5.7.14  Learn more at\n534 5.7.14  https://support.google.com/mail/answer/78754 21sm9309692qgj.21 - gsmtp',
  responseCode: 534 }

我使用的是 nodemailer 文档中显示的确切代码。

这是我正在使用的服务器端代码。

var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
       user: 'username',
       pass: 'password'
    }
});

app.post('/sendfeedbackmail', function(req, res) {

    var mailOptions = {
        from: 'Feedback<username@gmail.com>', // sender address 
        to: 'user1@gmail.com', // receiver 
        subject: 'Subject', // Subject line 
        text: mailData, // plaintext body 
        html: mailData // html body 
    };

   // send mail with defined transport object 
   transporter.sendMail(mailOptions, function(error, info) {
       if (error) {
          console.log(error);
          res.send({success:false});
       }else{
           res.send({
              success: true
           })
       }
   });
})

这几天前工作正常,对于其他电子邮件客户端仍然工作正常,然后是 gmail,因此我认为这个问题可能与 gmail 帐户的任何安全设置有关。

【问题讨论】:

标签: node.js email nodemailer


【解决方案1】:

更新

检查http://masashi-k.blogspot.com.br/2013/06/sending-mail-with-gmail-using-xoauth2.html 以注册您的应用程序。


您将需要这样的东西来在 Gmail 上进行身份验证:

var xoauth2 = require('xoauth2');
var nodemailer = require('nodemailer');
var smtp = require('nodemailer-smtp-transport');

var generator = xoauth2.createXOAuth2Generator({
  user: '..',
  clientId: '...',
  clientSecret: '...',
  refreshToken: '...',
  accessToken: ''
});
generator.on('token', function(token){
  console.info('new token', token.accessToken);
  // maybe you want to store this token
});

var transporter_google = nodemailer.createTransport(smtp({
  name: '...',
  host: '...',
  port: 587,
  secure: false,
  ignoreTLS: false,
  tls: { rejectUnauthorized: true },
  debug: false,
  auth: { xoauth2: generator }
}));

https://github.com/andris9/nodemailer-smtp-transport#authentication

【讨论】:

    【解决方案2】:

    您可能需要在您的 gmail 帐户中输入“Allow Less Secure Apps”(一直在底部)。您可能还需要“Allow access to your Google account”。在此处查看有关使用 Gmail 的详细信息。

    我在 github 上找到的上述解决方案对我有用。这是link

    【讨论】:

      【解决方案3】:
      var transporter = nodemailer.createTransport({
          service: 'Gmail',
          auth: {
             user: 'username',
             pass: 'password'
          }
      });
      

      代替用户名=输入您的有效电子邮件ID和密码=您的密码

      再次向您的 Gmail 显示来自 Google 之类的提醒

      (Google 将继续阻止您正在使用的应用的登录尝试因为它存在已知的安全问题或已过期。您可以继续通过允许访问不太安全的应用来使用此应用,但这可能会使您的帐户容易受到攻击。 )

      您需要允许其他邮件程序的访问

      然后它会生成响应

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多