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

我有一个html模板,我们用来发送到新的网站注册。 这是一个简单的html文件,我想加载到一个variables,以便我可以在发送使用nodemailer(例如[FIRST_NAME])之前replace某些部分。 我试图避免不得不将大块html粘贴到我的exports函数中。 任何想法,我怎么能做到这一点?

为了一个更清晰的想法,我需要知道的是如何实际做到这一点:

var first_name = 'Bob'; var html = loadfile('abc.html').replace('[FIRST_NAME]', first_name); 

下面是一个如何使用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); } 

加载模板文件只是我们的fs模块。 以utf-8编码文件时,如何同步执行:

 var fs = require('fs'); var template = fs.readFileSync('abc.html',{encoding:'utf-8'}); 

也许这对别人有用,因为这个问题已经得到解答。

我正在与玉,这是相当具有挑战性的搞清楚,最后竟然是非常简单的:)

(PS:这个代码没有优化,只是一个例子)

Js与nodemailer的部分:

 var nodemailer = require('nodemailer') var jade = require('jade'); var config = { // config for sending emails like username, password, ... } var emailFrom = 'this@email.com'; var emailTo = 'this@email.com'; var templateDir = 'path/to/templates/'; var transporter = nodemailer.createTransport(config); var username = 'thisUsername' // rendering html template (same way can be done for subject, text) var html = jade.renderFile(templateDir+'/html.jade', {username: 'testUsername'}); //build options var options = { from: emailFrom, to: emailTo, subject: 'subject', html: html, text:'text' }; transporter.sendMail(options, function(error, info) { if(error) { console.log('Message not sent'); console.log(info); return false; } else{ console.log('Message sent: ' + info.response); console.log(info); return true; }; }); 

html.jade

 p test email html jade p | Username: | !{username} 

这里是使用email-templates和nodemailer的例子。

js文件:

 var path = require('path'); var EmailTemplate = require('email-templates').EmailTemplate; var transporter = nodemailer.createTransport(config); var templateDir = path.join(__dirname, '/yourPath/emailTemplates', 'subdir'); var template = new EmailTemplate(templateDir) var username = 'testUsername'; var transport = nodemailer.createTransport(config) template.render(locals, function (err, results) { if (err) { return console.error(err) } // replace values in html template console.log('template render') console.log(err); // default is results.html in this case // read template and replace desired values var res1 = results.html.toString(); var str = res1.replace('__username__', username); console.log(str); console.log('end template render') transport.sendMail({ from: emailFrom, to: emailTo, subject: 'subject', html: str, text: results.text }, function (err, responseStatus) { if (err) { return console.error(err) } console.log(responseStatus) }) }) 

中将Html.HTML

 test email html username: <div> __username__ </div>