Express 使用node.js、node-mailer和nodemailer-mailgun传输发送模板电子邮件
我有以下基本的nodejs应用程序: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 : '
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