在 Odoo 中配置 DNS 记录发送邮件:SPF、DKIM 与 DMARC 完全指南
配置 DNS 记录以在 Odoo 中发送邮件
本篇文档介绍了用于证明邮件发送者合法性的三种互补认证协议(SPF、DKIM 与 DMARC)。未遵循这些协议会大幅降低邮件到达收件箱的概率。
Odoo Online 与 Odoo.sh 使用 默认 Odoo 子域名地址(如 @company-name.odoo.com)的数据库,已预先配置为 发送符合 SPF、DKIM 与 DMARC 协议的认证邮件。
如果改用 自定义域名,则 正确配置 SPF 与 DKIM 记录 至关重要,否则邮件可能被标记为垃圾邮件或根本无法送达。
若 使用默认 Odoo 邮件服务器从自定义域名发送邮件(
::: note 注意
不同的邮件服务提供商对入站邮件的规则各不相同。即使通过了 SPF 与 DKIM 检查,邮件仍可能被判为垃圾邮件。
:::
SPF(发件人策略框架)
发件人策略框架(SPF)协议允许域名所有者指定哪些服务器被授权从该域发送邮件。当服务器收到入站邮件时,会检查发送服务器的 IP 是否在发件人 SPF(Sender Policy Framework) 记录所列的允许列表中。
在 Odoo 中,SPF 检查针对别名地址(Alias)进行,该地址可在数据库的 常规设置 → 别名域(Alias Domain) 中设置。若使用自定义域作为别名域,则必须确保该域符合 SPF 要求。
SPF 策略通过 TXT 记录设置。创建或修改该记录的方式取决于托管该域 DNS 区域的服务商。
如果域名尚未拥有 SPF 记录,请使用以下内容创建:
v=spf1 include:_spf.odoo.com ~all如果域名 已经存在 SPF 记录,则需要在原记录上追加,不要新建记录,因为每个域只能有一条 SPF 记录。
::: example
原 TXT 记录为 v=spf1 include:_spf.google.com ~all,应修改为 v=spf1 include:_spf.odoo.com include:_spf.google.com ~all :::
可使用 MXToolbox SPF Record Check 等工具检查 SPF 记录。创建或修改 SPF 记录的具体操作请参考下面列出的 常见 DNS 提供商 文档。
DKIM(DomainKeys Identified Mail)
DomainKeys Identified Mail(DKIM)通过数字签名对邮件进行身份验证。
在发送邮件时,Odoo 邮件服务器会在邮件头中加入唯一的 DKIM 签名。收件服务器使用域名对应的 DKIM 记录进行解密,若签名与记录中的密钥匹配,则证明邮件未被篡改且来源可信。
使用 Odoo 邮件服务器从自定义域发送邮件时,必须启用 DKIM。
为域添加 CNAME 记录
要启用 DKIM,需要在域名的 DNS 区域添加一条 CNAME 记录:
odoo._domainkey IN CNAME odoo._domainkey.odoo.com.如果域名为 company-name.com,请确保 CNAME 记录的键(Key)为 odoo._domainkey.company-name.com,值(Value)为 odoo._domainkey.odoo.com.。以下示例展示了键/值的差异(斜体部分为占位符):
| Key | Value |
|---|---|
odoo._domainkey | odoo._domainkey.odoo.com. |
odoo._domainkey.<dbname>.odoo.com. | 同上( |
示例 CNAME 记录
在多数 DNS 平台上,DNS 提供商会默认添加自定义域(例如 company-name.com),此时键的写法会有所不同,但值保持不变:
| Key | Value |
|---|---|
odoo._domainkey.company-name.com | odoo._domainkey.odoo.com. |
odoo._domainkey.<dbname>.odoo.com. | 同上( |
::: note 注意
如果 DNS 提供商未默认添加自定义域,请手动将其写入键名中。
:::
为子域添加 CNAME 记录
若存在子域(如 marketing.company-name.com),同样需要为其添加 CNAME 记录:
| Key | Value |
|---|---|
odoo._domainkey.marketing | odoo._domainkey.odoo.com. |
odoo._domainkey.marketing.company-name.com | odoo._domainkey.odoo.com. |
odoo._domainkey.<dbname>.odoo.com. | 同上( |
示例 CNAME 记录(带子域)
查看 DNS 提供商文档
创建或修改 CNAME 记录的具体操作同样取决于域名 DNS 区域的托管服务商。下面列出了 常见 DNS 提供商 及其文档链接。
使用 MXToolbox DKIM Record Lookup 检查 DKIM 记录是否有效。查询时输入 example.com:odoo(其中 odoo 为选择器),对应的自定义域为 example.com。
DMARC(基于域的消息认证、报告与一致性)
DMARC 记录是一种统一 SPF 与 DKIM 的协议。域名的 DMARC 记录中包含的指令会告诉收件服务器在邮件未通过 SPF 和/或 DKIM 检查时应如何处理。
::: note 注意
本文旨在帮助读者了解 DMARC 对邮件投递的影响,而非提供具体的 DMARC 记录编写步骤。详情请参考 DMARC.org。
:::
DMARC 有三种策略:
p=nonep=quarantinep=reject
p=quarantine 与 p=reject 会指示收件服务器在 SPF 或 DKIM 检查失败时将邮件隔离或直接拒收。
::: note 注意
要使 DMARC 通过,必须先通过 DKIM 或 SPF 检查,并且域名保持一致。若使用 Odoo Online,发送域的 DKIM 配置是必需的。
:::
通过 DMARC 通常意味着邮件能够成功送达。但仍需注意,垃圾邮件过滤器等其他因素仍可能导致邮件被拒收或隔离。
p=none 用于让域名所有者接收关于其域被使用情况的报告,对投递不产生直接影响。
::: example _dmarc IN TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com"
表示聚合报告将发送至 postmaster@example.com。
:::
常见 DNS 提供商的 SPF、DKIM 与 DMARC 文档
要完整测试配置,可使用 Mail-Tester 工具,它会在一封发送的邮件中提供内容与配置的全方位概览。Mail-Tester 也可用于为其他不常见的提供商配置记录。
::: seealso