邮件模板

Odoo 邮件模板为什么有时发出来怪怪的:mail.template、变量渲染和发送链路讲透

很多通知问题表面像“模板文案不对”,实际上常常涉及模板变量、上下文对象和发送入口。本文把 mail.template 这条链讲清楚。

Odoo 开发 销售
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 7 阅读

先说结论

在 Odoo 里,邮件模板问题很多时候不是“文案写错了”这么简单。

更常见的链路其实是:

  • 用哪一个 mail.template
  • 模板渲染时当前对象是谁
  • 模板变量在什么上下文下展开
  • 最后通过什么入口发送出去

所以模板异常很多时候不是模板单点问题,而是整条渲染发送链有一层没对齐。


为什么邮件模板问题常让人觉得玄学

因为你看到的表面通常是:

  • 占位变量怎么没出来
  • 收件人怎么不对
  • 文案怎么带了旧值
  • 模板在这里能发,在那里又怪怪的

这会让人误以为:

  • Odoo 模板系统不稳定

但更常见的现实是:

模板本身只是壳,真正决定输出内容的是“它拿到了谁、拿到了什么上下文、从哪条入口发出去”。


mail.template 真正适合做什么

它更像:

一份可复用的消息结构定义。

里面通常包括:

  • 主题
  • 正文
  • 目标对象相关变量
  • 有时还有收件人或发送配置线索

所以它不是纯静态文案,而是“带变量的消息蓝图”。


为什么“当前对象是谁”这么关键

因为模板变量并不是凭空展开的。

它通常是围绕某个业务对象来渲染:

  • 销售单
  • 发票
  • 采购单
  • 联系人

如果当前对象上下文不对,模板里那些看起来理所当然的变量就会:

  • 取不到值
  • 取到空值
  • 或取到你没预期的对象数据

所以模板问题很多时候不是写错变量,而是“喂给模板的对象不对”。


为什么发送入口也会影响结果

因为模板不是凭空自己发出去的。

不同发送入口可能会带来:

  • 不同的上下文
  • 不同的默认收件人
  • 不同的调用时机
  • 不同的批量发送行为

这也是为什么“同一个模板从 A 入口正常,从 B 入口怪异”这种情况很常见。

问题不一定在模板,而可能在入口给它的环境不同。


为什么模板渲染问题不能只看 HTML

因为邮件模板除了正文结构,还涉及:

  • 变量展开
  • 语言上下文
  • 收件人对象
  • 消息发送时机

所以很多问题不是“HTML 排版坏了”,而是上游变量和调用方式就已经偏了。


实战里最容易踩的 5 个坑

1. 只改模板文案,不检查当前对象上下文

会一直以为变量系统有问题。

2. 以为模板本身决定一切

忽略发送入口差异。

3. 用错对象模型去渲染模板

最容易出现空值和错值。

4. 只测一个发送入口

上线后换入口就暴露问题。

5. 把模板当静态邮件正文理解

会低估它对上下文的依赖。


一句话记忆法

把它记成一句话:

mail.template 是带变量的消息蓝图,真正输出什么内容,取决于它拿到的业务对象、上下文环境和具体发送入口。

理解这一句,Odoo 邮件模板问题就不会再那么像玄学。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。