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)
Решение:
<% if(typeof bar !== 'undefined') { %>
variable 'bar' is defined in payload:
<b><%= bar %></b>
<% } else {%>
variable 'bar' is not defined in payload
<% }%>