繁体   English   中英

在 firebase 云函数中为 nodemailer 创建自定义 email 模板?

[英]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 文件夹处于同一级别。

发邮件 Function

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM