NodeJS和express如何在使用nodemailer发送电子邮件时使用模板发送变量



我使用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会为你这样做:(

希望这能有所帮助。

干杯:(

最新更新