Есть ли способ отобразить шаблон Meteor в качестве тела HTML письма?
Например, если я хочу показать данные коллекции или создать динамические ссылки внутри этого письма.
Есть ли способ отобразить шаблон Meteor в качестве тела HTML письма?
Например, если я хочу показать данные коллекции или создать динамические ссылки внутри этого письма.
Да, это возможно, здесь я предлагаю решение этой общей проблемы на стороне клиента.
Сначала вы должны определить простой шаблон, который будет служить вашим тегом 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
Метеор 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() в любом месте вашего кода сервера. И вуаля! Электронная почта будет отправлена. Если вы не получили письмо, убедитесь, что оно не попало в ваш спам.
Этот метод по-прежнему требует, чтобы шаблон находился на стороне клиента.
принятый ответ использует код на стороне клиента. Если вы хотите создать почтовые шаблоны, клиентский код может быть небезопасным. есть пакет (meteor-ssr) для шаблонов рендеринга на стороне сервера, которые вы можете использовать.
Как сказал @pahan, пакет рендеринга на стороне сервера может быть вашим лучшим выбором. Вот хороший учебник, который я использовал: https://themeteorchef.com/tutorials/using-the-email-package