Oli*_*ver 3 email-templates mailjet mjml
I\xe2\x80\x99m 正在开发一个用 MJML 编写的 Mailjet 电子邮件模板,该模板使用通过提供的数组值Vars来生成发件人希望从邮件收件人接收的项目列表。数组中的所有值都是纯文本值。
传递给 API 请求的数据如下所示:
\n\n{\n "FromEmail":"sender@email.com",\n "FromName":"Chris Crumble",\n "Subject":"Data Request",\n "MJ-TemplateID":"200000",\n "MJ-TemplateLanguage":true,\n "Recipients":[\n {\n "Email":"recipient@email.com",\n "Name":"Hans Henson"\n }\n ],\n "Vars":{\n "mailTitle":"Data Request",\n "userName":"Chris Crumble",\n "imageUrl":"http://my.host.com/image.jpg",\n "userBirthDate":"1.3.1982",\n "recipientName":"Hans Henson",\n "uploadUrl":"https://my.upload.com/",\n "authVideoUrl":"https://my.authvideo.com",\n "records":["Document A","Document B"],\n "authPhone":"113777840097"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n模板的使用方式var:records如下:
...\n </mj-text>\n <mj-raw> {% if var:records:false %} </mj-raw>\n <mj-text>\n <p>\n I, <strong>{{var:userName}}, born on {{var:userBirthDate}}</strong> am asking you to provide the following documents:\n </p>\n </mj-text>\n <mj-raw> {% for item in var:records %} </mj-raw>\n <mj-text>\n {{item}}\n </mj-text>\n <mj-raw> {% endfor %} </mj-raw>\n <mj-raw> {% else %} </mj-raw>\n <mj-text>\n <p>\n I, <strong>{{var:userName}}, born on {{var:userBirthDate}}</strong>, am asking you to provide all my existing documents.\n </p>\n </mj-text>\n <mj-raw> {% endif %} </mj-raw>\n <mj-text>\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n只要var:records随请求发送的数据中设置了\xe2\x80\x99t,邮件就会按预期发送。一旦随请求提供了(非空)数组值,Mailjet 就会在发送时阻止邮件,并且不会提供任何有关原因的进一步信息。
不知道如何让它发挥作用。
\n\n更新:
\n\n感谢 Zivko\xe2\x80\x99s 对 Mailjet 提供的错误报告机制的提示,我能够对问题有更多的了解。
\n\n该模板产生以下错误:
\n\nexpression parsing error ## Unknown identifier: var:records:false ## near ## var:records:false ##\nRun Code Online (Sandbox Code Playgroud)\n\n这对我来说仍然没有任何意义,因为提到的行是一个if条件,false为var:recordsapi 请求未提供任何值的情况定义了默认值。\n此外,模板仅在显式设置值且不为空时才会产生此错误Vars。\ n到目前为止,我的测试让我猜测它可能与提供的值是数组值有关,因为该行不\xe2\x80如果值是纯字符串,\x99t 会导致任何问题。
我遇到了同样的问题,在 Slack 上询问 MJML 团队后,我添加了一个答案。只需使用以下defined()方法:
例子 :
{% if defined(var:employees) %}
My employees :
<ul>
{% for employee in var:employees %}
<li>{{employee.firstname}} {{employee.lastname}}</li>
{% endfor %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这个方法是正确的,MJML 的核心维护者只是说:
It's not publicly documented yet
Run Code Online (Sandbox Code Playgroud)
PS:他们的 Slack 是提出此类问题的好地方,我在几分钟内就得到了回复。(mjml.slack.com)