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上
另一种选择,现在是使用服务器端的“私人”目录中读取出的资源,并利用它们来存储您的应用程序将使用资源。
创建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
谢谢!这正是我需要的! – th0r 2013-05-15 07:12:03
是HTML的不可知论?也就是说,我可以将它用于纯文本模板吗?谢谢! – hsribei 2014-08-29 15:59:29