Resend 掌控发件域

字数2434阅读约 7 分钟访问--

注册 Resend

地址链接:https://resend.com/

  • Resend Free 计划限制:每天 100 封、每月 3000 封、每秒 2 封。你注册/找回的量级正常都够,但人工群发通知之前先确认一下,超出会直接被拒;如果会群发就升 Pro($20/月,5 万封)。
  • Daily Sending Schedule:Resend 控制台可以看到每日额度和已用,做到心里有数。

一、Resend 侧需要做的事

1. 创建 API Key(必做)

左侧菜单 → API Keys → Create API Key:

  • Name:yourproject(随意,便于你以后吊销)
  • Permission:选 Sending access 即可(不要给 Full access,最小权限原则)
  • Domain:限制为 example.com(不要 All domains)

创建后会显示一段 re_xxxxxxxx... 字符串,只显示一次,复制下来妥善保存。后台填的”密码”就是这个 Key。

2. 决定一个发件邮箱(必做)

Resend 不要求你真的”开通邮箱”,任何 [email protected] 都能直接当发件人。建议为不同业务用不同前缀,便于以后做日志和 DMARC 报告分类:

3. 加一条 DMARC 记录(强烈建议)

Resend 验证只检查 SPF + DKIM + Return-Path,不强制 DMARC,但没有 DMARC 时国内 QQ/163 偶尔会按”未充分验证”处理,加上之后送达率会肉眼可见地提升。

去 Cloudflare DNS 加一条 TXT:

  • Type: TXT
  • Name: _dmarc
  • Content:
v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; adkim=r; aspf=r

p=none 是”只观察不拦截”,跑两周看 rua 报告确认没误伤后再升级到 p=quarantine,最终 p=reject[email protected] 这个邮箱要能收信(如果还没有收件能力,先填一个能收的真实邮箱,比如你的 Gmail)。

4. (可选但推荐)在 Cloudflare 配 MX 来收 bounce/complaint

Resend 的 bounce/complaint 是通过它们的 webhook + 控制台来看的,所以你不需要为它单独配 MX。但 DMARC 的 rua 报告需要一个能真实收信的邮箱。如果你不想为这个域名搭收件能力,最省事的是:

5. (可选)配 Webhook,做 bounce/complaint 自动处理

Settings → Webhooks → Add Endpoint:

  • URL:例如 https://你的example域名/api/v1/webhook/resend
  • Events:勾选 email.bouncedemail.complainedemail.delivery_delayed

这样硬退信、用户标记垃圾邮件时你能拿到回调,把这些用户标为”勿发”避免影响整体信誉。example 当前没现成的 webhook 接收端,先跳过也无妨,等量大了再补。

DMARC 的跨域收件

先说一个关键概念(避坑)

DMARC 的 rua=mailto:xxx 收报告地址有个规则:如果你把它指向别的域名(比如 [email protected]),按 RFC 7489 那个域要主动”授权”接收,否则像 Google、Microsoft 这种严谨的接收方根本不会发报告给你。

具体表现是:你必须能在 gmail.com 加一条这样的 DNS 记录:

example.com._report._dmarc.gmail.com  TXT  "v=DMARC1"

gmail.com 不是你的域,你加不了,于是大量报告就丢了。

两种合法绕开的办法:

  • 方案 A:rua 还是写 [email protected](同域,不需要授权),然后用 Cloudflare Email Routing 把这个邮箱转发到 Gmail。推荐。
  • 方案 B:直接接入 DMARC 报告分析 SaaS(dmarcian / EasyDMARC / Postmark DMARC),它们会给你一个专属的 [email protected] 之类地址,并且对应平台已经做好授权。报告还能解析成可视化报表。

A、用 Cloudflare Email Routing 把 dmarc 邮件转发到 Gmail

Step 1:进入 Cloudflare → 选中 example.com → Email → Email Routing

在 Cloudflare Dashboard 顶部账户面包屑下拉里选 example.com,左侧菜单找到 Email → Email Routing(如果是新域名第一次用,会让你点 Get started 或 Enable Email Routing)。

Step 2:让 Cloudflare 自动加 MX / SPF 记录

点 Enable 后它会问你是否自动添加必要的 DNS 记录。这里有个细节要小心:

  • Cloudflare 会给你三条 MX 记录(route1/route2/route3.mx.cloudflare.net)。这些 MX 是给 example.com 收信用的,跟 Resend 完全不冲突,Resend 只要 SPF + DKIM 不需要 MX,所以一起用没问题。
  • Cloudflare 会想自动加一条 SPF:v=spf1 include:_spf.mx.cloudflare.net ~all。这条要小心——你已经有一条 Resend 的 SPF 了,不能重复存在两条 SPF。处理方式:

把现有 SPF 改成合并版(一条记录里 include 两个):

v=spf1 include:amazonses.com include:_spf.mx.cloudflare.net ~all

如果你不确定 Resend 让你加的 SPF 写的是 include: 什么(不同区域略有差异,比如东京区域是 amazonses.com,也有 include:_spf.resend.com 的写法),就照搬你 Resend 控制台 DNS 那一页给的那个 include 内容,跟 _spf.mx.cloudflare.net 一起合到同一条 TXT 即可。SPF 必须只有一条 v=spf1 TXT,多了会直接 permerror。

Step 3:在 Email Routing 里创建转发规则

进入 Email Routing → Routes:

  1. 先到 Destination addresses 把你的 Gmail 加为目的地:
    • 输入 [email protected] 点 Add
    • Cloudflare 会发一封验证邮件到你 Gmail,点链接确认(标记成 Verified 才能用)
  2. 再到 Custom addresses 创建路由:
    • Custom address:[email protected]
    • Action:Send to an email
    • Destination:选刚才验证好的 Gmail
    • 保存
  3. (可选但推荐)顺便再建一条:
    • [email protected] → 也转到 Gmail,或 Drop(不收任何回信)。注意 Resend 发件用的 [email protected] 不需要它能收信也照样能发,只是用户万一回信你不会丢失。
  4. (可选)建一个”通配规则”接住所有 *@example.com
    • 在 Catch-all address 设置成转发到 Gmail,或者设置 Drop
    • 这样以后新加邮箱不用一个个建路由

Step 4:DMARC 记录改成同域

回到 DNS → Records,找到(或新建)一条:

  • Type:TXT
  • Name:_dmarc(Cloudflare 会自动补成 _dmarc.example.com
  • Content:
v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; adkim=r; aspf=r

Proxy status 一定保持灰色(DNS only),TXT 记录本就不会被代理,Cloudflare 默认就是灰云,这里只是提醒一下。

Step 5:发一封测试邮件验证转发链路

最简单的方式:用任何邮箱(比如另一个 Gmail)直接给 [email protected] 发一封”hello”。几秒到一分钟内你的 Gmail 收件箱应该会出现这封信,发件人会显示原始发件人,并带 Cloudflare 的 via 头。

如果没收到:

  • 检查 Email Routing → Overview 顶部是否显示绿色”Enabled”
  • 看 Destination address 是不是 Verified 状态
  • 在 Email Routing → Activity 里能看到每封信的命中状态(accepted/forwarded/dropped)
  • Gmail 垃圾箱也翻一下

Step 6:等 24~72 小时,开始收到 DMARC 报告

DMARC 聚合报告(rua)由各大 ISP 每天打包发一次,所以不要立即指望有报告。一般 24~72 小时后你的 Gmail 会陆续收到来自 Google、Yahoo、Microsoft、Mail.ru、网易、QQ 等的报告,附件是 .zip.gz,里面是 XML。

Step 7:报告太难读?两个轻量解决方案

XML 直接看会想哭。三种处理方式按推荐度:

  1. 白嫖 SaaS 解析器(最省事):把 rua 同时写两个收件人——你自己的 + 一个免费报告分析平台的。例子:
v=DMARC1; p=none; rua=mailto:[email protected],mailto:你的专属地址@dmarc.postmarkapp.com; fo=1
  1. 这里 postmarkapp.com 是 Postmark 提供的 免费 DMARC Digest,注册后给你一个专属邮箱。它每周给你发可读的中文/英文摘要邮件,不用看 XML。dmarcian 和 EasyDMARC 也有免费档。
  2. 本地 dmarc-report-parser 工具:开源项目,自己跑解析。适合极客。
  3. 暂时不看也行:p=none 不影响投递,主要是观察。如果你只想”先合规起来”可以两周后再看。

Step 8:两周后逐步收紧策略

确认 SPF/DKIM 都过、没误伤后,把 _dmarc 这条 TXT 改成:

v=DMARC1; p=quarantine; pct=25; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; adkim=r; aspf=r

pct=25 表示只对 25% 的违规邮件应用 quarantine 策略,逐步加到 100,最终升到 p=reject。这一步不急,几个月内完成都行。

B:用 DMARC SaaS 不自己管转发(更省心)

如果你嫌方案 A 还要管 Email Routing,可以直接:

  1. 注册 Postmark DMARC(免费)或 EasyDMARC(免费档)。

  2. 它们会给你一个专属的 [email protected] 之类邮箱。

  3. DMARC 记录写成:

    v=DMARC1; p=none; rua=mailto:你的专属地址@dmarc.postmarkapp.com; fo=1

  4. 完事。这些平台会自动给你发可读摘要,不用配 Email Routing,也不用考虑跨域授权(它们后台已经处理好)。

缺点是:万一这个 SaaS 哪天关停或改收费,你要换平台。所以最稳的做法是 A + B 组合:rua 同时填两个,SaaS 看图表、自家邮箱当备份。

最终的”一键复制”配置

DMARC TXT 记录推荐这样写(A + B 组合,先注册一下 Postmark 拿专属邮箱再来填):

v=DMARC1; p=none; rua=mailto:[email protected],mailto:你的@dmarc.postmarkapp.com; ruf=mailto:[email protected]; fo=1; adkim=r; aspf=r

不想注册 SaaS 的极简版:

v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1

检查工具

部署完成后用这几个免费在线工具验证:


操作顺序

  1. Cloudflare → Email → Email Routing → Enable,把 Gmail 加为 Destination 并验证
  2. 创建路由 [email protected] → 转发到 Gmail
  3. 把 SPF 合并成一条(Resend include + Cloudflare include)
  4. _dmarc TXT 改成上面的同域版本
  5. 发一封测试邮件验证转发通了
  6. 24~72 小时后开始收到报告,两周后再考虑升级 p=quarantine