在Meteor电子邮件中使用动态HTML模板

ejo*_*aud 19 meteor

有没有办法将Meteor模板渲染为电子邮件的HTML正文?

例如,如果我想在该电子邮件中显示收集数据或生成动态链接.

sai*_*unt 29

是的,这是可能的,在这里我为这个常见问题提供客户端解决方案.

首先,您应该定义一个简单的模板,作为您的电子邮件html正文:

<template name="shareEmailContent">
  <p>{{message}}</p>
  <a href="{{url}}">{{title}}</a>
</template>
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用Email.send(请参阅docs.meteor.com上的Email.send,您需要一些正确的配置,例如添加电子邮件智能包和设置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);
  }
});
Run Code Online (Sandbox Code Playgroud)

客户端 :

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);
Run Code Online (Sandbox Code Playgroud)

如评论中所述,您还可以决定在服务器上呈现电子邮件模板.尚不支持服务器端呈现,但您仍然可以使用第三方模板包完成它.

编辑06/09/2014:更新为使用BlazeMeteor 0.9.1中的最新API