2013-07-24 13 views

答えて

29

はい、これが可能です。ここでは、この共通の問題に対するクライアント側の解決策を示します。あなたが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

問題は、テンプレートはクライアント側でのみ機能するということです。すべてのユーザーがすべての電子メールテンプレートを表示できるようにしたい場合には、これは非常に便利です。 – Diskdrive

+1

メールテンプレートをサーバーサイドで生成したい場合は、このパッケージを使用する必要があります。https://github.com/EventedMind/meteor-handlebars-server – saimeunt

+1

yeahそれが私がやったことです。うまくいった!しかし、ええ、メテオでネイティブにサポートされている場合、ええ、良いでしょう。 – Diskdrive

4

流星0.9.1の最新Blaze APIを使用するように更新。

1.Install流星パッケージメール:

meteor add email

sendgrid

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à!電子メールが送信されます。電子メールを受信しなかった場合は、その電子メールが迷惑メールに含まれていないことを確認してください。

この方法では依然としてクライアント側にテンプレートが必要です。

+3

'Template'はサーバー上で定義されていませんか? – chug2k

+0

サーバ上で 'Template is not defined'エラーも発生しています。 –

+0

あなたはまだSSRパッケージをインストールしようとしましたか? https://github.com/meteorhacks/meteor-ssr – rodrigocprates

2

受け入れられた回答はクライアント側のコードを使用します。電子メールテンプレートを作成する場合は、クライアント側のコードが安全でない可能性があります。 サーバー側のレンダリングテンプレート用のパッケージ(meteor-ssr)があります。

関連する問題