MeteorJS:从服务器端模板生成电子邮件

时间:2013-05-13 20:11:17

标签: node.js email meteor server-side templating

我需要从MeteorJS应用程序发送电子邮件,我想使用html模板生成它们,而不是通过“html-in-js”来生成它们。 我试图做的事:
1)使用Template.emailTemplate(data),但Template未在服务器端定义 2)将我的电子邮件模板保存为*.html目录下的<app>/server/email/templates文件,使用fs.readSync()获取其内容,然后使用meteor的内置handlebars包进行编译/渲染。 /> 这在开发环境中工作正常,但由于*.html目录下的server文件未捆绑,因此使用捆绑应用程序无法生产。此外,在捆绑过程中更改目录结构,模板的相对路径变为无效 3)你的提议? =)

3 个答案:

答案 0 :(得分:14)

目前,服务器端不支持模板。这个功能即将到来。与此同时,我创建了一个名为handlebars-server的软件包,它允许您在服务器上使用Handlebars。您可以使用包含大气的包或将项目目录复制到packages文件夹中。这是一个例子:

<强> 实施例

我-email.handlebars

Hello, {{name}}

<强> server.js

Email.send({
  html: Handlebars.templates['my-email']({ name: 'Chris' })
});

注意

手柄文件中没有模板。只需输入你的html和Handlebars表达式。该文件将被编译为函数并分配给Handlebars.templates对象上的属性。属性名称将是文件名减去车把扩展名。

<强> Github上

https://github.com/eventedmind/meteor-handlebars-server

答案 1 :(得分:4)

现在的另一个选择是使用服务器端的“私有”目录来读取资源,并使用它们来存储应用程序将使用的资源。

创建meteor项目,然后创建一个/ private目录。

将模板放在那里(如果你需要把手,你应该使用meteor-handlebars-server包)

使用以下方式阅读模板

Assets.getText(assetPath, [asyncCallback]);

显然你也可以在加载后对字符串进行模式匹配regex / replace。

示例:

var template = Assets.getText(assetPath);  // Synchronous
var username = 'John Doe';

template = template.replace('{{username}}', username);
Email.send({
  html: template
});

有关资产功能的更多信息:Meteor Assets

答案 2 :(得分:1)

Meteor 0.8。*,这是另一种解决方案。

https://gist.github.com/fpoirier1/534bf5db69ece2c83205