有没有办法将Meteor模板呈现为电子邮件的HTML正文?
例如,如果我想在该电子邮件中显示收集数据或生成动态链接。
答案 0 :(得分: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:"sender@domain.com",
to:"receiver@domain.com",
subject:"I want to share this with you !",
html:html
})
};
Meteor.call("sendShareEmail",options);
如评论中所述,您还可以决定在服务器上呈现电子邮件模板。目前尚不支持服务器端呈现,但您仍可以使用第三方模板包完成它。
编辑06/09/2014:更新为使用Meteor 0.9.1中最新的Blaze
API
答案 1 :(得分:4)
流星1.0。如果您想从服务器发送模板化电子邮件:
1.安装meteor包邮件:
meteor add email
meteor add blaze
2.在sendgrid创建一个电子邮件帐户,或者只是从您的电子邮件提供商处获取smtp参数。我没有用gmail测试。但是对于sendmail,它是直截了当的!
3.配置/server/smtp.js中的smtp设置:
Meteor.startup(
function (){
process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587';
}
);
4.您可以在server.js上使用以下内容:
myfunction(){
var html = Blaze.toHTML(Blaze.With(data, function() { return Template.my_template; }));
Email.send({
from: "My company name <noreply@mycompany.com>",
to: "john.doe@gmail.com",
subject: "Any subject...",
html: html
});
}
5.在/client/template/my_template.html中创建模板:
<template name="my_template">
Hello <b>{{name}}</b>
</template>
请注意,此处的{{name}}是指数据中定义的属性,定义为data = {name:“John”}。以下模板将输出为:“Hello John ”,所有html标签将保存到变量html中。
6.在您的服务器代码中的任何位置调用myfunction()。 Etvoilà!电子邮件将被发送。如果您没有收到该电子邮件,请确保它没有收到您的垃圾邮件。
此方法仍需要模板位于客户端。
答案 2 :(得分:2)
接受的答案使用客户端代码。如果您要构建电子邮件模板,客户端代码可能不安全。 有一个包(meteor-ssr)用于服务器端呈现模板,您可以使用它。
答案 3 :(得分:0)
正如@pahan所提到的,服务器端渲染包可能是你最好的选择。这是我使用的一个很好的教程:https://themeteorchef.com/tutorials/using-the-email-package