我目前正在尝试在文件流中填充html数据,以便我可以使用smtpTransport通过电子邮件发送它。我尝试过使用ejs,但几乎我见过的每个例子都是使用ejs.render显示内容,而我却试图将其作为字符串进一步发送。我想手动做这个,而不是使用像邮件黑猩猩这样的东西,但我还没找到任何有用的东西。对于上下文,我试图在用户购买东西并使用项目填充表格时创建收据电子邮件。这是我尝试与ejs一起使用的代码,但得到了一个" TypeError:this.templateText.replace不是函数错误":
router.post('/placeorder', function(req, res) {
var orderInfo = req.body;
var delivery = orderInfo.deliveryDate.split("00:00:00")[0] + " from " + orderInfo.deliveryTime;
//Email buyer receipt
fs.readFile('buyer_receipt.html',function (err, data){
if (err) {
console.log(err);
} else {
var renderedHtml = ejs.render(data, {cart: orderInfo.cart, subtotal: orderInfo.subtotal, fee: orderInfo.fee, total: orderInfo.total, deliveryInfo: delivery});
smtpTransport.sendMail({
from: "Test <myemail@gmail.com>",
to: orderInfo.user.user.ownerName + " <" + orderInfo.user.user.email +">",
subject: "Thanks for your order!",
html: renderedHtml
}, function(error, response){
if(error) {
console.log(error);
} else {
console.log("Mail sent: " + response.message);
}
});
}
});
我也愿意在ejs之外使用不同的平台。
答案 0 :(得分:0)
评论ejs.render使用data.replace替换各种购物车,小计,费用等。
答案 1 :(得分:0)
使用EmailTemplates将CrocodileJS与ejs解决此问题。
答案 2 :(得分:0)
发生错误TypeError: this.templateText.replace is not a function error
是因为fs.readFile
在回调data
中返回原始缓冲区。如果您将编码作为第二个参数传递给fs.readFile
,那么回调data
将是一个字符串,ejs
将不会再抱怨:
fs.readFile('buyer_receipt.html', 'utf-8', function (err, data) {
// 'utf-8' encoding specified so now data is a string instead of a raw buffer
})