2016-12-29 8 views
1

В настоящее время я пытаюсь заполнить html-данные в потоке файлов, чтобы отправить его по электронной почте с помощью smtpTransport. Я пытался использовать ejs, но почти каждый пример, который я вижу, использует ejs.render для отображения содержимого, пока я пытаюсь отправить его в виде строки. Я хочу сделать это вручную против использования чего-то вроде шимпанзе, но я пока не нашел ничего полезного. Для контекста я пытаюсь создать электронную почту квитанции, когда пользователь что-то покупает и заполняет таблицу элементами. Вот код, который я пытался использовать с EJS но получить «TypeError: 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/как к отправке-ан-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 
})