3

我正在将一些旧电子邮件模板转换为mjml(使用 mjml 4.2 版)。我正在使用 Azure Function (NodeJs) 使用把手动态地将内容添加到模板并返回给我 final html email,效果很好。我已将模板的各个部分分成不同的文件(页眉、页脚、简介等),并使用mj-include.

目前这就是我正在做的事情。

  • 我首先阅读了主要的 mjml 文件。

    var mjmlData = fs.readFileSync(filePath, 'utf8');

  • 然后运行mjml2html以获取呈现的模板

    var htmlTemplateObject = mjml2html(mjmlData, {filePath: filePath});

  • 然后我运行把手来注入动态内容

    handlebars.compile(htmlTemplateObject.html)(req.body.data)

在使用把手动态注入数据之前,我必须先运行 mjml2html,否则把手不会在我包含的文件中选择内容mj-include。因此,例如,如果我p在动态内容中说一个标签,则样式不会被内联,因为我已经在运行之前将mjml模板转换为.htmlhandlebars

有没有办法让我在运行之前将完整的mjml(包含文件中的内容mj-include)渲染成一个字符串mjml2html

任何非常感谢的帮助mjml2string都会使这成为一个完美的解决方案。

4

2 回答 2

1

我浏览了mjml github存储库以了解它是如何工作的,MJML CLI需要在将文件mj-include转换为html. 我找到了包含文件的代码并MJMLmjml-core/lib/includeExternal.

我所要做的就是导入它并将其用作

let mjmlTemplate = mjmlInclude(mjmlBaseTemplate, {filePath: mjmlBaseTemplateFilePath})

然后我运行把手将动态内容注入到模板中,最后运行mjml2html(mjmlTemplate)得到最终的 html 文件。这样做将我的样式注入mj-stylehtml动态内容中的标签中。

于 2018-10-26T09:11:35.663 回答
1

我不认为答案是我的,但它可以作为对上述内容的更新。我在 MJML 团队的 MJML Slack 上看到了这一点。适用于 MJML 4.10.1 的源代码。

你好 !您可以使用我们在 mjml-core 中使用的 mjml 解析器 https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/index.js#L128-L135 并转换回json 到 xml(我们也有一个内部助手 https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/helpers/jsonToXML.js

不要忘记首先要求完整的 mjml 包来加载注册每个标准组件

于 2021-07-05T21:17:02.010 回答