教程 · 12 分钟阅读

每位自托管邮件发件人都需要的 7 条 DNS 记录

作者 AcelleMail Team May 8, 2026 12 分钟阅读
tutorial deliverability

可复制粘贴的 DNS 参考:SPF、DKIM、DMARC、MX、BIMI、MTA-STS,以及一条追踪域 CNAME。Cloudflare 与 Route53 的具体语法、发布顺序,以及每条记录到底干什么。

§1

按发布顺序的 7 条记录

邮件比较特殊:一套完整的发件配置需要 7 条彼此不同的 DNS 记录,分布在三到四种记录类型上。少一条,线路上邮件还能走,但邮箱服务商会悄悄把您降级到垃圾箱。把 7 条全发布完,您就跨过了 /guide/email-deliverability 所说的"Google 全部要求"门槛。

顺序很重要:SPF 与 DKIM 必须先到位,然后 DMARC 才能开始强制对齐,否则合法邮件会被隔离。各厂商通用的另一条规则是"等 DNS 传播"——发布一条记录后,至少给 30 分钟再让邮箱服务商重新检查。

#记录用途规范
1MX本域名入站邮件去哪里RFC 1035 §3.3.9
2SPF(TXT)授权发送 IP 列表RFC 7208
3DKIM(TXT)签名公钥RFC 6376
4DMARC(TXT)认证失败时的策略 + 报告RFC 7489
5追踪(CNAME)点击与打开追踪器挂在您的域下RFC 1035
6MTA-STS强制入站邮件走 TLSRFC 8461
7BIMI(TXT)收件箱邮件旁的品牌 LOGOdraft-blank-ietf-bimi

§2

1)MX — 即使您几乎不收邮件

MX 记录(RFC 1035 §3.3.9)告诉外界把本域名的入站邮件投到哪里。即便您的发件域是"只发不收"(您不在上面读回信),MX 记录仍然必须有——很多邮箱服务商会因为域没有 MX 而降级其信誉,理由是合法发件人应该接受回信。指向任何可达的邮件服务器的单条记录就够了,哪怕这台服务器只负责把信投到 postmaster 邮箱。

; Cloudflare DNS UI
Type: MX  Name: @  Mail server: mail.yourcompany.com  Priority: 10
# Route53 JSON
{ "Type": "MX", "Name": "yourcompany.com.", "TTL": 3600,
  "ResourceRecords": [{ "Value": "10 mail.yourcompany.com." }] }

§3

2)SPF — 一条 TXT,盯紧查询次数

SPF(RFC 7208) 是一条 TXT 记录,列出哪些 IP 被授权代表本域发送。铁律:总递归 DNS 查询次数必须保持在 10 次以下(RFC 7208 §4.6.4)。每个 include: 占 1 次;嵌套的 include 累加。ip4: / ip6: 机制不耗查询次数,所以如果查询次数在爬升,把老的 include 合并成显式 IP 段。

# For Amazon SES (recommended pairing)
Type: TXT  Name: @  Value: v=spf1 include:amazonses.com -all
# For self-hosted Postal/Postfix on a single IP
Type: TXT  Name: @  Value: v=spf1 ip4:1.2.3.4 -all

确认所有合法发送源都已覆盖后,以 -all(硬失败)结尾。如果还不确定,先用 ~all(软失败),等 DMARC 报告两周干净后再收紧到 -all

§4

3)DKIM — SES 走厂商托管,Postal 走自定义

DKIM(RFC 6376) 把签名密钥对的公钥发布为 {selector}._domainkey.{domain} 处的 TXT 记录。"selector"是您自己选的标识符——厂商专用或任意命名。对 SES,AWS 给您 3 条 CNAME,解析到 AWS 托管的 TXT 记录(这样 AWS 可以轮换密钥而无需您动 DNS):

# SES Easy DKIM — 3 CNAMEs (AWS rotates keys via these)
Type: CNAME  Name: token1._domainkey  Value: token1.dkim.amazonses.com
Type: CNAME  Name: token2._domainkey  Value: token2.dkim.amazonses.com
Type: CNAME  Name: token3._domainkey  Value: token3.dkim.amazonses.com

对自托管 Postal 或 Postfix+OpenDKIM,您在本地生成密钥对、配置 MTA 签名,然后把公钥发布为 TXT:

# Generate via openssl, then publish the .txt half
Type: TXT  Name: s1._domainkey  Value: v=DKIM1; k=rsa; p=MIGfMA0G…

无论走哪条路,在宣布 DKIM 完成之前都要用 dig TXT {selector}._domainkey.{domain} 验证。

§5

4)DMARC — 从 p=none 起,以 p=reject 结

DMARC(RFC 7489) 发布在 _dmarc.{domain}。跳过 p=none 这段爬升,是最常见的错误——在您还没完全摸清域名上的所有邮件流时直接跳到 p=reject,会悄无声息地拒收合法邮件(转发器、邮件列表、第三方 CRM 发件人)。

# Stage 1 (weeks 1-3) — monitor only
Type: TXT  Name: _dmarc  Value: v=DMARC1; p=none; rua=mailto:dmarc@yourcompany.com; pct=100; adkim=r; aspf=r
# Stage 2 (weeks 4-5) — partial enforcement
Type: TXT  Name: _dmarc  Value: v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc@yourcompany.com
# Stage 3 (week 6+) — full enforcement
Type: TXT  Name: _dmarc  Value: v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@yourcompany.com

各阶段之间,阅读落到您 rua 邮箱里的日聚合 XML 报告。Postmark 的 DMARC 分析器或自托管 Parsedmarc 这类工具能可视化它们;纯 XML 信息密集但可读。

§6

5)追踪域 CNAME — 保留信任

默认情况下,AcelleMail 的开信像素与点击追踪 URL 来自您安装的主域。邮箱服务商喜欢在 From、点击链接、退订 URL 上看到一致的根域——全在同一个注册域名下。从品牌角度看,指向 tracker.yourcompany.com 的链接也比指向 links.acellemail.com 的链接更具信任信号。

# Tracking subdomain CNAME → AcelleMail install
Type: CNAME  Name: track  Value: app.yourcompany.com

# Then in AcelleMail admin: Settings → Tracking domain
# Set: track.yourcompany.com

CNAME 解析生效后,AcelleMail 会把所有外发邮件中的点击追踪 URL 改写为使用它。退订链接的域也走相同规则(共用同一条 CNAME)。

§7

6)MTA-STS — 强制入站 TLS

MTA-STS(RFC 8461) 告诉其他发件人"投递到我的 MX 时永远要求 TLS"。没有它,链路上的攻击者可以把支持 TLS 的握手降级到明文。有它,发送端在无法建立 TLS 时会拒绝投递。实现就是一条指向托管策略文件的 TXT 记录:

# DNS record
Type: TXT  Name: _mta-sts  Value: v=STSv1; id=20260508T120000;

# Hosted policy file at https://mta-sts.yourcompany.com/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: mail.yourcompany.com
max_age: 604800

策略先以 mode: testing 跑一周,再切到 mode: enforce。很多批量发件人跳过 MTA-STS——部署它是一次免费的信任信号。

§8

7)BIMI — 收件箱邮件旁的品牌 LOGO

BIMI(Brand Indicators for Message Identification)是 7 条里最年轻、也是唯一尚未成为正式 RFC 的一项,但已被 Gmail、Yahoo、Apple Mail、Fastmail 以及其他生产环境客户端支持。机制:发布一条指向 SVG LOGO(可选附带 Verified Mark Certificate,VMC)的 TXT 记录,支持的客户端就会在收件列表里、您的邮件旁显示该 LOGO。

# Without VMC (free, lower coverage)
Type: TXT  Name: default._bimi  Value: v=BIMI1; l=https://yourcompany.com/bimi-logo.svg

# With VMC (paid, full Gmail coverage)
Type: TXT  Name: default._bimi  Value: v=BIMI1; l=https://yourcompany.com/bimi-logo.svg; a=https://yourcompany.com/bimi-cert.pem

前置条件:DMARC 策略至少 p=quarantine(p=none 下 BIMI 不被认可),且 SVG 必须是 SVG Tiny Portable / Secure(SVG-PS)。接受度有差异:Gmail 需要付费 VMC($1,500/年,通过 DigiCert / Entrust)才能在收件列表中完全显示;Yahoo 与 Apple 不需 VMC 也接受。已发表案例中,打开率提升 5-20% 的报告很常见。

§9

30 秒内验证整条链

发布完之后,给自己发一封测试邮件,检查邮件头。Gmail 网页版:打开邮件,点三点菜单,"显示原始邮件"。查看:

Authentication-Results: mx.google.com;
  dkim=pass header.i=@yourcompany.com header.s=token1
  spf=pass smtp.mailfrom=yourcompany.com
  dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=yourcompany.com

三个 pass 判定是及格线。任何比这更差——failsoftfailneutral——都说明某条记录错了,或 DNS 还没传播,或邮件正文在传输途中被修改过(罕见)。判定含义模糊时,对照规范 Authentication-Results 邮件头(RFC 8601) 交叉核对。

在您自己的基础设施上运行。

AcelleMail 是一次性授权的自托管邮件平台。完整源代码,不按订阅者计费。

试用在线演示