[英]Creating custom email template for nodemailer in firebase cloud functions?
任何人都可以权衡如何创建动态 email 模板以与 firebase 云功能一起使用吗? 基本上,我创建了一个 function,它将在点击/sendEmail
端点时被调用。 它在req
正文中保存数据,我正在检索该数据并使用 nodemailer 通过 email 发送它。
如果我想使用handlebars
来创建模板,我会收到路径错误。 错误是no such file or directory exists
。 我尝试了两个不同的路径,第一个在functions/src/email/template.html
下,第二个与 functions 文件夹处于同一级别。
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'example@gmail.com',
pass: 'dqsdsqdqsdsq'
}
});
const filePath = path.join(__dirname, 'functions/src/Email/template.html');
const source = fs.readFileSync(filePath, 'utf-8').toString();
const template = handlebars.compile(source);
const replacements = {
schoolName: schoolName,
className: className,
date: new Date(),
responsibiltyId: responsibiltyId,
memorialId: memorialId
};
const htmlToSend = template(replacements);
const mailOptions = {
from: 'ADMIN <example@gmail.com>', // Something like: Jane Doe <janedoe@gmail.com>
to: destination,
subject: `Session Codes for Class ${className} | ${schoolName} | ${new Date()}`, // email subject
html: htmlToSend
};
return transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return handleError(res, error);
}
return res.status(200).json({
timestamp: new Date(),
status: 200,
message: `Email has been sent successfuly to ${destination}`,
extra: ''
});
});
替换这行代码
const filePath = path.join(__dirname, 'functions/src/Email/template.html');
和
const filePath = path.join('', 'src/Email/template.html');
部署函数时,函数文件夹中的所有内容都会打包并发送到 Cloud Functions。 该文件夹之外的任何内容都不会发送,这意味着您的 template.html 文件夹在运行时不可用。 如果您希望部署的代码在运行时可以读取内容,那么在运行部署命令之前,它应该位于 functions 文件夹中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.