Mailjet模板变量未定义时条件判断报错求助
问题:Mailjet模板条件图片渲染发送时报错
我在Mailjet中制作带图片的页脚组件,需要实现两种图片展示逻辑:
- 使用已定义的
sender_image变量作为图片源 - 当
sender_image变量未定义时,使用备用图片
我编写了如下代码:
<table align="center" width="100%"> <tr> <th> <div style="margin: 16px auto; text-align: center;"> {% set image = var:sender_image:"N/A" %} {% if image != "N/A" %} <img src="{{image}}" style="max-width:120px;margin:0 auto;"> {% else %} <img src="https://link_to_the_image.de/image.png" style="max-width:120px;margin:0 auto;"> {% endif %} </div> </th> </tr> </table>
这段代码在Mailjet预览中能正常运行(两种情况均符合预期),但发送邮件时出现如下错误:
A template language occurred when sending a message using Template 4935390: unknown node ## near ## voir
SET IMAGE ##
我参考过相关方案并多次重构代码,但问题仍未解决。请问我哪里操作有误?
解答
你的问题出在Mailjet模板语言的变量赋值语法上,{% set image = var:sender_image:"N/A" %}这种写法不符合Mailjet的规范——虽然预览环境能临时解析,但实际发送时的模板引擎会判定这是语法错误,从而抛出异常。
推荐两种符合官方规范的修正写法:
方案一:直接判断变量是否存在
<table align="center" width="100%"> <tr> <th> <div style="margin: 16px auto; text-align: center;"> {% if var:sender_image %} <img src="{{var:sender_image}}" style="max-width:120px;margin:0 auto;"> {% else %} <img src="https://link_to_the_image.de/image.png" style="max-width:120px;margin:0 auto;"> {% endif %} </div> </th> </tr> </table>
方案二:使用default过滤器简化代码
<table align="center" width="100%"> <tr> <th> <div style="margin: 16px auto; text-align: center;"> <img src="{{var:sender_image|default('https://link_to_the_image.de/image.png')}}" style="max-width:120px;margin:0 auto;"> </div> </th> </tr> </table>
Mailjet的模板引擎在处理set语句时,不支持var:varname:"default"这种嵌套语法,预览环境和实际发送引擎的解析逻辑存在差异,才导致了“预览正常但发送报错”的情况。改用上述两种写法即可解决问题。
内容的提问来源于stack exchange,提问作者nkhape
相关产品推荐
相关产品推荐

