Mailjet:通过 vars 提供的数组值使电子邮件在发送时被阻止

Oli*_*ver 3 email-templates mailjet mjml

I\xe2\x80\x99m 正在开发一个用 MJML 编写的 Mailjet 电子邮件模板,该模板使用通过提供的数组值Vars来生成发件人希望从邮件收件人接收的项目列表。数组中的所有值都是纯文本值。

\n\n

传递给 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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

模板的使用方式var:records如下:

\n\n
        ...\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          ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

只要var:records随请求发送的数据中设置了\xe2\x80\x99t,邮件就会按预期发送。一旦随请求提供了(非空)数组值,Mailjet 就会在发送时阻止邮件,并且不会提供任何有关原因的进一步信息。

\n\n

不知道如何让它发挥作用。

\n\n

更新:

\n\n

感谢 Zivko\xe2\x80\x99s 对 Mailjet 提供的错误报告机制的提示,我能够对问题有更多的了解。

\n\n

该模板产生以下错误:

\n\n
expression parsing error ## Unknown identifier: var:records:false ## near ## var:records:false ##\n
Run Code Online (Sandbox Code Playgroud)\n\n

这对我来说仍然没有任何意义,因为提到的行是一个if条件,falsevar:recordsapi 请求未提供任何值的情况定义了默认值。\n此外,模板仅在显式设置值且不为空时才会产生此错误Vars\ n到目前为止,我的测试让我猜测它可能与提供的值是数组值有关,因为该行不\xe2\x80如果值是纯字符串,\x99t 会导致任何问题。

\n

Flo*_*agu 7

我遇到了同样的问题,在 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