Подтвердить что ты не робот

Использование динамических HTML-шаблонов в электронной почте Meteor

Есть ли способ отобразить шаблон Meteor в качестве тела HTML письма?

Например, если я хочу показать данные коллекции или создать динамические ссылки внутри этого письма.

4b9b3361

Ответ 1

Да, это возможно, здесь я предлагаю решение этой общей проблемы на стороне клиента.

Сначала вы должны определить простой шаблон, который будет служить вашим тегом html электронной почты:

<template name="shareEmailContent">
  <p>{{message}}</p>
  <a href="{{url}}">{{title}}</a>
</template>

Затем вы можете использовать Email.send(см. Email.send на docs.meteor.com, вам понадобится некоторая правильная настройка, такая как добавление смарт-пакета электронной почты и настройка MAIL_URL), чтобы отправить результат обработки шаблона. Email.send работает только на сервере, поэтому вы должны определить метод сервера, вызываемый клиентом.

Серверная сторона:

Meteor.methods({
  sendShareEmail:function(options){
    // you should probably validate options using check before actually
    // sending email
    check(options,{
      from:String,
      // etc...
    });
    Email.send(options);
  }
});

Клиентская сторона:

var dataContext={
  message:"You must see this, it amazing !",
  url:"http://myapp.com/content/amazingstuff",
  title:"Amazing stuff, click me !"
};
var html=Blaze.toHTMLWithData(Template.shareEmailContent,dataContext);
var options={
  from:"[email protected]",
  to:"[email protected]",
  subject:"I want to share this with you !",
  html:html
  })
};
Meteor.call("sendShareEmail",options);

Как уже упоминалось в комментариях, вы также можете принять решение о создании шаблонов электронной почты на сервере. Поддержка на стороне сервера еще не поддерживается, но вы все равно можете выполнить ее, используя сторонний пакет шаблонов.

EDIT 06/09/2014: обновлен, чтобы использовать новейший API Blaze от Meteor 0.9.1

Ответ 2

Метеор 1.0. Если вы хотите отправить шаблонные письма с вашего сервера:

1.Установите электронную почту пакета метеоров:

meteor add email

meteor add blaze

2. Создайте учетную запись электронной почты в sendgrid или просто получите параметры smtp у своего поставщика электронной почты. Я не тестировал gmail. Но с sendmail это было несложно!

3. Конфигурируйте параметры smtp в /server/smtp.js:

Meteor.startup(
function (){
    process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587';
}

);

4.Вы можете использовать следующее на своем сервере. js:

myfunction(){
   var html = Blaze.toHTML(Blaze.With(data, function() { return Template.my_template; }));
   Email.send({
            from: "My company name <[email protected]>",
            to: "[email protected]",
            subject: "Any subject...",
            html: html
        });
   }

5.Создайте свой шаблон в /client/template/my _template.html:

<template name="my_template">
    Hello <b>{{name}}</b>
</template>

Обратите внимание, что {{name}} здесь ссылаются на свойства, определенные в данных, определяемые как data = {name: "John" }. Следующий шаблон будет выводиться как: "Hello John", и все теги html будут сохранены в переменной html.

6.Call myfunction() в любом месте вашего кода сервера. И вуаля! Электронная почта будет отправлена. Если вы не получили письмо, убедитесь, что оно не попало в ваш спам.

Этот метод по-прежнему требует, чтобы шаблон находился на стороне клиента.

Ответ 3

принятый ответ использует код на стороне клиента. Если вы хотите создать почтовые шаблоны, клиентский код может быть небезопасным. есть пакет (meteor-ssr) для шаблонов рендеринга на стороне сервера, которые вы можете использовать.

Ответ 4

Как сказал @pahan, пакет рендеринга на стороне сервера может быть вашим лучшим выбором. Вот хороший учебник, который я использовал: https://themeteorchef.com/tutorials/using-the-email-package