适用:用自己域名(如 yourdomain.com)的任意前缀邮箱收发信,零付费拼一套。
组件分工:Cloudflare 负责收信转发、Gmail 网页负责发信界面、Resend 负责 SMTP 中继。Cloudflare 本身不能发信。

🔒 隐私提示:文中 yourdomain.com / you@gmail.com / you@139.com / xxx@yourdomain.com 均为占位符,请替换为你自己的域名与邮箱。


零、官方入口(小白直通车)

动手前先把这几个官网收藏好,下文所有”后台 / 设置”都从这里进:

平台用途直达链接
Cloudflare收信转发 + DNS 托管官网 | Dashboard
Gmail发信界面 + 收件箱网页版 | 发信身份设置
ResendSMTP 发信中继官网 | 登录/Dashboard
(可选)139 邮箱备援 + 短信通知139 邮箱

下文提到的 Cloudflare / Gmail / Resend 均以上表入口为准,避免搜到仿冒站。

一、架构总览

1
2
3
4
5
6
7
8
9
10
11
12
13
外部发信人 → 任意前缀@yourdomain.com
│ MX: Cloudflare(routeN.mx.cloudflare.net)
▼
Cloudflare Email Routing(免费)
└─ catch-all 全捕获 → 主收件箱 you@gmail.com
│ Gmail「转发」(可选)
▼
备援箱 you@139.com(短信通知)

你回信:Gmail「发件人」选 xxx@yourdomain.com
│ Gmail 自定义 SMTP = Resend
▼
Resend / Amazon SES 中继 → 对方收件箱

核心认知:Cloudflare 只做收信转发,发信必须走 Gmail + Resend SMTP。


二、前置条件

  • 域名 NS 在 Cloudflare(Email Routing 依赖其自动注入 MX / TXT)。
  • 一个 Gmail 账号(免费版即可,发信身份上限 99 个)。
  • 一个 Resend 账号(免费:100 封/天、3000 封/月、1 域名)作 SMTP 中继。
  • (可选)一个备援邮箱如 139,用于短信到达通知。

三、步骤一:Cloudflare Email Routing(收信)

  1. Cloudflare Dashboard → 域名 → Email Routing → 启用,自动注入 MX 与 SPF/DKIM TXT。
  2. 目标地址(Destination Addresses):添加并验证主收件箱 you@gmail.com(CF 发验证信,点链接激活)。
    • 目标地址是”地址簿白名单”,只决定哪些邮箱允许被转发,不直接收信。
  3. 路由规则(Routing Rules):编辑 Catch-all(全捕获) 规则,动作”转发到”选 you@gmail.com。
    • 任意未单独定义的 前缀@yourdomain.com 都会进 Gmail。

⚠️ 最常踩的坑(务必分清)

  • 目标地址 ≠ 路由规则:加进”目标地址”≠能收信;必须在”路由规则”里把地址设为转发目标才会投递。
  • 单条规则原生只能填一个转发目标;且同 pattern 建多条规则时,只有列表第一条生效。所以”在一条规则里加两个地址”或”建第二条 catch-all”都不能实现双收(见第六节)。

四、步骤二:Resend(发信中继)

  1. Resend Dashboard 添加域名 yourdomain.com → 按提示在 Cloudflare DNS 加:
    • SPF:在现有 SPF TXT 末尾补 include:amazonses.com
      (完整示例 v=spf1 include:_spf.mx.cloudflare.net include:amazonses.com ~all)
      • Resend 底层走 Amazon SES 中继发信,所以 SPF 必须包含 include:amazonses.com,否则对方判 spoofing。
    • DKIM:添加 resend._domainkey.yourdomain.com 的 TXT(Resend 给的值)
    • DMARC:v=DMARC1; p=none;(监控期用 none,稳定后可改 quarantine/reject)
  2. 拿到 API Key(re_ 开头)——这就是 Gmail 里的 SMTP 密码。

五、步骤三:Gmail 配置发信身份

Gmail 设置 → 账户和导入 → 「用这个地址发邮件」→ 添加其他电子邮件地址:

  • 名称自拟,电子邮件地址填 xxx@yourdomain.com(每个前缀独立加一次)
  • 取消”视为别名”
  • 选「通过你自己的 SMTP 服务器发送」:
    • SMTP 服务器 smtp.resend.com,端口 587(TLS) 或 465(SSL)
    • 用户名 resend,密码 = Resend API Key
  • Gmail 发验证信到该域名地址 → 经 catch-all 进 Gmail(或备援箱)取验证码 → 回填即完成
  • 之后写邮件时「发件人」下拉选对应域名地址即可
  • 发信身份上限 99 个(Google 官方)

为什么不用 QQ / 139 网页发信:它们强制要求 POP/IMAP,且 139 网页无外部域名发信身份、QQ 自定义 SMTP 不稳定。Gmail 只需验证信、最稳。


六、步骤四:双收(可选,保留短信 / 备援)

CF 单规则只支持一个目标,双收只有两条真实路径:

方案 A(推荐·最简·不动 Cloudflare)
Gmail 设置 → 转发和 POP/IMAP → 添加转发地址 you@139.com → 验证后选「保留 Gmail 的副本并转发」。Gmail 收到域名信后自动抄一份给 139,短信通知恢复。CF 规则保持 Gmail-only 即可。

方案 B(CF 原生双发·正统)
建 Email Worker 扇出,catch-all 规则动作改”发到 Worker”,脚本把信 message.forward 给 Gmail + 备援箱两个已验证地址(免费额度对个人足够,但需改 CF 规则动作)。

1
2
3
4
5
6
export default {
async email(message, env, ctx) {
const forwardList = ["you@gmail.com", "you@139.com"];
for (const email of forwardList) await message.forward(email);
}
}

七、验证清单

  • 收信:从别的邮箱发到 test@yourdomain.com,应在 Gmail 收到。
  • 发信 + 鉴权:Gmail 以 test@yourdomain.com 回信,对方收到且 From 为该域名。
  • SPF/DKIM 显式确认:Gmail 打开该信 → 右上角 ⋮ → 显示原文 → 看 Authentication-Results: spf=pass, dkim=pass, dmarc=pass。
  • 双收(如启用):发一封,确认 Gmail 与 139 都到;139 触发短信。

八、限制汇总

维度上限 / 说明
Cloudflare 收信入站单封 ≤ 25 MiB;每域名路由规则 200 条;每账号验证目的地 200 个;地址前缀无限(catch-all);仅转发不能发
Gmail 发信身份Send mail as ≤ 99 个;免费日发约 500 收件人
Resend 免费100 封/天、3000 封/月、1 域名;单封 ≤ 40 MB(Base64 后)
Gmail 网页撰写附件≤ 25 MB(更大走 Google 网盘链接)
实际可收附件受 CF 25 MiB 瓶颈,建议 ≤ 17 MB 最稳

📌 本指南为可复用模板:替换占位符、按步骤操作即可。任何环节卡住,优先回到「目标地址 ≠ 路由规则」「单规则单目标」这两条铁律排查。