При использовании email-template-v2 nodejs динамическое содержимое не отображается - PullRequest
0 голосов
/ 25 июня 2018

Я использую email-template-v2 в nodejs, когда я отправляю динамические данные в шаблон, он не отображает динамическое содержимое, его единственная переменная отображения

код здесь

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 голосов
/ 25 июня 2018

Вы определенно можете попробовать этот эффективный подход для замены любого числа переменных в вашем локальном объекте JSON:

  1. Используйте этот формат в шаблоне для переменных, которые вы хотите заменить:

    Привет, $ {userName} в вашем случае, например.

  2. Получить шаблон (template.html в вашем случае) из любого места, где он хранится (в моем случае я получаю его из базы данных), и временно сохранить его в переменной, скажем, emailTemplate.

  3. Затем передайте шаблон (emailTemplate) и json со всеми переменными, которые вы хотите заменить (локальные), чтобы изменить функцию шаблона:

    letifiedTemplate = this.modifyTemplate (emailTemplate, localals);

  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. Теперь шаблон будет заменен вашими значениями в переменнойifiedTemplate.

0 голосов
/ 25 июня 2018

я нашел

Я использовал <% %> вместо {}

и его работу

Я использую это

<%= userName%>;
...