我使用nodemailer
为注册用户发送电子邮件。功能如下:
const setAndSendMsg = (recipients, users, subject, template) => {
const htmlFile = checkTemplate(template)
const message = {
from: mailServer.mailerObj.auth.user,
bcc: recipients,
subject: subject,
// html: `<div><b>Hello</b></div>`,
html: htmlFile,
context: {
user: 'test'
}
}
transport.sendMail(message, function(err, data) {
if(err) {
console.log(err);
return err
} else {
console.log(data);
return data
}
})
}
checkTemplate
返回所需模板:
const checkTemplate = (template) => {
return fs.readFileSync(path.resolve(__dirname, `../email-templates/${template}.html`), 'utf-8').toString()
}
模板包含:
<div>
Dear {{user}},
<br/>
<div>
Welcome to our platform, please click on the link below to activate your account:
</div>
</div>
所有收件人都收到了这封电子邮件,如下所示:
尊敬的{{用户}}。。。
而不显示test
来代替{{user}}
我在stackoverflow上使用了这个问题的脚本,但它不起作用。
问题出在您的配置中,您将模板定义为静态html,因此没有变量在那里进行评估,如果您转到此处的node-mailer的模板文档,您会发现它不再受支持,而是将您发送到此处。我的建议是遵循官方文件,它们提供了很好的例子。
另一种方法是手动将模板渲染为静态html,并将其设置为mailer,如果你不想安装另一个包,但email-templates
会为你这样做:(
希望这能有所帮助。
干杯:(