使用email-template-v2 nodejs动态内容不显示

时间:2018-06-25 10:22:35

标签: node.js express ejs nodemailer email-templates

当我将动态数据发送到模板时,我已经在nodejs中使用email-template-v2,它不显示动态内容,它是唯一的显示变量

代码在这里

var template = new EmailTemplate(templateDir)
var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: '***@***.com',
    pass: '*******'
  }
});
var locals = {
    userName: "XYZ" //dynamic data for bind into the template
};


template.render(locals, function (err, temp) {
    if (err) {
        console.log("error", err);

    } else {
        transporter.sendMail({
      from: '****',
      to: "*****@gmail.com",
      html:  temp.html,
      text:  temp.text,
      subject:  temp.subject,
    }, function (error, info) {
      if (error) {
        console.log(error);
      }
      console.log('Message sent: ' + info.response);

    })

  }

})  
  

temp.html文件代码

<html>

    <head>
    </head>
    <body>
        <div style="margin:0 auto;max-width:600px;">
            <p>Hi,{userName}</br>
        How are you It's testing mail
        </br></br>
        Thanks
        </div>
    </body>
</html>

电子邮件输出就像这样

Hi,{userName} How are you It's testing mail Thanks

我想要这个

Hi,XYZ How are you It's testing mail Thanks

2 个答案:

答案 0 :(得分:1)

对于您要替换的本地JSON对象中的任意数量的变量,您绝对可以尝试使用这种有效的方法:

  1. 在模板中将此格式用于要替换的变量:

    您好,例如$ {userName}。

  2. 从模板的存储位置(在我的情况下,我从数据库中获取模板)获取模板(在您的情况下为template.html),并将其临时存储在变量中,例如emailTemplate。

    < / li>
  3. 然后传递模板(emailTemplate)和带有所有要变量的json 替换(本地)修改ModifyTemplate函数:

    let ModifyTemplate = this.modifyTemplate(emailTemplate,locals);

  4. 以这种方式定义modifyTemplate函数:

    modifyTemplate: function (tpl, args) {
      var keys = Object.keys(args),
         fn = new Function(...keys,
            'return `' + tpl.replace(/`/g, '\\`') + '`');
      return fn(...keys.map(x => args[x]));
    }
    
  5. 您现在将使用ModifyedTemplate变量中的值替换模板。

答案 1 :(得分:0)

我找到了

我用<% %>代替了{}

及其工作

我用这个

<%= userName%>;