Pass variable to html template in nodemailer

前端 未结 8 2199
礼貌的吻别
礼貌的吻别 2021-01-30 16:45

I want to send email with nodemailer using html template. In that template I need to inject some dynamically some variables and I really can\'t do that. My code:



        
8条回答
  •  礼貌的吻别
    2021-01-30 17:45

    What you can do is read the HTML file using fs module in node and then replace the elements that you want changed in the html string using 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: 'my@email.com',
            to : 'some@email.com',
            subject : 'test subject',
            html : htmlToSend
         };
        smtpTransport.sendMail(mailOptions, function (error, response) {
            if (error) {
                console.log(error);
                callback(error);
            }
        });
    });
    

提交回复
热议问题