Meteorテンプレートを電子メールのHTML本文としてレンダリングする方法はありますか?Meteor電子メールの動的HTMLテンプレートの使用
たとえば、コレクションデータを表示したり、その電子メール内にダイナミックリンクを生成する場合などです。
Meteorテンプレートを電子メールのHTML本文としてレンダリングする方法はありますか?Meteor電子メールの動的HTMLテンプレートの使用
たとえば、コレクションデータを表示したり、その電子メール内にダイナミックリンクを生成する場合などです。
はい、これが可能です。ここでは、この共通の問題に対するクライアント側の解決策を示します。あなたがEmail.send at docs.meteor.comを参照してください(Email.sendを使用することができます次に、あなたは、このような電子メールを追加するなど、いくつかの適切な設定をする必要があります
<template name="shareEmailContent">
<p>{{message}}</p>
<a href="{{url}}">{{title}}</a>
</template>
:
まず、あなたの電子メールのhtml体として機能する単純なテンプレートを定義する必要がありますスマートパッケージと設定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'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);
コメントで述べたように、あなたはまた、サーバ上の電子メールテンプレートをレンダリングすることを決定することができます。サーバー側のレンダリングはまだサポートされていませんが、サードパーティのテンプレートパッケージを使用しても実行できます。
EDIT 2014年6月9日:流星1.0
流星0.9.1の最新Blaze
APIを使用するように更新。
1.Install流星パッケージメール:
meteor add email
meteor add blaze
2.Createメールアカウントまたは単に取得するSMTPあなたのサーバーからテンプレートメールを送信する場合あなたの電子メールプロバイダのパラメータ。私はGmailでテストしなかった。しかし、sendmailの場合、それは大変でした! /server/smtp.jsにおけるSMTP設定3.Configure
:
Meteor.startup(
function(){
process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587';
}
)。
4.Youがあなたのserver.jsで次のように使用することができます。/client/template/my_template.htmlで
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テンプレート:
<template name="my_template">
Hello <b>{{name}}</b>
</template>
お知らせ{{そのname}}は、data = {name: "John"}として定義されたdataで定義されたプロパティを参照します。次のテンプレートは "Hello John"と出力され、すべてのhtmlタグは変数htmlに保存されます。
6.サーバーコードのどこにでもmyfunction()を呼び出します。 Etvoilà!電子メールが送信されます。電子メールを受信しなかった場合は、その電子メールが迷惑メールに含まれていないことを確認してください。
この方法では依然としてクライアント側にテンプレートが必要です。
'Template'はサーバー上で定義されていませんか? – chug2k
サーバ上で 'Template is not defined'エラーも発生しています。 –
あなたはまだSSRパッケージをインストールしようとしましたか? https://github.com/meteorhacks/meteor-ssr – rodrigocprates
受け入れられた回答はクライアント側のコードを使用します。電子メールテンプレートを作成する場合は、クライアント側のコードが安全でない可能性があります。 サーバー側のレンダリングテンプレート用のパッケージ(meteor-ssr)があります。
@ pahanが述べたように、サーバー側のレンダリングパッケージが最善の策かもしれません。私が使った良いチュートリアルです:https://themeteorchef.com/tutorials/using-the-email-package
問題は、テンプレートはクライアント側でのみ機能するということです。すべてのユーザーがすべての電子メールテンプレートを表示できるようにしたい場合には、これは非常に便利です。 – Diskdrive
メールテンプレートをサーバーサイドで生成したい場合は、このパッケージを使用する必要があります。https://github.com/EventedMind/meteor-handlebars-server – saimeunt
yeahそれが私がやったことです。うまくいった!しかし、ええ、メテオでネイティブにサポートされている場合、ええ、良いでしょう。 – Diskdrive