Nodemailer is not able send mail using gmail

我们两清 提交于 2019-12-19 19:51:30

问题


I am trying to send email through nodemailer but is not able to send email and showing following error.

{ [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 }

I am using exact code as shown in nodemailer documentation.

this is server side code which i am using.

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

This was working fine few days ago and still working fine for other email client then gmail hence i think the issue may be related to any security setting of gmail account.


回答1:


UPDATE

Check http://masashi-k.blogspot.com.br/2013/06/sending-mail-with-gmail-using-xoauth2.html to register your application.


You will need something like this to authenticate on 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 }
}));

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




回答2:


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

Instead of username = enter your valid email id and password = your password

again an alert shows to your Gmail from google like

(Google will continue to block sign-in attempts from the app you're using because it has known security problems or is out of date. You can continue to use this app by allowing access to less secure apps, but this may leave your account vulnerable. )

you need to allow the access from other mailer

then it generates the response



来源:https://stackoverflow.com/questions/33493963/nodemailer-is-not-able-send-mail-using-gmail

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!