2016-12-29 38 views
1

我正在尝试在文件流中填充html数据,以便我可以使用smtpTransport将它发送到电子邮件中。我试图使用ejs,但几乎我看到的每个示例都使用ejs.render来显示内容,而我试图以字符串形式进一步发送它。我想手动执行此操作而不是使用邮件黑猩猩之类的东西,但我还没有发现任何有用的东西。对于上下文,我试图创建收据电子邮件,当用户购买的东西和项目填充表。下面是我一直在试图与EJS使用,但得到的代码“类型错误:this.templateText.replace是不是一个错误的功能”:如何动态填充节点中的html数据以便发布,不显示?

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 <[email protected]>", 
       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

这里是用玉又名哈巴狗一个例子http://stackoverflow.com/questions/ 21654051 /如何待送-AN-HTML的页面作为电子邮件功能于的NodeJS/21654249#21654249 – Ryan

回答

0

评论ejs.render使用data.replace更换varible车,小计,费用等

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 
})