如何在nodejs中使用模板引擎将文本作为电子邮件发送

5

MsSql - 2014

我最近开始学习使用Node.js编程。

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

例如:

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

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

对于信息1--我有UI输入作为名称和输入对象上的friendName。

对于信息2--我有List of expense的UI输入在input.expense obj上。

我能够从数据库中读取,比如说在var dbMessage = message 1或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");
        }
    });

Kindly help.

1个回答

5

好的,您可以用多种方式实现此操作。

ES6 模板字面量

您只需要进行字符串插值,因此可以非常轻松地使用带有 ES6 模板字面量 的函数。

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.compileFile,而只需使用{{link1:pug.compile(resultFromDb.pugTemplate)}}即可。有关更多信息,请查看pug文档。

谢谢您的回答。我有一个问题,如果我使用Pug。我没有文件myPugPath.pug。我有dbresult消息。那么在这种情况下我该怎么使用它呢? - Sawan Kumar
我已经尝试了,但是遇到了问题; pug.compile(resultFromDb.emailBody); 意外的文本", This" at makeError (E:\NewLearning\NewWork\MyTool\Template\node_modules\pug-error
index.js:32:13)它无法接受Hello,
- Sawan Kumar
Pug 不会编译电子邮件正文,它会编译 pug。你的模板必须像 pug 一样。除非 resultFromDb.emailBody 是 pug,否则你会遇到问题。 - Evan Carroll
能否从数据库(或外部文本文件)加载字符串字面量? - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接