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

时间:2017-08-29 09:40:27

标签: email-templates mailjet mjml

我正在使用MJML编写的Mailjet电子邮件模板,该模板使用Vars提供的数组值生成发件人希望从邮件收件人接收的项目列表。数组中的所有值都是纯文本值。

传递给API请求的数据如下所示:

{
    "FromEmail":"sender@email.com",
    "FromName":"Chris Crumble",
    "Subject":"Data Request",
    "MJ-TemplateID":"200000",
    "MJ-TemplateLanguage":true,
    "Recipients":[
        {
            "Email":"recipient@email.com",
            "Name":"Hans Henson"
        }
    ],
    "Vars":{
        "mailTitle":"Data Request",
        "userName":"Chris Crumble",
        "imageUrl":"http://my.host.com/image.jpg",
        "userBirthDate":"1.3.1982",
        "recipientName":"Hans Henson",
        "uploadUrl":"https://my.upload.com/",
        "authVideoUrl":"https://my.authvideo.com",
        "records":["Document A","Document B"],
        "authPhone":"113777840097"
    }
}

模板使用var:records,如下所示:

        ...
        </mj-text>
        <mj-raw> {% if var:records:false %} </mj-raw>
        <mj-text>
          <p>
            I, <strong>{{var:userName}}, born on {{var:userBirthDate}}</strong> am asking you to provide the following documents:
          </p>
        </mj-text>
        <mj-raw> {% for item in var:records %} </mj-raw>
        <mj-text>
          {{item}}
        </mj-text>
        <mj-raw> {% endfor %} </mj-raw>
        <mj-raw> {% else %} </mj-raw>
        <mj-text>
          <p>
            I, <strong>{{var:userName}}, born on {{var:userBirthDate}}</strong>, am asking you to provide all my existing documents.
          </p>
        </mj-text>
        <mj-raw> {% endif %} </mj-raw>
        <mj-text>
          ...

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

不知道如何让这个工作。

更新

感谢Zhivko对Mailjet提供的错误报告机制的暗示,我能够更深入地了解这个问题。

模板会产生以下错误:

expression parsing error ## Unknown identifier: var:records:false ## near ## var:records:false ##

这仍然对我没有任何意义,因为提到的行是一个if条件,默认值为false,为var:records没有提供值的情况定义与api请求。 此模板仅在Vars中明确设置值并且为空时才会产生此错误。 到目前为止,我的测试让我猜测它可能与提供的值是数组值有关,因为如果值为plain string ,该行不会导致任何问题

3 个答案:

答案 0 :(得分:2)

由于模板语言中的错误,可能会阻止该消息。要接收有关错误的详细信息,请启用error reporting mechanism。如果您在调试错误消息时遇到问题,请使用Mailjet打开support ticket以进行特定模板的深入调查。

答案 1 :(得分:2)

我添加了同样的问题,在向他们的Slack询问MJML团队后,我添加了答案。只需使用defined()方法:

示例:

{% if defined(employees) %}
  My employees :
  <ul>
    {% for employee in var:employees %}
      <li>{{employee.firstname}} {{employee.lastname}}</li>
    {% endfor %}
  </ul>
{% endif %}

这种方法是正确的,MJML的核心维护者只是说:

It's not publicly documented yet
PS:他们的Slack是一个提出这类问题的好地方,我在几分钟内得到了答复。 (mjml.slack.com

答案 2 :(得分:0)

据我所知,Mailjet不允许将数组作为个性化var。

  

DataType:正在存储的数据类型(可以是a   str,int,float或bool)

https://dev.mailjet.com/guides/#manage-contacts