回答
是的,这是可能的,在这里我提供了一个客户端解决这个常见问题。
首先,你应该定义一个简单的模板,将作为您的电子邮件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