Отправка электронной почты с помощью nodemailer застряла в Ubuntu 16.04 - PullRequest
0 голосов
/ 03 октября 2018

Поэтому мы используем пакетный нодейлер для отправки электронных писем с помощью API Node.js.Он отлично работает локально на Windows, используя smtp.gmail.com.Как только мы переместим API узла в Ubuntu 16.04 , отправка писем перестанет работать .В остальном API работает нормально.На нашей учетной записи Gmail мы включили:

  1. https://accounts.google.com/b/0/DisplayUnlockCaptcha и
  2. https://myaccount.google.com/lesssecureapps

Код:

var transporter = nodemailer.createTransport({ 
    //tried other combinations aswell
    service: 'gmail', 
    host: 'smtp.gmail.com', 
    //tried port 465 and secure:true
    port: 587, 
    secure: false, 
    auth: { 
        user: 'sender@gmail.com', 
        pass: 'password' 
    } 
});


var mailOptions = {
    from: 'sender@gmail.com',
    to: 'reciever@gmail.com',
    subject: 'Welcome',
    html: "Hello": 
};`

Мы пробовали других почтовых провайдеров, таких как outlook, zoho, yandex, ... Тайм-аут происходит каждый раз.Брандмауэр в Ubuntu отключен, также установка является новой.

РЕШЕНИЕ

Проблема была в поставщике услуг, где размещалась Ubuntu.

1 Ответ

0 голосов
/ 03 октября 2018

Это всего лишь предложение обойти проблему сети через API Google.

Вам необходимо сгенерировать OAUTH CLIENT ID через менеджера API в консоли Google, затем выберите «Веб-приложение»;Получив код авторизации, вы можете использовать следующий код:

<code><pre>
  var nodemailer = require("nodemailer");
  sails.log.debug("try to send mail");
  var smtpTransport = nodemailer.createTransport("SMTP", {
      service: "Gmail",
      auth: {
        XOAuth2: {
          user: "xxx@gmail.com", // Your gmail address.
          clientId: "YOUR_CLIENT_ID",
          clientSecret: "YOUR_CLIENT_SECRET",
          refreshToken: "REFRESH_TOKEN_YOU_JUST_FOUND"
        }
      }
    });

  var mailOptions = {
      from: "xxx@gmail.com", // sender address
      to: RECEIVER_EMAIL", // list of receivers
      subject: "A_SUBJECT", // Subject line
      // text: ", // plaintext body
      html: htmlBody // html body
    };
  // send mail
    smtpTransport.sendMail(mailOptions, function(error, info) {
      if (error) {
        sails.log.debug(error);
        return res.notOk({
          status: "error",
          msg: "Email sending failed"
        })
      } else {
        console.log("Message %s sent: %s", info.messageId, info.response);
        return res.ok({
          status: "ok",
          msg: "Email sent"
        })
      }
      smtpTransport.close();
    });
...