Nodemailer сообщает, что сообщение отправлено и принято, но электронное письмо не было отправлено // Процесс никогда не завершается - PullRequest
0 голосов
/ 28 июня 2019

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

1) Хотя в ответе указано, что мое письмо с кодом состояния 250 приняло сообщение, я не могу найти его в папке «Входящие» или в спаме.

2) Несмотря на то, что в моем коде есть оператор return, функция никогда не завершается, то есть у меня есть постоянная «загрузка» в моем почтальоне, и в моем терминале она никогда не возвращает меня на следующую строку.

Мой файл nodemailer.js (с использованием тестовых учетных записей рекомендуется для nodemailer):

"use strict";
const nodemailer = require("nodemailer");

exports.mailer = async function() {
  try {
    let testAccount = await nodemailer.createTestAccount();
    console.log(testAccount);
    // create reusable transporter object using the default SMTP transport
    let transporter = nodemailer.createTransport({
      host: "smtp.ethereal.email",
      port: 587,
      secure: false, // true for 465, false for other ports
      auth: {
        user: testAccount.user, // generated ethereal user
        pass: testAccount.pass // generated ethereal password
      }
    });

    // send mail with defined transport object
    let info = await transporter.sendMail({
      from: '"Mike" <foo@gmail.com>', // sender address
      to: "myemail@gmail.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("Message sent: %s", info.messageId);
    // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>

    // Preview only available when sending through an Ethereal account
    console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
    // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
    return;
  }

  catch(err) {
    console.log('error!: ', err);
  }

}

Маршрут, который вызывает эту функцию:

exports.reset = async function(req, res, next) {
  try {
    const user = await db.User.findOne({
      email: req.body.email
    });

    if (user) {
      mailer();
    }
  }
  catch(err) {
    console.log(err);
    return next({
      status: 400,
      message: 'No user was found with this email address'
    });
  }
};

Сгенерированный тестовый аккаунт:

{ user: 'ffjxqtgqtjcyvnro@ethereal.email',
  pass: 'DySZuSDckx2Vb3zzRx',
  smtp: { host: 'smtp.ethereal.email', port: 587, secure: false },
  imap: { host: 'imap.ethereal.email', port: 993, secure: true },
  pop3: { host: 'pop3.ethereal.email', port: 995, secure: true },
  web: 'https://ethereal.email' }

Ответ:

{ accepted: [ 'myemail@gmail.com' ],
  rejected: [],
  envelopeTime: 673,
  messageTime: 1157,
  messageSize: 562,
  response:
   '250 Accepted [STATUS=new MSGID=XRVjPdwpOWUvgMwHXRVjQcwUe2Vy-jP3AAAAAXNi-JPSS9eOph-N0f1.Anw]',
  envelope: { from: 'myemail@gmail.com', to: [ 'myemail@gmail.com' ] },
  messageId: '<ed8b9a0c-e04c-5a5b-62f9-c2ebea5b5f59@gmail.com>' }

1 Ответ

0 голосов
/ 28 июня 2019

это, вероятно, отправка, но я вижу, что вы используете адрес Gmail. Убедитесь, что вы настроили свою учетную запись Gmail, чтобы иметь возможность отправлять эти: https://codeburst.io/sending-an-email-using-nodemailer-gmail-7cfa0712a799

«Перед отправкой электронной почты с помощью gmail вы должны разрешить незащищенным приложениям доступ к gmail, вы можете сделать это, перейдя в настройки gmail»

Вы можете узнать больше об этом здесь: https://myaccount.google.com/lesssecureapps?pli=1

если вы используете AWS, я бы рекомендовал использовать SES. это довольно просто, если вы уже настроены, плюс вам не нужно беспокоиться о том, что ваши письма будут рассылаться спамом или что-то еще с вашим подтвержденным адресом электронной почты AWS :)

...