2013-07-24 52 views

回答

29

是的,這是可能的,在這裏我提供了一個客戶端解決這個常見問題。

首先,你應該定義一個簡單的模板,將作爲您的電子郵件HTML正文:

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

然後你可以使用Email.send(見Email.send at 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'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); 

正如在評論中提到,你也可以決定來渲染服務器上的電子郵件模板。服務器端渲染尚不支持,但您仍然可以使用第三方模板包來完成。

編輯2014年6月9日:更新爲使用最新的API Blaze如流星0.9.1流星1.0

+0

的問題是,模板僅適用於客戶端,所以這幾乎是唯一的,如果你願意將您的所有電子郵件模板由所有用戶可查看是非常有用的。 – Diskdrive

+1

你是對的,如果你想生成你的電子郵件模板服務器端(這是有道理的),你將不得不使用這個包,例如:https://github.com/EventedMind/meteor-handlebars-server – saimeunt

+1

是啊這就是我最終做的。工作得很好!但是,當它在Meteor當地支持的時候會很好。 – Diskdrive

4

。如果你想從你的服務器發送郵件模板:

1.安裝流星包郵:

meteor add email

meteor add blaze

2.創建一個電子郵件帳戶sendgrid或剛剛得到的SMTP您的電子郵件提供商的參數我沒有用gmail進行測試。但是對於sendmail,它是直截了當的!

3.Configure在/server/smtp.js SMTP設置:

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

);

4.You可以使用你的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.創建您的模板在/client/template/my_template.html:

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

注意{{ name}}在這裏引用數據中定義的屬性,定義爲data = {name:「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)。