2015-04-08 6 views
1

Я пытаюсь отправить полностью сформированный и совместимый HTML электронную почту с помощью метеора, который должен включать в DOCTYPE и HTML-теги:Отправить полностью сформированный HTML электронной

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

Я последовал это решение: Using dynamic HTML templates in Meteor emails

Который работает по большей части, но Метеор не может справиться с доктайп и HTML, выбрасывая эту ошибку:

While building the application: 
email/client/templates/receipt.html:2: Unexpected Doctype 
...l1-transitional.dtd"> <html xmlns="http:/... 
^ 

я думаю Метеор хочет, чтобы обернуть свои собственные теги, но как я overri это?

ответ

1

Хотя динамические шаблоны являются одним из возможных решений, SSR (Server-Side-Rendering) действительно упрощает управление электронной почтой. У меня есть настройка моего приложения, так что заголовки шаблонов берутся из одного шаблона, тогда как содержимое тела электронной почты происходит от второго. Это делает все мои почтовые шаблоны очень просто и позволяет мне централизованно контролировать внешний вид и все письма из моего приложения:

В сервере/config.js определяет:

Accounts.getTemplate = function(templatePath){ 
    return Assets.getText('email.html')+Assets.getText(templatePath)+"</body></html>"; 
}; 

Где email.html - шаблон шаблона, который включает в себя такие вещи, как преамбула <!DOCTYPE html.... Обратите внимание, что я добавляю "</body></html>" после слияния шаблона шаблона с конкретным шаблоном, чтобы каждый конкретный шаблон не нуждался в закрытии документа. Это просто делает HTML в конкретном чистом шаблоне и шаблонах DRY. email.html и все мои конкретные шаблоны живут в подкаталоге /private.

Когда мне нужно отправить по электронной почте я использую SSR:

SSR.compileTemplate('myTemplateName',Accounts.getTemplate('myTemplateName.html')); 
var html = SSR.render("myTemplateName",{ key1: value1, key2: value2, ... }); 
Email.send({from: sender, to: recipient, subject: subject, html: html}); 
+0

Я должен был оставить мою DOCTYPE декларацию от SSR. render, так как это вызвало непредвиденную ошибку doctype. Я закончил тем, что добавил его в html var. –

+0

Я понимаю, что у меня также нет '

3

Метеор Blaze не нравится рендеринга HTML или DOCTYPE, но вы можете обмануть его, чтобы сделать открытия и закрытия тегов, чтобы обернуть шаблон:

var dataContext = { 
    htmlHead: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">', 
    htmlFoot: '</html>' 
} 

var html = Blaze.toHTMLWithData(Template.email, dataContext); 

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

И в шаблоне просто указать переменный с тройным скобками:

{{{htmlHead}}} 
... 
{{{htmlFoot}}} 

Это создает полностью сформированный выходной сигнал, готовый к отправке с Email.send

Кредитом на Meteor Hacks для соответствующего решения, которое вызвало эту идею.

Смежные вопросы