Strapi 自定义电子邮件模板

Strapi custom email template

我使用 nodemailer 提交电子邮件,运行ning 从我的本地主机。我在以下目录 /api/email/services/Email.js

中手动创建了电子邮件服务
const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    host: 'example.com',
    port: 587,
    secure: false,
    auth: {
        user: 'user',
        pass: 'password',
    },
});

module.exports = {
    send: (from, to, subject, html) => {
        const options = {
            from,
            to,
            subject,
            html
        };
        return transporter.sendMail(options);
    },
};

这样我就可以像strapi.services.email.send(from, email, subject, html);

一样使用它了

通常,我在代码行 const html = '<p>Email testing</p>' 中编写我的 html 模板,以便在电子邮件服务中传递。但我不想对来自不同控制器的每封电子邮件提交都执行此操作。

因此,我在 /config/email-templates/custom-email.html 中创建了一个 html 模板,并尝试将其命名为 const html = path.join(__dirname + '/../../../config/email-templates/custom-email.html');

当我运行时,邮件可以成功发送,但无法呈现html。它没有呈现 html,而是将 custom-email.html 的完整路径显示为电子邮件。这种方法可以在strapi中实现吗?

您需要传递实际内容,而不是传递文件路径。在第一种情况下 const html = '<p>Email testing</p>' ,您实际上传递的是内容,但在第二种情况下,您传递的是文件路径。

修改后的发送方法如下所示:

send: (from, to, subject, htmlpath) => {

  const readHTMLFile = (path, callback)=> {
    fs.readFile(path, {encoding: "utf-8"}, function (err, html) {
        if (err) 
            return callback(err);
        else 
            return callback(null, html);
    });
  } 

  readHTMLFile(htmlpath, function(err, html) {
      const options = {
        from,
        to,
        subject,
        html
    };
    return transporter.sendMail(options);

  }); }