升级前模板里能写 {{var order.getCustomValue()}},升级后邮件正常发出,但这段变空。不是订单数据没了,而是邮件模板进入更严格的变量解析,任意方法调用不再可靠也不安全。
正确方向是在发送邮件前把需要的值明确加入template vars:
$transportBuilder->setTemplateVars([
'order' => $order,
'custom_value' => (string)$value,
]);
模板中使用:{{var custom_value}}
别把整个Service塞进模板
模板只需要展示数据,传标量、数组或受支持的数据对象。把Repository、Helper或任意Model交给模板调用,会让权限边界和升级兼容都变差。
如果是Observer追加变量,确认监听的是当前版本真正触发的邮件事件,并记录变量键名而不是客户内容。后台预览使用的是样例数据,预览正常不代表真实发送上下文有同样变量。
我会用订单、发票、发货三种邮件分别发到测试邮箱,查看原始邮件源,确认转义、换行和多Store语言都正常。

