我正在将一些旧版电子邮件模板转换为mjml
(使用mjml 4.2版)。我正在使用Azure Function(NodeJs)使用把手将内容动态添加到模板中,并将最终的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
模板转换为html
{1}}。
在运行handlebars
之前,我是否有办法将完整的mjml
(包括使用mj-include
包含的文件内容)渲染成字符串?
任何帮助,例如mjml2html
都会使它成为一个完美的解决方案。
答案 0 :(得分:1)
我浏览了mjml
github
存储库,以了解其工作方式,如MJML CLI
需要以某种方式组合mj-include
元素中的文件,然后再将其转换为{{1 }}。我找到了包含文件的代码,并在html
中生成了MJML
文档。
我要做的就是导入它并将其用作
mjml-core/lib/includeExternal
然后,我运行把手将动态内容注入模板,并最终运行let mjmlTemplate = mjmlInclude(mjmlBaseTemplate, {filePath: mjmlBaseTemplateFilePath})
以获取最终的html文件。这样做会将我的样式注入动态内容的mjml2html(mjmlTemplate)
到mj-style
标签中。
答案 1 :(得分:0)
我不认为答案是我的,但它是对上述内容的更新。我在 MJML 团队的 MJML Slack 上看到了这一点。适用于 MJML 4.10.1 的源代码。
<块引用>嗨! 您可以在这里使用 mjml 解析器,因为我们在 mjml-core 中使用它 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 包来加载注册每个标准组件