2013-07-24 11 views

Odpowiedz

29

Tak, jest to możliwe, tutaj dostarczam rozwiązanie tego powszechnego problemu po stronie klienta.

Najpierw należy zdefiniować prosty szablon, który będzie służył jako ciała html email:

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

Następnie można użyć Email.send (patrz Email.send at docs.meteor.com, trzeba jakąś właściwą konfigurację takich jak dodawanie e-mail Inteligentny pakiet i ustawienie MAIL_URL), aby wysłać wiadomość e-mail z wynikiem renderowania szablonu. Email.send działa tylko na serwerze, więc musisz zdefiniować metodę serwera, którą można wywołać z klienta.

po stronie serwera:

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

po stronie klienta:

var dataContext={ 
    message:"You must see this, it's 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); 

Jak wspomniano w komentarzach, można również zdecydować się na renderowanie szablony e-mail na serwerze. Renderowanie po stronie serwera nie jest jeszcze obsługiwane, ale nadal można to zrobić za pomocą zewnętrznego pakietu szablonów.

EDIT 09.06.2014: zaktualizowane do najnowszej Blaze API jako Meteor 0.9.1

+0

Problem polega na tym, że szablon działa tylko po stronie klienta, więc jest to przydatne tylko wtedy, gdy chcesz, aby wszystkie szablony wiadomości e-mail były widoczne dla wszystkich użytkowników. – Diskdrive

+1

Masz rację, jeśli chcesz wygenerować szablony wiadomości e-mail po stronie serwera (co ma sens), będziesz musiał użyć tego pakietu, na przykład: https://github.com/EventedMind/meteor-handlebars-server – saimeunt

+1

yeah Właśnie to zrobiłem. Działało dobrze! Ale tak, będzie dobrze, jeśli jest obsługiwany natywnie w Meteor. – Diskdrive

4

Meteor 1.0. Jeśli chcesz wysłać matrycy maile z serwera:

1.Install email pakiet meteor:

meteor add email

meteor add blaze

2.Create konto e-mail w sendgrid lub po prostu SMTP parametry od twojego dostawcy poczty e-mail. Nie testowałem w Gmailu. Ale z sendmailem było to proste!

3.Configure ustawienia SMTP w /server/smtp.js:

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

);

4.You można użyć następujących Twoich server.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.Create szablonie w /client/template/my_template.html:

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

Zauważ, że {{ nazwa}} odnoszą się tutaj do właściwości zdefiniowanych w danych, zdefiniowanych jako dane = {nazwa: "Jan"}. Następujący szablon wyświetli: "Hello John", a wszystkie znaczniki html zostaną zapisane w zmiennej html.

6. Wywołaj moją funkcję() w dowolnym miejscu kodu serwera. Gotowe! E-mail zostanie wysłany. Jeśli nie otrzymasz e-maila, upewnij się, że nie trafił do Twojego spamu.

Ta metoda nadal wymaga szablonu po stronie klienta.

+3

"Szablon" nie jest zdefiniowany na serwerze? – chug2k

+0

Otrzymujemy również komunikat "Szablon nie jest zdefiniowany" na serwerze. –

+0

Czy próbowaliście już zainstalować pakiet SSR? https://github.com/meteorhacks/meteor-ssr – rodrigocprates

2

Przyjęta odpowiedź używa kodu po stronie klienta. Jeśli szukasz szablonów wiadomości e-mail, kod po stronie klienta może być niebezpieczny. znajduje się pakiet (meteor-ssr) dla szablonów renderowania po stronie serwera, z których można korzystać.

Powiązane problemy