Nodemailer не работает при развертывании в Heroku

#node.js #express #heroku #deployment #nodemailer

#node.js #экспресс #heroku #развертывание #nodemailer

Вопрос:

Я использую nodemailer для отправки электронной почты на свой сервер с помощью express . На локальном хостинге все работало отлично, но когда я развертываю его на Heroku, он больше не работает, похоже, он не поддерживается nodemailer на Heroku (это то, что я исследовал). Это мой код, не могли бы вы помочь мне разобраться с этим. Большое вам спасибо и хорошего дня

This is sending single mail

     exports.send_mail = (req, res, next) => {
      var {subjectTo, mailList, content} = req.body;
      var {attachURL} = req;
    
      var transporter = nodemailer.createTransport({
        service: 'gmail',
        secure: false,
        port: 465,
        auth: {
          user: process.env.EMAIL,
          pass: process.env.PASSWORD,
        },
      });
    
      var mailOptions = {
        from: 'sale.shopeeholic@gmail.com',
        to: mailList,
        cc: mailList,
        subject: subjectTo,
        text: `${content} n Attached files: ${attachURL}`,
      };
    
      transporter.sendMail(mailOptions, (err, info) => {
        if (err) {
          console.log(err);
          return res.status(400).json({err});
        } else {
          return res.status(200).json({message: `Mail sent to ${mailList}`});
        }
      });
    };
 

This is sending merge mail/multiple mail

 exports.merge_mail = (req, res, next) => {
  console.log('merge mail begin');
  const mailOptionList = req.body;
  // {mails, mailContent, mailTitle}
  var counter = 0;

  var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
      user: process.env.EMAIL,
      pass: process.env.PASSWORD,
    },
  });

  for (var i = 0; i < mailOptionList.length; i  ) {
    var mailOptions = {
      from: 'sale.shopeeholic@gmail.com',
      to: mailOptionList[i].mails.join(','),
      cc: mailOptionList[i].mails.join(','),
      subject: mailOptionList[i].mailTitle,
      text: mailOptionList[i].mailContent,
    };

    transporter.sendMail(mailOptions, (err, info) => {
      if (err) {
        console.log(err);
        return res
          .status(400)
          .json({err, message: `trouble in sending mail at index ${i}`});
      } else {
        console.log(`mail sent to ${JSON.stringify(mailOptionList[i].mails)}`);
        counter  ;
      }
    });
    console.log(`mail sent to ${JSON.stringify(mailOptionList[i].mails)}`);
    counter  ;
    console.log(counter);
  }

  if (counter === mailOptionList.length) {
    return res.status(200).json({message: 'mail sent all'});
  }
 

Ответ №1:

Вероятно process.env.EMAIL , и process.env.PASSWORD не определены. Вы должны установить переменные env в Heroku. Вот как:

https://devcenter.heroku.com/articles/config-vars

Комментарии:

1. Вы пробовали заменить service: "gmail" на host: "smtp.gmail.com" ?

2. о, я еще не добавил для него хост, но я установил для него порт, я исследовал и, похоже, это порт по умолчанию для nodemailer на Heroku

3. Попробуйте эту конфигурацию: host: 'smtp.gmail.com' , port: 587 , secure: false