【问题标题】:How to use template engines to send text as email in nodejs如何使用模板引擎在 nodejs 中将文本作为电子邮件发送
【发布时间】:2016-06-05 06:14:28
【问题描述】:

MsSql - 2014

我最近开始在 nodeJs 上编程。

我在数据库表中有电子邮件模板。

例如:

   message1 : Hello {friendName},
                  Happy Birthday {friendName}.
                  Thank you,
                  {Name}

    message2 : Hello All,
                  The total expense as;
                    {ListOfExpense}
                  Thank you,
                  {Name}

对于消息 1——我在输入 obj 上有 UI 输入作为名称和friendName。 对于消息 2——我在 input.expense obj 上有支出列表的 UI 输入。

我可以从 DB 中读取,让我们说 var dbMessage = message 1 or message 2;

我想使用模板引擎根据模板更改 {} 值并存储在文本上,以便我可以在正文上设置。

我正在使用nodemailer发送邮件;

var mailOptions={
        to : req.query.to,
        subject : req.query.subject,
        text : ? // I want use text as email body.
    }

    smtpTransport.sendMail(mailOptions, function(error, response){
        if(error){
           res.end("error");
        }else{
           res.end("sent");
        }
    });

请帮忙。

【问题讨论】:

    标签: javascript node.js express template-engine


    【解决方案1】:

    嗯,你可以通过多种方式做到这一点。

    ES6 模板文字

    你只是在做字符串插值,所以你可以很容易地使用带有ES6 template literals..的函数。

    function myTemplate(env) {
        const template = `Hello ${env.friendName},
                      Happy Birthday ${env.friendName}.
                      Thank you,
                      ${env.Name}`;
        return template.replace(/\n/, '<br>');
    }
    
    var mailOptions={
            to : req.query.to,
            subject : req.query.subject,
            text : myTemplate({friendName: "foo", Name: "Bar"});
        };
    

    你可能想稍微修整一下,但这会让你开始。

    花式全功能模板引擎

    其他模板语言包括Pugjs(以前的 Jade)、Handlebars.js_.template。通常,这些更专业的第三方模板会编译为 JavaScript 函数,它们的调用方式与我们上面的函数相同。上述所有引擎都必须以自己的方式设置...

    const pug = require('pug');
    const myTemplate = pug.compileFile('myPugPath.pug');
    myTemplate({friendName: "foo", Name: "Bar"});
    

    另外,您发送的电子邮件与此问题无关。只需以某种方式编写一个 HTML 字符串(例如,使用 ES6 模板文字或 pug),然后使用正确设置的 mime 类型 (text/html) 发送电子邮件,并将正文设置为 html。

    从数据库加载模板

    如果您的数据库中有模板,那么您可以简单地使用pug.compile(resultFromDb.pugTemplate),而不是使用pug.compileFile。查看有关 pug 的文档以获取更多信息。

    【讨论】:

    • 感谢您的回答。我有一个问题,如果我使用 Pug。我没有文件 myPugPath.pug。我有 dbresult 消息。那么在这种情况下我该如何使用。
    • 我已经尝试过,但面临的问题是; pug.compile(resultFromDb.emailBody); makeError (E:\NewLearning\NewWork\MyTool\Template\node_modules\pug-error\ index.js:32:13) 出现意外文本 ", This" 它无法接受 Hello ,
    • Pug 不编译电子邮件正文,它编译 pug。您的模板必须看起来像哈巴狗。除非 resultFromDb.emailBody 是哈巴狗,否则你会遇到问题。
    • 是否可以从数据库加载字符串文字(或者说是外部文本文件?)
    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 2015-05-15
    • 2011-04-04
    • 2012-05-17
    • 1970-01-01
    • 2016-02-20
    • 2014-03-06
    相关资源
    最近更新 更多