7

我正在使用 nodemailer 使用以下nodemailer-express-handlebars插件发送电子邮件。我用这个 {dead blog post} 作为参考

代码正在编译welcome模板但未使用layout

我的代码如下:

var nodemailer = require('nodemailer');
var mg = require('nodemailer-mailgun-transport');
var hbs = require('nodemailer-express-handlebars');

var config = {auth: {api_key: "key-xxx",domain: "mydomain.com}}
var nodemailerTransport = nodemailer.createTransport(mg(config));

var options = {
    viewEngine: {
        extname: '.handlebars',
        layoutsDir: 'views/email/',
        defaultLayout : 'layout',
    },
    viewPath: 'views/email/'
}

nodemailerTransport.use('compile', hbs(options));

nodemailerTransport.sendMail({
        from: 'from@mydomain.com',
        to: 'to@gmail.com',
        subject: 'Welcome to the XXX',
        template: 'welcome'
    }, function (err, results) {
        if (err) console.log('Error: ' + err);
        else console.log('Response: ' + results);
});

layout.handlebars有以下代码

<html>
<body>
{{> _header }}
    {{{body}}}
{{> _footer }}
</body>
</html>
4

1 回答 1

2

您缺少一个partialsDir选项。

我已经使用以下选项进行了测试,并且效果很好:

 var options = {
   extName:'.hbs', /* or '.handlebars' */
   viewPath:__dirname+'/views/email/',
   layoutsDir:__dirname+'/view/email',
   defaultLayout:'template',
   partialsDir:__dirname+'/views/email/partials/'
 }

要使用我的目录结构:

  1. 脚本所在的文件夹:views
  2. 在其中放置一个名为email(此处存储“template.hbs”)的文件夹
  3. 在电子邮件文件夹中创建一个partials文件夹(这里作为示例存储“header.hbs”)
于 2018-05-23T18:25:49.430 回答