我们正在使用NestJS Mailer,它是nodemailer的包装器,并且(目前)使用EJS从我们的应用程序发送模板化的HTML电子邮件。
我希望在EJS模板文件中定义电子邮件主题,以及消息的其余部分,但似乎需要在消息对象中设置主题。
是否有任何方法,使用EJS或任何其他模板引擎(例如车把),在模板文件中设置主题,并有NestJS Mailer使用那一个?
类似以下语句的内容:
Subject: 'Hello, subject!'
<html>
...etc
</html>
我创建了一个解决方案,虽然我对它不完全满意,但它现在可以完成工作。
我仍然对替代解决方案感兴趣-特别是已经内置到nodemailer, NestJS Mailer或相关模板引擎中的任何东西。
我的解决方法是创建一个扩展到NestJS MailerEjsAdapter
,它将setSubject()
-函数添加到上下文对象。然后在模板中调用这个函数:
export class EjsAdapterExtension extends EjsAdapter {
public compile(mail: any, callback: any, mailerOptions: MailerOptions): void {
if (mail && mail.data && mail.data.context) {
mail.data.context.setSubject = (subject: string) => {
mail.data.subject = mail.data.subject || subject || mailerOptions.defaults.subject;
};
}
super.compile(mail, callback, mailerOptions);
}
}
<% setSubject('My template subject'); %>
<html>
...etc
</html>