在Nodemailer

时间:2018-02-02 09:54:26

标签: node.js express nodemailer

我有一个使用Nodemailer创建的联系表单。现在,我想要在客户提交联系表单时发送Jade tempate邮件。

我已经开始工作并且邮件模板已经发送,但不知何故,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 :(得分: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');
    }
  });

干杯。