常见邮件问题及解决方案

本文列出了最常见的邮件问题及其解决方案。

Odoo 并不像 Gmail、Outlook、Yahoo 等传统邮箱收件箱那样工作。

虽然 Odoo 使用邮件来通知和与用户/客户沟通,但它本身 不是 专用邮件服务器的替代品。因此,与传统邮箱相比,它的行为可能与预期不同。

主要区别如下:

  • 默认情况下,一旦通知或事务性邮件(报价、发票、给联系人的直接消息)成功发送,邮件对象会被删除。邮件内容会保存在相关记录的 聊天窗口 中,以避免在数据库中产生多份相同邮件的副本(尤其是发送给多个收件人时)。
  • 没有 (密送)抄送 的概念。Odoo 使用 关注者(followers)来决定何时以及如何通知联系人或让其收到邮件副本。
  • 收件邮件的处理方式是:检查 收件人(TO) 地址是否在 Odoo 数据库中有效,或在回复邮件时检查邮件头中是否有匹配 Odoo 数据库发送记录的引用。其他邮件会被直接退回,而 不会 暂时存入垃圾邮件或隔离文件夹。换句话说,任何与 Odoo 数据库无关的邮件都会丢失。

创建 Odoo 数据库时,主管理员账户会分配一个占位邮箱。建议 将管理员邮箱替换为有效邮箱,以防止发件邮件出现问题。

操作步骤:在管理员账户页面,点击用户图标 → “我的个人资料”(或 “偏好设置”),在 偏好设置 选项卡下的 邮箱 字段中填写新地址。可以使用任意有效邮箱,或使用 Odoo 子域名(如 company-name.odoo.com)并将本地部分设为 admin(如 admin@company-name.odoo.com)。

发送邮件后,聊天窗口会出现一个 fa-envelope-o(信封)图标。若至少有一个收件人未送达,图标会变红。

左键点击信封可查看送达信息以及相关 错误信息(如果有)。

  • 查看错误详情:若 Odoo 能处理原始错误或退回邮件,可点击 “查看错误详情” 获取更详细的失败原因。
  • 重新发送:点击 “发送并关闭” 可对所有 已开启fa-toggle-on)的收件人重新发送,已关闭(fa-toggle-off)的收件人会被忽略。
  • 忽略所有:点击后所有当前失败的邮件会被忽略,信封图标由红色恢复为白色。

未发送的邮件也会出现在 Odoo 邮件队列中。要访问该队列,需要 开启开发者模式,然后进入 设置 → 技术 → 邮件:邮件

失败的邮件显示 Delivery Failed 状态。点击 Retry 可将其重新放回邮件队列,状态会变为 Outgoing,系统将在下次调度邮件队列时再次尝试发送。

  • 可通过点击 Send Now 立即发送排队邮件。
  • 点击 Cancel Email 可将其从队列中移除。

注意
已发送的邮件会定期从队列中清理,这由 Auto-Vacuum 调度任务负责,旨在清除数据库中的冗余数据。

达到每日发送限额

Odoo 对 Odoo Online 数据库的每日发送量有限制。若发送大量无效或已失效的地址,邮件服务提供商(如 Google、Yahoo 等)可能会将 Odoo 服务器 IP 列入黑名单。此限制同样适用于通过 Odoo 发送的垃圾邮件。

默认每日限额在 5 到 200 封邮件之间,具体数值受以下因素影响:

  • 数据库订阅类型(免费应用、试用、付费订阅)
  • 已安装的应用(如邮件营销、营销自动化)
  • 是否正在进行数据库迁移

若达到限额,可:

  1. 联系 Odoo Support 增加配额,评估因素包括:
    • 数据库用户数量
    • 已安装的应用
    • 跳转率(邮件未送达的比例)
    • 邮件别名是否正确配置并使用了合适的自定义域名
    • 提示:使用自定义域名时,请确保 SPFDKIMDMARC 正确配置,使 Odoo 邮件服务器被授权代表该域发送邮件。
  2. 使用 外部发信服务器../email_communication),以摆脱 Odoo 限额的束缚。
  3. 等待次日后再重试:开启开发者模式 → 设置 → 技术 → 邮件:邮件,在未发送的邮件旁点击 Retry

重要
每封离开 Odoo 数据库的邮件,无论是手动触发还是自动触发,都会计入每日限额。可以通过在 Odoo 中接收 通知(而非邮件)来降低计数。

SMTP 错误

Simple Mail Transfer Protocol (SMTP) 是在邮件服务器或客户端之间传输邮件的标准协议。

如果使用 外部 SMTP 服务器 发送邮件,常见的 SMTP 错误码 可以在维基百科上查到。错误码本身与 Odoo 无关,但具体错误信息会因不同邮件服务器而异。

Mail Delivery Failed
Mail delivery failed via SMTP server 'None'.
SMTPDataError: 550
The from address does not match a verified Sender Identity. Mail cannot be sent until this error is resolved. Visit https://sendgrid.com/docs/for-developers/sending-email/sender-identity/ to see the Sender Identity requirements

上述示例表明发送方地址未通过验证。排查时,可检查外部发信服务器的配置或数据库默认的 FROM 地址,并确认已在相应服务(如 SendGrid)上将该地址列入白名单。

通常,将错误信息粘贴到搜索引擎即可找到相应的解决方案。若问题仍未解决,请联系 Odoo Support

未返回错误信息

Odoo 并非总能提供导致发送失败的具体原因,因为不同邮件提供商对退信的策略各不相同,Odoo 可能无法正确解析。

如果同一客户或同一域名经常出现此类问题,请联系 Odoo Support

注意
最常见的无错误信息的发送失败原因与 SPFDKIM 配置错误有关。请确认邮件通知设置符合业务需求,更多信息请参阅 ../email_communication 文档。

邮件的实际发送时间由系统的 cron(计划任务) 控制,cron 会在预设的间隔自动运行,以处理“不紧急”的邮件(如新闻通讯、营销自动化、活动通知),从而避免对邮件服务器造成过大负载。

什么是 cron?
cron 是 Odoo 在后台执行特定代码的计划任务。手动修改或频繁触发 cron 可能导致错误或破坏工作流。

默认情况下,普通邮件队列的 Mail: Email Queue Manager cron 每 60 分钟 运行一次。cron 的最小间隔为 5 分钟,Odoo 推荐使用 15 分钟 的间隔,以保证系统稳定。间隔过短可能导致部分邮件未被处理,从而出现超时。

紧急邮件(如销售订单、发票、采购单等)会 立即发送,不出现在 设置 → 技术 → 邮件:邮件 界面,除非发送失败。

邮件营销队列的 Mail Marketing: Process queue cron 默认每天运行一次,但如果在默认频率之外安排了活动,系统会 自动提前触发。若收件人数量极多,手动多次触发该 cron 并不会加速处理,反而可能导致错误。

提示
若需编辑 cron,先开启 开发者模式,然后进入 设置 → 技术 → 自动化:计划任务

如果多个邮件营销活动同时进入队列,系统会按照 创建时间的先后顺序 处理。

例如,Campaign_1(1 月 1 日创建)、Campaign_2(1 月 2 日创建)和 Campaign_3(1 月 3 日创建)同时点击 “发送”,系统会先处理 Campaign_1,完成后才会处理 Campaign_2,依此类推。

如果某个活动始终卡在队列顶部,可先点击 Cancel 将其移除,然后观察其余活动是否能够发送。必要时可联系 Odoo Support

收件邮件出现问题时,Odoo 本身往往没有明显提示。通常是发送方的邮件客户端收到退信(常见为 550: mailbox unavailable)。

如果同一客户或域名经常出现此类问题,请联系 Odoo Support

可以利用 数据库日志 来定位并解决问题。日志记录了数据库中每一次任务执行的时间戳和详细信息,能够帮助追踪邮件的发送过程。日志文件位于 ~/logs/ 目录(可通过命令行或 Odoo.sh 仪表盘访问),每天凌晨 5:00(UTC)生成新文件。

提示
当天和前一天的日志文件分别为 odoo.logodoo.log.1。更早的日志会以日期命名并压缩。可使用 grep(普通文件)或 zgrep(压缩文件)进行搜索。

更多关于日志的使用,请参阅:

  • Odoo.sh 日志文档odoo-sh/branches/tabs/logs
  • 开发者日志文档reference/cmdline/server/logging

Odoo Support 求助时,请提供以下信息以便快速定位问题:

  1. 完整邮件导出:通常为 .eml.msg 格式,包含调查所需的技术信息。导出方式取决于所使用的第三方邮件服务商。

    使用本地邮件客户端(如 Thunderbird、Apple Mail、Outlook)同步邮件时,通常可以将本地邮件导出为 EML/MSG 文件,具体操作请参考相应软件文档。

    提示

    • 对于 收件邮件:尽可能让原始发件人提供原始邮件的 EML/MSG 文件。转发的邮件仅包含部分信息,难以排查。
    • 对于 发件邮件:提供邮件的 EML/MSG 文件,或说明受影响的记录(如销售订单号、联系人姓名、发票号)以及发送的日期时间。
  2. 邮件流的完整描述:回答以下问题以帮助定位问题根源:

    • 这是来自 Odoo 的回复通知吗?
    • 这封邮件是从 Odoo 数据库内部发送的?
    • 是否使用了外部收件邮件服务器,或通过自定义邮件服务器/提供商进行转发?
    • 是否有成功转发的邮件示例?
    • 最近是否更改过任何邮件相关设置?更改后是否出现问题?
  3. 问题细节

    • 是普遍性问题还是特定场景下的问题?如果是特定场景,请说明是哪一种。
    • 是否符合预期行为?若是 Odoo 发送的邮件,退信应回到 Odoo 数据库并显示 红色信封email-issues-outgoing-delivery-failure)。