【问题标题】:MeteorJS: Generating emails from templates server-sideMeteorJS:从模板服务器端生成电子邮件
【发布时间】:2013-05-13 20:11:16
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    目前,服务器端不支持模板。该功能即将到来。同时,我创建了一个名为 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

    【讨论】:

    • 谢谢!这正是我所需要的!
    • 这与 HTML 无关吗?也就是说,我也可以将它用于纯文本模板吗?谢谢!
    【解决方案2】:

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

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

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

    阅读您的模板:

    Assets.getText(assetPath, [asyncCallback]);
    

    显然,您也可以在字符串加载后对其进行模式匹配正则表达式/替换。

    示例:

    var template = Assets.getText(assetPath);  // Synchronous
    var username = 'John Doe';
    
    template = template.replace('{{username}}', username);
    Email.send({
      html: template
    });
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-08
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        • 2022-10-25
        • 1970-01-01
        相关资源
        最近更新 更多