回答
是的,這是可能的,在這裏我提供了一個客戶端解決這個常見問題。
首先,你應該定義一個簡單的模板,將作爲您的電子郵件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
。如果你想從你的服務器發送郵件模板:
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à!該電子郵件將被髮送。如果您沒有收到電子郵件,請確保它沒有進入垃圾郵件。
此方法仍然需要模板在客戶端。
'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
- 1. 在mandrill模板中的動態HTML電子郵件
- 2. HTML電子郵件模板
- 3. 創建動態電子郵件模板
- 4. HTML電子郵件模板居中
- 5. 使用RazorEngine電子郵件模板在身體中生成html
- 6. .NET C#電子郵件:使用電子郵件模板
- 7. MVC HTML電子郵件模板
- 8. HTML電子郵件模板作爲NSString
- 9. Razor將電子郵件模板作爲電子郵件模板
- 10. 在Struts 2中動態生成電子郵件模板
- 11. PHP HTML電子郵件,使用HTML模板
- 12. 動態電子郵件模板到不同的電子郵件客戶端 - PHP
- 13. 使用html模板發送電子郵件在python
- 14. 使用電子郵件模板在SuiteScript 1.0中發送電子郵件?
- 15. 使用XSLT的電子郵件模板
- 16. 對電子郵件使用lodash ._模板
- 17. Salesforce的 - 電子郵件模板使用
- 18. 在Outlook中使用HTML電子郵件模板,而沒有Outlook搞亂HTML?
- 19. RazorEngine模板電子郵件
- 20. AddThis電子郵件模板
- 21. Jade電子郵件模板
- 22. 電子郵件模板ColdFusion9
- 23. ob_start電子郵件模板?
- 24. 電子郵件模板
- 25. Moodle電子郵件模板
- 26. Webpack電子郵件模板
- 27. Rails3 - 電子郵件模板
- 28. 電子郵件模板
- 29. Magento電子郵件模板
- 30. django電子郵件模板
的問題是,模板僅適用於客戶端,所以這幾乎是唯一的,如果你願意將您的所有電子郵件模板由所有用戶可查看是非常有用的。 – Diskdrive
你是對的,如果你想生成你的電子郵件模板服務器端(這是有道理的),你將不得不使用這個包,例如:https://github.com/EventedMind/meteor-handlebars-server – saimeunt
是啊這就是我最終做的。工作得很好!但是,當它在Meteor當地支持的時候會很好。 – Diskdrive