Mailjet:通过 vars 提供的数组值使电子邮件在发送时被阻止
Mailjet: Array value provided through vars makes email being blocked on sending
我正在为 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 阻止,而不会提供任何进一步的原因信息。
不知道如何让它工作。
更新:
感谢 Zhivko 对 Mailjet 提供的错误报告机制的提示,我能够更深入地了解问题。
模板产生以下错误:
expression parsing error ## Unknown identifier: var:records:false ## near ## var:records:false ##
这对我来说仍然没有任何意义,因为提到的行是一个 if
条件,默认值 false
是为 var:records
没有值的情况定义的由 api 请求提供。
此外,只有在 Vars
中明确设置值并且 不是 为空时,模板才会产生此错误。
到目前为止,我的测试让我猜测它可能与提供的值是一个 array 值有关,因为如果该值是普通的 ,该行不会引起任何问题字符串.
消息可能由于模板语言错误而被阻止。要接收有关错误的详细信息,请使用 Mailjet 启用 error reporting mechanism. If you have troubles debugging the error message, open a support ticket 以深入调查特定模板。
据我所知,Mailjet 不允许将数组作为个性化变量。
DataType: the type of data that is being stored (this can be either a
str, int, float or bool)
我遇到了同样的问题,在他们的 Slack 上询问了 MJML 团队后,我添加了一个答案。只需使用 defined()
方法:
示例:
{% if defined(var: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)
解决方案:
<% if(typeof bar !== 'undefined') { %>
variable 'bar' is defined in payload:
<b><%= bar %></b>
<% } else {%>
variable 'bar' is not defined in payload
<% }%>
我正在为 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 阻止,而不会提供任何进一步的原因信息。
不知道如何让它工作。
更新:
感谢 Zhivko 对 Mailjet 提供的错误报告机制的提示,我能够更深入地了解问题。
模板产生以下错误:
expression parsing error ## Unknown identifier: var:records:false ## near ## var:records:false ##
这对我来说仍然没有任何意义,因为提到的行是一个 if
条件,默认值 false
是为 var:records
没有值的情况定义的由 api 请求提供。
此外,只有在 Vars
中明确设置值并且 不是 为空时,模板才会产生此错误。
到目前为止,我的测试让我猜测它可能与提供的值是一个 array 值有关,因为如果该值是普通的 ,该行不会引起任何问题字符串.
消息可能由于模板语言错误而被阻止。要接收有关错误的详细信息,请使用 Mailjet 启用 error reporting mechanism. If you have troubles debugging the error message, open a support ticket 以深入调查特定模板。
据我所知,Mailjet 不允许将数组作为个性化变量。
DataType: the type of data that is being stored (this can be either a str, int, float or bool)
我遇到了同样的问题,在他们的 Slack 上询问了 MJML 团队后,我添加了一个答案。只需使用 defined()
方法:
示例:
{% if defined(var: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)
解决方案:
<% if(typeof bar !== 'undefined') { %>
variable 'bar' is defined in payload:
<b><%= bar %></b>
<% } else {%>
variable 'bar' is not defined in payload
<% }%>