Mailjet: значение массива, предоставленное через vars, блокирует электронную почту при отправке

Я работаю над шаблоном электронной почты для Mailjet, написанным на MJML, который использует значение массива, предоставленное через 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 блокирует почту при отправке без предоставления дополнительной информации о причине.

Не знаю, как заставить это работать.

ОБНОВИТЬ:

Благодаря подсказке Живко к механизму сообщений об ошибках, предоставленному Mailjet, я смог немного лучше разобраться в проблеме.

Шаблон выдает следующую ошибку:

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

Это все еще не имеет никакого смысла для меня, поскольку упомянутая линия if условие со значением по умолчанию false определено для случая, когда нет значения для var:records предоставляется с запросом API. Также шаблон выдает эту ошибку только тогда, когда значение явно установлено в Vars и не пусто. Мои тесты пока заставляют меня догадываться, что это может иметь отношение к предоставленному значению, являющемуся значением массива, поскольку строка не вызывает никаких проблем, если значение является простой строкой.

4 ответа

Решение

Я добавляю ту же проблему и после того, как спрашиваю команду MJML об их Slack, я добавляю ответ. Просто используйте 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 - хорошее место, чтобы задать такой вопрос, и у меня был ответ через несколько минут. ( https://mjml.slack.com/)

Возможно, сообщение заблокировано из-за ошибки в языке шаблонов. Чтобы получить подробную информацию об ошибке, включите механизм сообщения об ошибках. Если у вас возникли проблемы при отладке сообщения об ошибке, откройте заявку в службу поддержки Mailjet для подробного изучения конкретного шаблона.

Насколько я знаю, Mailjet не допускает использование массивов в качестве персонализированной переменной.

DataType: тип хранимых данных (это может быть либо str, int, float или bool)

https://dev.mailjet.com/guides/

Решение:

      <% if(typeof bar !== 'undefined') { %>
    variable 'bar' is defined in payload:
    <b><%= bar %></b>
<% } else {%>
    variable 'bar' is not defined in payload
<% }%>
Другие вопросы по тегам