我有一个html模板,我们用它来发送到新的网站注册。这是一个简单的html文件,我想加载到变量中,以便在使用nodemailer(例如[FIRST_NAME])发送之前我可以替换某些部分。我试图避免将大量的html粘贴到我的导出函数中。关于如何做到这一点的任何想法?
为了更清晰的想法,我需要知道的是如何实际做到这一点:
var first_name = 'Bob';
var html = loadfile('abc.html').replace('[FIRST_NAME]', first_name);
答案 0 :(得分: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);
}
要加载模板文件,请使用fs
模块。以下是在utf-8中编码文件时如何同步执行:
var fs = require('fs');
var template = fs.readFileSync('abc.html',{encoding:'utf-8'});
答案 1 :(得分:1)
这可能对某人有用,因为这个问题已经得到解答。
我正在和玉一起工作,这很难找到它,最后结果很简单:)
(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}
以下是使用电子邮件模板和节点制作者的示例。
js file:
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>