19

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

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

4

4 回答 4

29

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

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

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

然后您可以使用 Email.send(请参阅docs.meteor.com 上的 Email.send,您需要一些适当的配置,例如添加电子邮件 Smart Package 和设置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:更新为使用BlazeMeteor 0.9.1 的最新 API

于 2013-07-24T23:44:31.650 回答
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 中定义的属性,定义为 data = {name: "John"}。以下模板将输出为:“Hello John ”,所有的 html 标签都将保存到变量 html 中。

6.在服务器代码中的任何位置调用 myfunction()。瞧!电子邮件将被发送。如果您没有收到电子邮件,请确保它没有进入您的垃圾邮件。

此方法仍然需要模板在客户端。

于 2014-11-15T23:07:44.703 回答
2

接受的答案使用客户端代码。如果您正在寻找构建电子邮件模板,客户端代码可能不安全。有一个用于服务器端渲染模板的包(meteor-ssr),您可以使用它。

于 2014-11-20T10:01:55.830 回答
0

正如@pahan 提到的,服务器端渲染包可能是你最好的选择。这是我使用的一个很好的教程:https ://themeteorchef.com/tutorials/using-the-email-package

于 2017-01-09T20:26:33.760 回答