【问题标题】:Strapi custom email templateStrapi 自定义电子邮件模板
【发布时间】:2021-03-04 10:45:09
【问题描述】:

我正在使用 nodemailer 提交电子邮件并从我的本地主机运行。我在以下目录中手动创建了电子邮件服务/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中实现吗?

【问题讨论】:

    标签: html-email strapi


    【解决方案1】:

    您需要传递实际内容,而不是传递文件的路径。在第一种情况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);
    
      }); }
    

    【讨论】:

    • 我明白了,谢谢!你介意我再问一个问题,如果我想将变量传递给那里的 html 吗?
    • 哦,nvm,我会发一个不同的帖子。再次感谢您!
    • 你可以使用handlebars库来做这个...一个例子,你可以将emaillink、firstName和year传递给你的电子邮件模板``const template = handlebars.compile(html);const replacements = {emailLink : emailLink,firstName: firstName,year: new Date().getFullYear()};const emailTemplate = template(replacements); ```
    • 然后您可以将 emailTemplate 传递给您的 send 方法中的options
    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2014-02-10
    • 2017-10-03
    相关资源
    最近更新 更多