我正在使用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 ,该行不会导致任何问题
答案 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)