将多个 MJML 文件渲染为一个 MJML file/string

Render multiple MJML files into one MJML file/string

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

将它们包括在内

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

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

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

mjml2string 之类的任何帮助都将成为一个完美的解决方案。

我浏览了 mjml github 存储库以了解它是如何工作的,因为 MJML CLI 需要以某种方式组合 mj-include 元素中的文件,然后再将其转换为 html。我在 mjml-core/lib/includeExternal.

中找到了包含文件并生成 MJML 文档的代码

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

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

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

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

Hi ! You can use the mjml parser as we use it in mjml-core here https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/index.js#L128-L135 and convert back the json to xml (we have a internal helper for that too https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/helpers/jsonToXML.js )

Don't forget to require the full mjml package first to load register every standard components