在Nodemailer中使用Jade邮件模板

3

我有一个使用Nodemailer创建的联系表格。现在,每当客户提交联系表格时,我希望发送一个Jade模板邮件。

我已经让它工作了,并且邮件模板已经被发送了,但是Jade文件的内容以某种方式呈现在邮件的“主题”标题中。所有内容都包含HTML标签。所以,出了些问题。

这是我的Nodemailer代码:

router.post('/contact/send', function(req, res) {

  var transporter = nodeMailer.createTransport({

  service : 'Gmail',
  auth : {
    user: process.env.GMAIL_USER,
    pass: process.env.GMAIL_PASS
  }

  });

  var mailOptions = {
    from: req.body.name + ' <' + req.body.email + '>',
    to: 'xxxxx@gmail.com',
    subject:'Website verzoek',
    text:'Er is een website verzoek binnengekomen van '+ req.body.name+' Email: '+req.body.email+'Soort website: '+req.body.website+'Message: '+req.body.message,
    html:'<p>Websiteverzoek van: </p><ul><li>Naam: '+req.body.name+' </li><li>Email: '+req.body.email+' </li><li>Soort website: '+req.body.website+' </li><li>Message: '+req.body.message+' </li></ul>'
  };

  transporter.sendMail(mailOptions, function (err, info) {
    if(err) {
      console.log(err);
      res.redirect('/#contact');
    } else {
      console.log('Message send');
      res.redirect('/#contact');
    }
  });

  var toAddress = req.body.email;

  var sendMail = function(toAddress, subject, content, next) {
    var mailTemplate = {
      from: 'xxxxxx@gmail.com',
      to: toAddress,
      subject: subject,
      html: content
    };
    transporter.sendMail(mailTemplate, next);
  };

  var template = process.cwd() + '/views/mails/mail.jade';

  fs.readFile(template, 'utf8', function(err, file) {
    if (err) {
      console.log('Error');
    } else {
      var compiledTmpl = jade.compile(file, {filename: template});
      var context = {title: 'Express'};
      var html = compiledTmpl(context);

      sendMail(toAddress, html, function(err, response) {
        if(err) {
          console.log('ERROR!');
        } else {
          console.log('Template send');
        }
      });
    }
  });

});
1个回答

0
问题是一个打字错误。你的 sendMail 函数将主题作为第二个参数。
var sendMail = function(toAddress, subject, content, next) {
var mailTemplate = {
  from: 'xxxxxx@gmail.com',
  to: toAddress,
  subject: subject,
  html: content
   };
   transporter.sendMail(mailTemplate, next);
};

你正在将编译后的HTML作为第二个参数传递给函数。因此,它将HTML作为标题。
sendMail(toAddress, html, function(err, response) {
    if(err) {
      console.log('ERROR!');
    } else {
      console.log('Template send');
    }
  });

祝福。


1
简单。将HTML内容作为第三个参数传递,并将主题作为第二个参数。别忘了将答案标记为已验证。 - Bharathvaj Ganesan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接