如何在节点js应用程序中包含html电子邮件模板

Min*_*ire 7 node.js

我有一个html模板,我们用它来发送到新的网站注册.这是一个简单的html文件,我想加载到变量中,以便在使用nodemailer(例如[FIRST_NAME])发送之前我可以替换某些部分.我试图避免将大量的html粘贴到我的导出函数中.关于如何做到这一点的任何想法?

为了更清晰的想法,我需要知道的是如何实际执行此操作:

var first_name = 'Bob';  
var html = loadfile('abc.html').replace('[FIRST_NAME]', first_name);
Run Code Online (Sandbox Code Playgroud)

sou*_*eck 10

这是一个如何使用ejs执行此操作的示例,但您可以使用任何模板引擎:

var nodemailer = require("nodemailer");
var ejs = require('ejs');

var transport = nodemailer.createTransport("SMTP", {
        service: <your mail service>,
        auth: {
            user: <user>,
            pass: <password>
        }
});

function sendMail(cb) {
    var user = {firstName : 'John', lastName: 'Doe'};

    var subject = ejs.render('Hello <%= firstName %>', user);
    var text = ejs.render('Hello, <%= firstName %> <%= lastName %>!', user);


    var options = {
        from: <from>,
        replyTo: <replyto>,
        to: <to>,
        subject: subject,
        text: text
    };

    transport.sendMail(options, cb);

}
Run Code Online (Sandbox Code Playgroud)

要加载模板文件,请使用fs模块.以utf-8编码文件时,如何同步执行此操作:

var fs = require('fs');

var template = fs.readFileSync('abc.html',{encoding:'utf-8'});
Run Code Online (Sandbox Code Playgroud)

  • 给定上面的例子,我怎样才能让文本从我可以替换字符串的文件中加载......例如:“var text = (loadfile('abc.html').replace('[FIRST_NAME]' , first_name_variable)" (2认同)