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

问题描述:

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

目前,服务器端不支持模板。该功能即将到来。同时,我创建了一个你可能会发现有用的叫做handlebars-server的包,它允许你在服务器上使用Handlebars。您可以在气氛中使用软件包,或将项目目录复制到软件包文件夹中。下面是一个例子:

实施例:

MY-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

+0

谢谢!这正是我需要的! – th0r 2013-05-15 07:12:03

+0

是HTML的不可知论?也就是说,我可以将它用于纯文本模板吗?谢谢! – hsribei 2014-08-29 15:59:29

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

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

Assets.getText(assetPath, [asyncCallback]); 

很明显,你也可以做模式匹配:

将您在那里的模板中的模板,(你应该使用流星车把-server软件包,而是如果你需要把手)

阅读正则表达式/加载后替换字符串。

例如:

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

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

有关资产功能的详细信息:Meteor Assets

流星0.8 *,这里是另一种解决方案。

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