Odoo 入站邮件管理与别名配置指南
管理入站邮件
入站邮件是发送到 Odoo 数据库的电子邮件。任何人都可以向数据库中创建的邮件别名发送邮件,或回复之前从数据库发送的、带有 reply-to 头的邮件。
邮件别名
模型特定别名
某些应用拥有自己的别名(如销售团队、帮助台团队、项目等)。这些别名用于:
- 当邮件直接发送到别名时创建记录;
- 接收最初从记录中发送的邮件的回复。
::: example
在上图中,发送邮件到 info@company-name.odoo.com 会自动创建一个新机会或新线索,并分配给对应的销售团队。若从已有机会的聊天窗口发送邮件,reply‑to 将是 info@company-name.odoo.com。回复会根据 message-id 头被发布到正确的聊天窗口。 :::
Catchall 别名
如果某个应用没有专属别名,则使用通用的回退别名:catchall。聊天窗口发送的邮件其回复地址会设置为该 catchall 别名。发送到 catchall 的回复会凭借 message-id 头被发布到正确的聊天窗口。
默认使用本地部分 catchall。启用 developer-mode,进入 设置 → 技术 → 邮件:别名域 可进行配置。
catchall 必须是对之前从数据库发送的邮件的回复。若直接向 catchall 发送邮件,发送者会收到如下退信:
:::: note ::: title 注意 :::
截图中显示的 info@company-name.com 是公司设置的邮箱地址。进入公司档案的开发者模式后,可看到更多配置选项(如 catchall 与 bounce)。可以通过点击邮件域的内部链接进行修改。除非有特殊需求,否则不建议修改,因为会影响所有先前发送邮件的回复。 ::::
::: example 在 CRM 应用的销售团队上可以配置别名。当客户回复来自 CRM 的邮件时,reply‑to 为 info@company-name.odoo.com。
若从联系人应用发送邮件,则因为联系人模型没有别名,回复地址为 catchall@company-name.odoo.com。 :::
:::: note ::: title 注意 :::
建议保持 catchall 与 bounce 的本地部分不变。若修改了该值,之前已发送的邮件仍使用旧的本地部分,可能导致回复无法正确收到。 ::::
Bounce 别名
与 catchall 用于构建回复地址相同,bounce 别名用于构建邮件的 return‑path。当邮件无法送达收件人时,错误会返回给发送者。
默认使用本地部分 bounce。启用 developer-mode,进入 设置 → 技术 → 邮件:别名域 可配置。
:::: note ::: title 注意 :::
在 Odoo Online 使用默认的外发邮件服务器时,return‑path 地址被强制为 bounce@company-name.odoo.com,不受 bounce 别名设置影响。 ::::
当出现错误时,系统会在聊天窗口显示一个红色信封的通知。有时该信封只包含 [no error],表示错误无法被 Odoo 处理。
导航栏的 Discuss 图标也会显示相应通知。
::: example 如果收件人的邮箱地址错误,点击聊天窗口的红色信封会显示包含失败原因的错误信息。
:::
使用 Odoo 默认配置接收邮件
在 Odoo Online 与 Odoo.sh 上,邮件别名、回复地址和 bounce 地址均已预配置。这些地址使用自动添加到标准数据库的别名域。
::: example 假设数据库 URL 为 https://mydatabase.odoo.com,则别名域 mydatabase.odoo.com 会自动创建。catchall 与 bounce 地址分别为 catchall@mydatabase.odoo.com 与 bounce@mydatabase.odoo.com。
若已安装 CRM 应用并创建了别名 info 的销售团队,则 info@mydatabase.odoo.com 可直接使用。其他应用创建的别名同理。 :::
数据库域名已准备就绪,可直接接收邮件,无需额外配置。
使用多个 Odoo 子域名
在 Odoo Online,唯一的子域名即在创建数据库时定义的子域名。
在 Odoo.sh,可以使用多个子域名。分支设置中可添加额外的 Odoo 子域名,只要该子域名未被其他分支占用。随后需将这些域名添加到别名域中供公司使用。
使用自定义域名接收邮件
在通用设置中必须选择 别名域 <email-outbound-alias-domain>。若有多个公司,每个公司都需单独配置。
所有别名都会使用此自定义域名。已配置别名的模型的回复地址为 [别名]@my-custom-domain.com,其他模型的回复则通过 catchall@my-custom-domain.com 发送。
:::: important ::: title 重要 :::
若使用 Odoo 邮件服务器发送邮件且使用了自定义域名,请遵循 “使用自定义域名的 Odoo 邮件服务器” 文档中的说明。 ::::
使用自定义域名后,所有使用别名的邮件(回复、bounce、直接发送)都会发送到该域名的邮件服务器(MX 记录)。要在聊天窗口显示或创建新记录,需要将这些入站邮件导入 Odoo 数据库。
| 方法 | 优点 | 缺点 |
|---|---|---|
重定向 <email-inbound-custom-domain-redirections> | 设置简单,邮件直接送达数据库。 | 每个数据库别名都需单独配置。 |
收件服务器 <email-inbound-custom-domain-incoming-server> | 可在邮箱中保留邮件副本(IMAP),可在指定模型中创建记录。 | 依赖 CRON,邮件不会即时导入;每个别名均需配置。 |
MX 记录 <email-inbound-custom-domain-mx> | 只需创建一条记录,即可让所有别名正常工作。 | 需要使用子域名,需具备高级技术知识。 |
:::: important ::: title 重要 :::
对于 本地部署 数据库,重定向和 MX 记录方式同样需要配置 邮件网关脚本 <../../../../administration/on_premise/email_gateway>。该脚本的使用要求 高级技术和基础设施知识。
::::
:::: important ::: title 重要 :::
请参考您邮件服务提供商的文档,了解下面各方法的详细操作步骤。 ::::
重定向
如果数据库托管在 Odoo Online 或 Odoo.sh,推荐使用重定向。它们可以实现无延迟的邮件接收。
:::: warning ::: title 警告 :::
在使用 Microsoft 365(Exchange Online)配置邮件重定向时,需要注意技术限制。部分用户反馈 Microsoft 365 不支持真正的重定向,只能使用转发,可能无法满足 Odoo 的邮件路由需求。
更多信息请访问 Microsoft Learn。 ::::
必须将 catchall 与 bounce 地址重定向到数据库的 Odoo 子域名,其他所有别名同样需要重定向。
::: example 假设只有一个销售团队,需要以下重定向:
- catchall@company-name.com → catchall@company-name.odoo.com
- bounce@company-name.com → bounce@company-name.odoo.com
- info@company-name.com → info@company-name.odoo.com :::
:::: important ::: title 重要 :::
部分供应商会要求通过发送链接到目标邮箱来验证重定向。这对 catchall 与 bounce 会产生问题,因为它们本身并不创建记录。
- 在邮件别名域中修改 catchall 的本地部分(需启用
developer-mode),例如将 catchall 改为 temp‑catchall,以便后续使用 catchall 作为其他别名的本地部分。 - 打开使用别名的应用(如 CRM),将 catchall 设为某销售团队别名的本地部分。
- 验证邮件会在 CRM 中创建记录,邮件内容会出现在聊天窗口,从而完成验证。
- 完成后记得恢复销售团队别名和邮件别名域中的 catchall 本地部分。
::::
:::: note ::: title 注意 :::
除了重定向,还可以使用 转发。使用转发时,邮件的转发地址会被视为发送者;而使用重定向时,原始发送者始终保持不变。 ::::
收件服务器
如前所述,推荐使用重定向来接收邮件。但也可以配置收件服务器。此方式需要为每个邮箱(包括 catchall、bounce 以及数据库的所有别名)在服务器上创建相应的收件服务器,以便抓取所有入站邮件。
:::: warning ::: title 警告 :::
Odoo 的 收件服务器 功能适用于共享收件箱(如 sales@yourcompany.com、support@yourcompany.com),用于将邮件路由到团队流水线、工单或文档。
不建议使用个人邮箱(如 mitchell.admin@yourcompany.com)作为收件服务器,因为会增加安全风险、导致路由错误、隐私问题以及回复同步困难。 ::::
收件服务器可在 设置 → 技术 → 邮件:收件服务器 中创建。
:::: important ::: title 重要 :::
建议使用 IMAP 协议而非 POP。IMAP 会仅抓取未读邮件,POP 会抓取全部历史邮件并在邮箱中标记为已删除。 ::::
:::: tip ::: title 提示 :::
也可以通过 Gmail with Google OAuth <google_oauth> 或 Outlook with Microsoft Azure OAuth <azure_oauth> 连接邮箱。
::::
无论选择何种协议,邮件均由 Mail: Fetchmail Service 计划任务抓取。
使用收件服务器的另一优势是可以在指定模型中创建新记录。每个收件服务器可对应不同模型。
::: example 发送到 task@company-name.com 的邮件会被 Odoo 抓取,并在数据库中创建对应的项目任务。
:::
MX 记录
第三种方案是在 DNS 区域创建 MX 记录,指定负责接收该域名邮件的邮件服务器。需要高级技术知识。
:::: important ::: title 重要 :::
此配置仅在 Odoo Online 或 Odoo.sh 的子域名(如 @mail.mydomain.com)上有效。 ::::
以下分别列出不同托管类型的注意事项:
::::: tabs ::: group-tab Odoo Online
必须在 Odoo Portal <../../websites/website/configuration/domain_names> 中添加自定义子域名。
:::
::: group-tab Odoo.sh
必须在项目的 设置 <../../../administration/odoo_sh/getting_started/settings> 中添加自定义子域名:
::: :::::
无限邮件循环
在某些情况下,可能会产生无限的邮件循环。Odoo 提供了相应的防护机制,限制同一发件人在特定时间内向同一别名发送过多邮件,从而避免创建大量记录。
默认情况下,单个邮件地址在 120 分钟内最多可发送 20 封邮件。超过此阈值的邮件会被阻止,发送者将收到如下信息:
如需修改默认行为,启用 developer-mode,进入 设置 → 技术 → 参数:系统参数,新增以下两个参数:
- 键 mail.gateway.loop.minutes,值为分钟数(默认 120);
- 键 mail.gateway.loop.threshold,值为邮件数量(默认 20)。
允许别名域系统参数
入站别名用于在 Odoo 数据库中通过接收邮件创建记录。要查看已设置的别名,先激活 developer mode,然后进入 设置 → 技术 → 别名。
系统参数 mail.catchall.domain.allowed 用于指定允许的别名域(逗号分隔),仅当邮件的完整地址匹配这些域时才会被视为合法别名,从而避免因仅匹配别名前缀而产生的误报。
有时即使别名前缀相同、域不同(如 commercial@example.com),系统仍可能误将其视为完整别名并创建工单/线索。
添加该系统参数的步骤:
- 激活
developer mode; - 前往
设置 → 技术 → 系统参数,点击 新建; - 键填入 mail.catchall.domain.allowed;
- 值填入允许的域名,使用逗号分隔;
- 保存(fa-cloud-upload),参数立即生效。
基于本地部分的入站检测
创建新别名时,可勾选 基于本地部分的入站检测。开启后,Odoo 只需匹配本地部分(即 “@” 前的部分)即可路由入站邮件;关闭后则需要完整的邮件地址匹配。