电子邮件身份验证对成功投递至关重要。本指南帮助你排查 Email Service 中常见的 SPF、DKIM 和 DMARC 问题。
域名上不允许存在多条 SPF 记录,否则会阻止 Email Service 正常工作。若域名有多条 SPF 记录:
-
登录 Cloudflare 仪表板,选择你的账户和域名,然后前往 DNS > Records。
Go to Records ↗ -
查找多条以
v=spf1开头的 TXT 记录。 -
删除不正确的 SPF 记录。
-
确保保留正确的 SPF 记录:
- 对于 Email Routing(根域名):
v=spf1 include:_spf.mx.cloudflare.net ~all - 对于 Email Sending(
cf-bounce子域名):v=spf1 include:_spf.mx.cloudflare.net ~all
- 对于 Email Routing(根域名):
若不确定应保留哪条 SPF 记录,可全部删除并让 Cloudflare 重新生成所需记录:
- 在 DNS > Records 中,删除受影响名称上所有以
v=spf1开头的 TXT 记录。 - 前往 Compute(计算) > Email Service(电子邮件服务),重新接入或重新启用受影响的服务。Cloudflare 会自动添加正确的 SPF 记录。
若邮件因 SPF 失败被拒收:
-
登录 Cloudflare 仪表板,选择你的账户和域名,然后前往 DNS > Records。
Go to Records ↗ -
为相应服务添加 TXT 记录:
- 对于 Email Routing(电子邮件路由):Name(名称):
@(根域名),Content(内容):v=spf1 include:_spf.mx.cloudflare.net ~all - 对于 Email Sending(电子邮件发送):Name(名称):
cf-bounce,Content(内容):v=spf1 include:_spf.mx.cloudflare.net ~all
- 对于 Email Routing(电子邮件路由):Name(名称):
-
若根域名上已有 SPF 记录,请修改它以包含
include:_spf.mx.cloudflare.net
常见的 SPF 记录语法问题:
- 缺少版本:SPF 记录必须以
v=spf1开头 - 多个 include:使用多个独立的
include:语句合并多个服务 - DNS 查询过多:SPF 记录总共限制为 10 次 DNS 查询
- all 机制不正确:使用
~all(SoftFail)或-all(Fail),不要使用+all
正确格式:
v=spf1 include:_spf.mx.cloudflare.net include:other-service.com ~all验证 SPF 记录是否配置正确:
dig TXT example.com +short | grep spf预期结果应包含:
"v=spf1 include:_spf.mx.cloudflare.net ~all"Email Service 会自动为你的域名生成 DKIM 密钥,但 DNS 记录必须正确配置。Email Sending 与 Email Routing 使用不同的 DKIM selector:
- 在 Cloudflare 仪表板 ↗ 中,前往 Compute(计算) > Email Service(电子邮件服务)。
- 选择你的域名。
- 在相应服务的 Settings(设置) 页面检查:
- Email Sending(电子邮件发送):前往 Email Sending(电子邮件发送) > Settings(设置) 查找发送 DKIM 记录(
cf-bounce._domainkey)。 - Email Routing(电子邮件路由):前往 Email Routing(电子邮件路由) > Settings(设置) 查找路由 DKIM 记录(
cf2024-1._domainkey)。
- Email Sending(电子邮件发送):前往 Email Sending(电子邮件发送) > Settings(设置) 查找发送 DKIM 记录(
- 复制 DKIM 记录详情。
- 前往 DNS > Records,使用正确的 selector 名称和公钥添加 DKIM TXT 记录。
若需要轮换 DKIM 密钥:
- 联系 Cloudflare 支持以请求密钥轮换。
- 获得新密钥后更新 DNS 记录。
- 在过渡期间监控邮件投递情况。
验证 DKIM 记录是否配置正确:
# Check Email Sending DKIM
dig TXT cf-bounce._domainkey.example.com +short
# Check Email Routing DKIM
dig TXT cf2024-1._domainkey.example.com +short任一预期结果示例:
"v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."若 DKIM 验证失败:
- 确认 DNS 中存在 DKIM 记录
- 检查记录名称是否与正确的 selector 匹配:
- Email Sending:
cf-bounce._domainkey.yourdomain.com - Email Routing:
cf2024-1._domainkey.yourdomain.com
- Email Sending:
- 确保 DNS 记录中没有多余空格或字符
- 等待 DNS 传播(最长 48 小时)
- 使用在线 DKIM 验证工具测试配置
虽然不是必需,但 DMARC 能显著改善邮件可投递性:
-
在 Cloudflare 仪表板中前往 DNS > Records。
Go to Records ↗ -
添加 TXT 记录:
- Name(名称):
_dmarc - Content(内容):
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
- Name(名称):
若严格的 DMARC 策略导致投递问题:
- 从宽松策略开始:
p=none(仅监控) - 持续数周监控 DMARC 报告
- 逐步提高严格程度:
p=quarantine,然后p=reject - 确保 SPF 与 DKIM 均正确对齐(alignment)
DMARC 要求 SPF 或 DKIM 对齐(alignment):
SPF 对齐:Mail From 标头中的域名必须与 From 标头中的域名对齐
DKIM 对齐:DKIM 签名域名必须与 From 标头中的域名对齐
Email Service 会自动确保正确对齐。
验证 DMARC 记录:
dig TXT _dmarc.example.com +short结果示例:
"v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; sp=quarantine"在使用 wrangler dev 进行本地开发时,若在附件字段中传入 ArrayBuffer 内容,会出现此错误。本地 email 绑定模拟器无法序列化 ArrayBuffer 值。
解决方案: 使用 npx wrangler deploy 部署 Worker,并在已部署版本上测试二进制附件(图片、PDF)。基于文本的附件字符串内容在本地开发中可正常使用。更多详情请参阅邮件发送的本地开发。
若邮件进入垃圾邮件文件夹:
- 检查身份验证:确保正确配置 SPF、DKIM 和 DMARC
- 域名声誉:新域名初期声誉可能较低
- 内容质量:避免垃圾邮件触发词和过度 HTML 格式
- 发件人声誉:监控退信率与投诉率
- 列表卫生:移除已退信和无效的电子邮件地址
要降低退信率:
- 验证电子邮件地址:使用实时验证
- 保持列表干净:立即移除硬退信
- 监控反馈循环:订阅 ISP 反馈循环
- 逐步预热:新域名从小流量开始
不同 ISP 有特定要求:
- Gmail:需要较强的域名声誉与身份验证
- Outlook/Hotmail:对内容和发件人声誉敏感
- Yahoo:严格执行 DMARC
- 企业邮箱:通常有严格的过滤规则
使用以下工具验证电子邮件身份验证设置:
- MX Toolbox:检查 SPF、DKIM 和 DMARC 记录
- DMARC Analyzer:验证 DMARC 策略与对齐
- Mail Tester:测试邮件可投递性与身份验证
- Google Admin Toolbox:Google 的电子邮件身份验证检查工具
若仍遇到身份验证问题:
- 查看 Email Service 分析 中的投递指标
- 查看退信消息中的具体错误代码
- 联系 Cloudflare Support ↗,并提供:
- 域名
- 示例邮件标头
- 具体错误消息
- SPF、DKIM 和 DMARC 记录配置