管理入站邮件

入站邮件是发送到 Odoo 数据库的电子邮件。任何人都可以向数据库中创建的邮件别名发送邮件,或回复之前从数据库发送的、带有 reply-to 头的邮件。

某些应用拥有自己的别名(如销售团队、帮助台团队、项目等)。这些别名用于:

  • 当邮件直接发送到别名时创建记录;
  • 接收最初从记录中发送的邮件的回复。

::: example

在上图中,发送邮件到 info@company-name.odoo.com 会自动创建一个新机会或新线索,并分配给对应的销售团队。若从已有机会的聊天窗口发送邮件,reply‑to 将是 info@company-name.odoo.com。回复会根据 message-id 头被发布到正确的聊天窗口。 :::

如果某个应用没有专属别名,则使用通用的回退别名:catchall。聊天窗口发送的邮件其回复地址会设置为该 catchall 别名。发送到 catchall 的回复会凭借 message-id 头被发布到正确的聊天窗口。

默认使用本地部分 catchall。启用 developer-mode,进入 设置 → 技术 → 邮件:别名域 可进行配置。

catchall 必须是对之前从数据库发送的邮件的回复。若直接向 catchall 发送邮件,发送者会收到如下退信:

:::: note ::: title 注意 :::

截图中显示的 info@company-name.com 是公司设置的邮箱地址。进入公司档案的开发者模式后,可看到更多配置选项(如 catchall 与 bounce)。可以通过点击邮件域的内部链接进行修改。除非有特殊需求,否则不建议修改,因为会影响所有先前发送邮件的回复。 ::::

::: example 在 CRM 应用的销售团队上可以配置别名。当客户回复来自 CRM 的邮件时,reply‑toinfo@company-name.odoo.com

若从联系人应用发送邮件,则因为联系人模型没有别名,回复地址为 catchall@company-name.odoo.com。 :::

:::: note ::: title 注意 :::

建议保持 catchall 与 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 OnlineOdoo.sh 上,邮件别名、回复地址和 bounce 地址均已预配置。这些地址使用自动添加到标准数据库的别名域。

::: example 假设数据库 URL 为 https://mydatabase.odoo.com,则别名域 mydatabase.odoo.com 会自动创建。catchall 与 bounce 地址分别为 catchall@mydatabase.odoo.combounce@mydatabase.odoo.com

若已安装 CRM 应用并创建了别名 info 的销售团队,则 info@mydatabase.odoo.com 可直接使用。其他应用创建的别名同理。 :::

数据库域名已准备就绪,可直接接收邮件,无需额外配置。

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 OnlineOdoo.sh,推荐使用重定向。它们可以实现无延迟的邮件接收。

:::: warning ::: title 警告 :::

在使用 Microsoft 365(Exchange Online)配置邮件重定向时,需要注意技术限制。部分用户反馈 Microsoft 365 不支持真正的重定向,只能使用转发,可能无法满足 Odoo 的邮件路由需求。

更多信息请访问 Microsoft Learn。 ::::

必须将 catchall 与 bounce 地址重定向到数据库的 Odoo 子域名,其他所有别名同样需要重定向。

::: example 假设只有一个销售团队,需要以下重定向:

:::: important ::: title 重要 :::

部分供应商会要求通过发送链接到目标邮箱来验证重定向。这对 catchall 与 bounce 会产生问题,因为它们本身并不创建记录。

  1. 在邮件别名域中修改 catchall 的本地部分(需启用 developer-mode),例如将 catchall 改为 temp‑catchall,以便后续使用 catchall 作为其他别名的本地部分。
  2. 打开使用别名的应用(如 CRM),将 catchall 设为某销售团队别名的本地部分。
  3. 验证邮件会在 CRM 中创建记录,邮件内容会出现在聊天窗口,从而完成验证。
  4. 完成后记得恢复销售团队别名和邮件别名域中的 catchall 本地部分。

::::

:::: note ::: title 注意 :::

除了重定向,还可以使用 转发。使用转发时,邮件的转发地址会被视为发送者;而使用重定向时,原始发送者始终保持不变。 ::::

如前所述,推荐使用重定向来接收邮件。但也可以配置收件服务器。此方式需要为每个邮箱(包括 catchall、bounce 以及数据库的所有别名)在服务器上创建相应的收件服务器,以便抓取所有入站邮件。

:::: warning ::: title 警告 :::

Odoo 的 收件服务器 功能适用于共享收件箱(如 sales@yourcompany.comsupport@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 抓取,并在数据库中创建对应的项目任务。

:::

第三种方案是在 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),系统仍可能误将其视为完整别名并创建工单/线索。

添加该系统参数的步骤:

  1. 激活 developer mode
  2. 前往 设置 → 技术 → 系统参数,点击 新建
  3. 键填入 mail.catchall.domain.allowed
  4. 值填入允许的域名,使用逗号分隔;
  5. 保存(fa-cloud-upload),参数立即生效。

创建新别名时,可勾选 基于本地部分的入站检测。开启后,Odoo 只需匹配本地部分(即 “@” 前的部分)即可路由入站邮件;关闭后则需要完整的邮件地址匹配。