2016-05-21 14 views
1

Я использую модуль nodemailer с моим узлом nodejs/express.js.Nodemailer с ошибкой Gmail: 454 4.7.0 Не удается аутентифицироваться из-за временных системных проблем

Я использую gmail как перевозчик.

Похоже, что каждые 20 успешных писем, отправленных, я получаю эту ошибку:

454 4.7.0 не может проверить подлинность из-за временной проблемы системы

Я тестируя систему счета, поэтому я Регулярно отправляя электронное письмо на тот же адрес электронной почты для тестирования.

Я не пользуюсь приложениями Google, и у меня установлена ​​защита Gmail для работы с приложениями с низкой степенью защиты.

Счета-фактуры важны, и если я не могу гарантировать, что все счета-фактуры будут отправлены моим клиентам, это будет плохо.

Это нормально?

app.get('/thankyou', function(req,res) { 

    var transporter = nodemailer.createTransport({ 
    service: 'Gmail', 
     auth: { 
     user: '[email protected]', 
     pass: 'password here' 
     } 
    }); 

    res.render('thankyou_email', function(err,html) { 

    var mailOptions = { 
     from: 'John Doe <[email protected]>', 
     to: '[email protected]', 
     subject: 'Your order was received', 
     html: html 
    }; 

    transporter.sendMail(mailOptions, function(error, info) { 
     if(error) { 
     console.log('error1: ' + error); 
     transporter.sendMail(mailOptions, function(error, info) { 
      if(error) { 
      console.log('error2: ' + error); 
      } else { 
      console.log('cool bro everything works2'); 
      console.log(info); 
      } 
     }); 
     } else { 
     console.log('cool bro everything works'); 
     console.log(info); 
     } 
    }); 

    res.render('thankyou_page'); 
}); 

Как вы можете видеть, если у меня есть ошибка, я пытаюсь отправить электронную почту еще раз, но до сих пор я получаю ту же ошибку.

Также обратите внимание, что я использую res.render() дважды. Я думал, что это странно, но все равно работает. Первый res.render(), который я использую, чтобы сгенерировать html для электронной почты, а последний res.render() должен отобразить html в ответе клиенту. Я часто получал сообщение об отправке заголовков дважды, но я больше этого не вижу. Тем не менее, он все еще работал.

Чья это вина? Меня? Nodemailer? Gmail? Если я должен был зарегистрироваться для приложений Google, у меня все еще будет эта проблема?

+0

Какую версию nodemailer и узла вы используете? Я использую узел 4.4.2 с последним nodemailer без каких-либо проблем. –

+0

@gunjan Я использую v4.1.2 с node.js и последней версией nodemailer –

+0

Вы когда-нибудь выясняли эту проблему? Чтение некоторых потоков в Интернете, похоже, это внутренняя проблема Google. – theGreenCabbage

ответ

0

я наткнулся Nodemailer документации, и это было указано в Using OAuth2, что если маркер генератор XOAuth2 используется в качестве значения для auth.xoauth2 при настройке объекта транспортеров, то вам не нужно, чтобы установить значение для user или pass в OAuth2 является используется для аутентификации.

XOAuth2 generator generates required accessToken itself if it is missing or expired. If authentication fails, a new token is requested and the authentication is retried once. If it still fails, an error is returned.

Образец кода приведен в документации. Хотя, я лично не пытался его использовать, надеюсь, это сработает с вами. :)