You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止向客户发送邮件后在记录Chatter中生成邮件记录?

Odoo 调用mail.mail_template发送邮件时禁止生成Chatter记录的实现方式

调用mail.mail_template的send_mail()方法发信时默认在关联记录的Chatter生成消息,是因为Odoo的mail模块默认会把外发邮件关联的mail.message挂载到对应业务记录的消息流中,可通过以下两种方案实现无Chatter记录发信:

方案1:调用时传参+上下文控制(推荐,无额外数据操作)

直接在调用方法时传入控制上下文,同时覆盖邮件生成时的关联字段,从源头阻断消息挂载:

# 先获取你要使用的邮件模板
mail_template = self.env.ref("你的自定义模块名.对应邮件模板的XMLID")
# 传入上下文+参数发送邮件
mail_template.with_context(
    mail_create_nolog=True, # 禁止自动生成操作日志类Chatter消息
    tracking_disable=True, # 禁止触发字段追踪生成Chatter记录
    mail_notify_force_send=True
).send_mail(
    res_id=目标业务记录的数据库ID,
    force_send=True, # 可根据你的发信策略选择是否立即发送
    raise_exception=False,
    # 覆盖邮件默认关联值,避免挂载到Chatter
    email_values={
        "subtype_id": False,
        "model": False,
        "res_id": False
    }
)

方案2:生成邮件记录后手动剥离关联再发送

如果不方便修改原有调用的参数逻辑,可以先生成待发的邮件记录,清空关联字段后再触发发送:

# 先生成待发邮件记录,不立即发送
mail_record_id = mail_template.send_mail(
    res_id=目标业务记录的数据库ID,
    force_send=False,
    raise_exception=False
)
# 获取生成的邮件记录,清空Chatter关联字段
mail_record = self.env["mail.mail"].browse(mail_record_id)
mail_record.mail_id.write({
    "model": False,
    "res_id": False,
    "subtype_id": False
})
# 手动触发邮件发送
mail_record.send()

注意:如果使用上述方法后仍有Chatter记录生成,请检查你使用的邮件模板配置,将模板默认绑定的消息子类型清空,同时关闭模板上的「自动记录到文档消息墙」类配置项,避免模板默认配置覆盖你传入的参数。

内容的提问来源于stack exchange,提问作者xixo222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:27:28