【问题标题】:Nodemailer not working when deploying to Heroku部署到 Heroku 时 Nodemailer 不工作
【发布时间】:2020-11-28 05:23:12
【问题描述】:

我正在使用nodemailer 在我的服务器中使用express 发送电子邮件。一切都在本地主机上运行良好,但是当我在 Heroku 上部署它时,它不再工作了,看起来它不支持 Heroku 上的nodemailer(这是我研究过的)。这是我的代码,请你帮我处理一下。非常感谢,祝你有美好的一天

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

【问题讨论】:

    标签: node.js express heroku deployment nodemailer


    【解决方案1】:

    可能process.env.EMAILprocess.env.PASSWORD 未定义。您必须在 Heroku 中设置环境变量。方法如下:

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

    【讨论】:

    • 你试过用host: "smtp.gmail.com"替换service: "gmail"吗?
    • 哦,我还没有为它添加主机,但我为它设置了端口,我已经研究过,看起来它是 Heroku 上 nodemailer 的默认端口
    • 试试这个配置:host: 'smtp.gmail.com', port: 587, secure: false
    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2020-01-13
    • 2020-12-16
    相关资源
    最近更新 更多