使用 Node.js 和 Mailgun 发送 HTML 时遇到问题

Trouble sending HTML using Node.js and Mailgun

我很难在电子邮件中发送 HTML。为了测试和避免错误,我使用 Mailgun's email templates.

我可以成功发送电子邮件,但是当我收到它们时,我看到 HTML 是纯文本。我不确定我在哪里犯了错误,因为我一直在关注文档。另外,我使用 mailgun-jsmailcomposer 来实现这个目标。

function sendEmailNotif(name) {

 var mail = mailcomposer({
   from: process.env.MAIL_FROM_ADDRESS,
   to: '********@*****.com', // My address, for testing purpose
   subject: ' ****** ' + name +' ***** !',
   text: '******* *****',
   html: 'htmlBody should appear here'
 });

 mail.build(function(mailBuildError, message) {

 var dataToSend = {
    to: '*******@****.com',
    message: fs.createReadStream(htmlBody)
 };

 mailgun.messages().sendMime(dataToSend, function (sendError, body) {
    if (sendError) {
        console.log(sendError);
        return;
    } else {
      console.log('Email sent ! ', + body);
    }
  });

});

另外,我这样声明 html :

var htmlBody = path.join(__dirname, './emailTemplate/alert.html');

其他信息:我在 'Cloud Code' 中使用 Parse Server 执行此操作。

这是我收到的电子邮件:

我不确定我做错了什么以及为什么电子邮件没有以 .. html 的形式发送。 提前致谢。

我想你想要这个:

function sendEmailNotif(name) {
  fs.readFile(path.join(__dirname, './emailTemplate/alert.html'), function (err, htmlBody) {
    var mail = mailcomposer({
      from: process.env.MAIL_FROM_ADDRESS,
      to: '********@*****.com', // My address, for testing purpose
      subject: ' ****** ' + name +' ***** !',
      text: '******* *****',
      html: htmlBody,
    });    
    mail.build(function (mailBuildError, message) {
      var dataToSend = {
        to: '*******@****.com',
        message: message.toString('ascii'),
      };

      mailgun.messages().sendMime(dataToSend, function (sendError, body) {
        if (sendError) {
          console.log(sendError);
          return;
        } else {
          console.log('Email sent ! ', + body);
        }
      });
    });
  });
}

说明:mail.build 向您的回调发送正确的 MIME 编码正文(在 message 参数中),因此您需要实际使用它。 (您只是使用从文件中读取的 HTML。)我所做的修复是:

  1. 从文件中读取 HTML 并在使用 mailcomposer 创建邮件时将其放入 html 字段。
  2. 实际使用从 mail.build 获得的值。

注意上面的代码我没有测试过,只是阅读了mailgun-js documentation。为任何 typos/mistakes!

道歉