2016-09-14 18 views
9

Tôi muốn gửi email với nodemailer bằng mẫu html. Trong mẫu đó tôi cần phải tiêm một số động một số biến và tôi thực sự không thể làm điều đó. Mã của tôi:Chuyển biến sang mẫu html trong nodemailer

var nodemailer = require('nodemailer'); 
var smtpTransport = require('nodemailer-smtp-transport'); 

smtpTransport = nodemailer.createTransport(smtpTransport({ 
    host: mailConfig.host, 
    secure: mailConfig.secure, 
    port: mailConfig.port, 
    auth: { 
     user: mailConfig.auth.user, 
     pass: mailConfig.auth.pass 
    } 
})); 
var mailOptions = { 
    from: '[email protected]', 
    to : '[email protected]', 
    subject : 'test subject', 
    html : { path: 'app/public/pages/emailWithPDF.html' } 
}; 
smtpTransport.sendMail(mailOptions, function (error, response) { 
    if (error) { 
     console.log(error); 
     callback(error); 
    } 
}); 

Hãy nói rằng tôi muốn ở emailWithPDF.html một cái gì đó như thế này:

Hello {{username}}! 

Tôi đã tìm thấy một số ví dụ, nơi đã smth như thế này:

... 
html: '<p>Hello {{username}}</p>' 
... 

nhưng Tôi muốn nó trong tập tin html riêng biệt. Có thể không?

Trả lời

8

Những gì bạn có thể làm là đọc các tập tin HTML sử dụng fs mô-đun trong nút và sau đó thay thế các yếu tố mà bạn muốn thay đổi trong chuỗi html sử dụng handlebars

var nodemailer = require('nodemailer'); 
var smtpTransport = require('nodemailer-smtp-transport'); 
var handlebars = require('handlebars'); 
var fs = require('fs'); 

var readHTMLFile = function(path, callback) { 
    fs.readFile(path, {encoding: 'utf-8'}, function (err, html) { 
     if (err) { 
      throw err; 
      callback(err); 
     } 
     else { 
      callback(null, html); 
     } 
    }); 
}; 

smtpTransport = nodemailer.createTransport(smtpTransport({ 
    host: mailConfig.host, 
    secure: mailConfig.secure, 
    port: mailConfig.port, 
    auth: { 
     user: mailConfig.auth.user, 
     pass: mailConfig.auth.pass 
    } 
})); 

readHTMLFile(__dirname + 'app/public/pages/emailWithPDF.html', function(err, html) { 
    var template = handlebars.compile(html); 
    var replacements = { 
     username: "John Doe" 
    }; 
    var htmlToSend = template(replacements); 
    var mailOptions = { 
     from: '[email protected]', 
     to : '[email protected]', 
     subject : 'test subject', 
     html : htmlToSend 
    }; 
    smtpTransport.sendMail(mailOptions, function (error, response) { 
     if (error) { 
      console.log(error); 
      callback(error); 
     } 
    }); 
}); 
+0

Có cách nào khác giống với cách chúng ta thực hiện trong trường hợp tệp '.pug', chúng tôi chỉ chuyển đối tượng tới biến bản đồ –

2

Nếu bạn đang sử dụng Nodemailer 2.0.0 hoặc cao hơn, kiểm tra tài liệu này: https://nodemailer.com/2-0-0-beta/templating/ Ở đó, họ giải thích làm thế nào để tận dụng vẽ bên ngoài với các mẫu như thế:

// external renderer 
var EmailTemplate = require('email-templates').EmailTemplate; 
var send = transporter.templateSender(new EmailTemplate('template/directory')); 

Họ cũng đưa ra ví dụ này:

// create template based sender function 
// assumes text.{ext} and html.{ext} in template/directory 
var sendPwdReminder = transporter.templateSender(new EmailTemplate('template/directory'), { 
    from: '[email protected]', 
}); 

nơi bạn xem cách chuyển các biến.

Bạn sẽ cần mô-đun email-templates: https://github.com/crocodilejs/node-email-templates và công cụ tạo mẫu bạn chọn.

Cũng trong tài liệu hướng dẫn của email-templates bạn sẽ thấy làm thế nào để làm cho cấu trúc tập tin của bạn theo thứ tự mà các mẫu của bạn có thể được tìm thấy:

html {{ext}} (bắt buộc) - cho định dạng html của. email

văn bản. {{ext}} (tùy chọn) - cho định dạng văn bản theo kiểu email.

{{ext}} (tùy chọn) - kiểu dành cho đối tượng định dạng html.

{{ext}} (không bắt buộc) - cho chủ đề của email

Xem hỗ trợ động cơ mẫu cho phần mở rộng cơ thể mẫu (ví dụ .ejs, .jade, .nunjucks) để sử dụng cho các giá trị của {{ext }} ở trên.

Bạn có thể đặt trước bất kỳ tên tệp nào với bất kỳ thứ gì bạn muốn để giúp bạn xác định tệp dễ dàng hơn trong IDE của mình. Yêu cầu duy nhất là tên tệp chứa html., Văn bản., Kiểu. Và chủ đề. tương ứng.

+0

Có cách nào khác cho cùng như chúng tôi làm trong trường hợp tệp .pug, chúng tôi chỉ chuyển đối tượng tới biến bản đồ –