Express 使用node.js、node-mailer和nodemailer-mailgun传输发送模板电子邮件

Express 使用node.js、node-mailer和nodemailer-mailgun传输发送模板电子邮件,express,handlebars.js,mailgun,nodemailer,transport,Express,Handlebars.js,Mailgun,Nodemailer,Transport,我有以下基本的nodejs应用程序: var nodemailer = require('nodemailer'); var hbs = require('nodemailer-express-handlebars'); var options = { viewEngine: { extname: '.hbs', layoutsDir: 'views/email/', defaultLayout : 'template', partialsDir : '

我有以下基本的nodejs应用程序:

var nodemailer = require('nodemailer');
var hbs = require('nodemailer-express-handlebars');
var options = {
 viewEngine: {
     extname: '.hbs',
     layoutsDir: 'views/email/',
     defaultLayout : 'template',
     partialsDir : 'views/partials/'
 },
 viewPath: 'views/email/',
 extName: '.hbs'
};

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

var auth = {
    auth: {
        api_key: ' mailgun api key ',
        domain: ' mailgun email domain '
    }
}

var mailer = nodemailer.createTransport(mg(auth));

mailer.use('compile', hbs(options));
mailer.sendMail({
 from: 'test@inventori.io',
 to: 'test@test.com',
 subject: 'Any Subject',
 template: 'email.body',
 context: {
      variable1 : 'value1',
      variable2 : 'value2'
 }
}, function (error, response) {
    // console.error(error);
    if (error) {
        throw error;
    };
 console.log('mail sent to ',response);
 mailer.close();
});
视图/电子邮件/template.hbs

{{>email/head}}
<body>
     {{>email/header}}
     {{{body}}}
     {{>email/footer}}
</body>
</html>
我想能够发送模板电子邮件使用邮枪

任何帮助都将不胜感激


谢谢。

模板
参数更改为
html


如果您查看,错误是正确的-没有
模板
参数。

对我来说,模板没有正确呈现,因为我在下面一个示例中使用了
extName
,而键实际上是
extName
(全部小写)。也许它改名为加班,我看的指南现在有些过时了

截至2020年5月30日的完整工作示例如下。

目录结构:

root/
   src/
      email-templates/
              layouts/
                     blank.hbs
              partials/
              hello.hbs
      services/
              email.service.ts
email.service.ts(尚未更新此文件以使用正确的类型。只是一个poc。)

导出异步函数sendTestEmail(){
试一试{
//从ethereal.email生成测试SMTP服务帐户
//仅当您没有用于测试的真实邮件帐户时才需要
const testAccount=await nodemailer.createTestAccount()
//使用默认SMTP传输创建可重用的传输对象
const transporter=nodemailer.createTransport({
主机:“smtp.ethereal.email”,
港口:587,
安全:false,//对于465为true,对于其他端口为false
认证:{
user:testAccount.user,//生成的ethereal用户
pass:testAccount.pass,//生成的以太密码
},
})
transporter.use('compile',hbs({
视图引擎:{
extname:'.hbs',//把手扩展
partialsDir:“src/电子邮件模板”,
layoutsDir:'src/电子邮件模板/布局',
defaultLayout:'空白',
},
视图路径:“src/电子邮件模板”,
extName:'.hbs'
}))
//使用定义的传输对象发送邮件
常量邮件选项={
发件人:'test@gmail.com“,//发件人地址
致:'test@gmail.com“,//接收者列表
主题:“你好✔', // 主题行
text:“Hello world?”,//纯文本正文
模板:“你好”,
背景:{
名字:“克莱姆”
}
}
const info=wait transporter.sendMail(邮件选项)
console.log('发送的消息:%s',info.messageId)
//已发送的消息:
//预览仅在通过Ethereal帐户发送时可用
console.log('预览URL:%s',nodeEmailer.getTestMessageUrl(信息))
//预览URL:https://ethereal.email/message/WaQKMgKddxQDoou...
}捕获(错误){
console.log(错误)
}
}

此处的链接无效。看起来NodeEmailr mailgun传输API已经更新,现在似乎接受了
模板
参数。也许你可以试一下。我有完全相同的代码,当我使用
文本
而不是
模板
时会发送电子邮件,但使用
模板
时,我在Mailgun上得到以下错误
“描述”:“未能呈现模板”
您救了我!老兄,我非常感谢你发这个帖子。viewEngine对象中的extName是它不适用于我的原因。
<h4>Header Content</h4>
<h4>Footer Content</h4>
Error: Sorry: template parameter is not supported yet. Check back soon!
    at IncomingMessage.<anonymous> (~/test/node_modules/nodemailer-mailgun-transport/node_modules/mailgun-js/lib/request.js:228:15)
at IncomingMessage.emit (events.js:129:20)
at _stream_readable.js:908:16
at process._tickCallback (node.js:355:11)  
http://excellencenodejsblog.com/express-nodemailer-sending-mails/
root/
   src/
      email-templates/
              layouts/
                     blank.hbs
              partials/
              hello.hbs
      services/
              email.service.ts