用 Cloudflare + Resend 搭建自己的私人 Email 系统

Blog 版:在 F-SJ Blog 阅读

为什么想做自己的 Email

有了自己的域名之后,除了可以绑定网站,另一个很自然的想法就是:能不能也拥有自己的 Email?

普通邮箱通常是固定服务商域名,比如某个公共邮箱平台。它当然能用,但也有几个问题:好名字经常已经被注册;邮箱名称很难保持统一;个人展示、项目联系、账号注册和长期沉淀混在一起,也不够清晰。

自定义域名 Email 解决的正是这个问题。只要拥有域名,就可以围绕这个域名规划自己的邮箱地址,例如:

1
2
3
<name>@email.example.com
<project>@email.example.com
<service>@email.example.com

这让邮箱从“抢一个别人平台里的名字”,变成“在自己的域名下设计一套地址体系”。名称更自由,也更个性和职业化,不用再烦恼常用用户名被别人注册。

对个人项目来说,它也是 Blog 的一个很合适的配件:Blog 用来展示内容,私人 Email 用来承接联系、通知、评论提醒和账号体系。

为什么它适合个人低成本项目

这个项目最有价值的地方,是把“自定义名称 + 多地址管理 + 私有接收发送服务”组合到了一起。

1. 自定义名称

邮箱地址不再依赖公共邮箱平台剩下的用户名,而是依赖自己的域名。

这意味着可以按用途设计地址:

  • 个人主邮箱。
  • Blog 联系邮箱。
  • GitHub 或开源项目邮箱。
  • 注册服务专用邮箱。
  • 临时测试邮箱。

这样看起来更统一,也更职业化。

2. 多地址管理

有了域名后,可以围绕同一个域名管理多个地址或别名。它适合做多账号、多项目、多用途隔离。

例如,一个地址用于公开联系,一个地址用于系统通知,一个地址用于测试注册。不同来源的邮件可以被分开处理,后续也更容易做过滤、转发和统计。

这里的“多地址”不等于可以无限滥发邮件。实际数量、发送频率和平台策略仍受 Cloudflare、Resend 等服务规则限制。但对个人学习、个人 Blog 和轻量项目来说,这套方式已经足够灵活。

3. 私有接收和发送服务

传统邮箱是完整托管在邮箱服务商中。这个项目的思路是:用 Cloudflare 接收邮件,用自己的 Worker 和 Web Inbox 管理邮件,再用 Resend 处理对外发送。

这样既不用自己维护完整邮件服务器,也可以拥有更强的自定义能力。

最终选型

当前私人 Email 系统使用的核心组合是:

  • Cloudflare DNS:管理域名和邮件相关 DNS 记录。
  • Cloudflare Email Routing:接收发往自定义域名的邮件。
  • Cloudflare Workers:处理邮件 API、收件、转发和 Blog 邮件发送接口。
  • Cloudflare Pages:部署 Web Inbox 管理界面。
  • Resend:负责从自定义域名发送邮件。
  • GitHub:保存源码、记录修改历史,并配合部署流程。

参考开源项目:

当前这个系统不是从零写完整邮件服务器,而是在 Cloudflare 生态和开源项目基础上做适配、部署和定制。

Cloudflare Email Routing 是什么

Cloudflare Email Routing 是 Cloudflare 提供的邮件路由能力。它可以接收发往自定义域名的邮件,并把邮件转发到指定目标,或者交给 Cloudflare Worker 继续处理。

文档:

在这个项目中,它主要负责“收信入口”:

  1. 外部有人发邮件到自定义域名地址。
  2. Cloudflare 根据 DNS 和 Email Routing 配置接收邮件。
  3. 邮件被转发或交给 Worker 处理。
  4. Worker 保存、解析或展示邮件。

这样就不需要自己搭建传统 SMTP 收信服务器。

Cloudflare Workers 是什么

Cloudflare Workers 是运行在 Cloudflare 边缘网络上的轻量服务。它可以处理 HTTP 请求,也可以处理部分 Cloudflare 事件。

文档:

在私人 Email 项目中,Worker 主要承担后端逻辑:

  • 接收邮件事件。
  • 解析邮件内容。
  • 提供邮件列表、详情、删除等 API。
  • 管理地址、用户、设置和转发规则。
  • 给 Blog 提供独立邮件发送接口。
  • 调用 Resend 完成对外发信。

它的好处是不用维护服务器。代码部署到 Cloudflare 后,由 Cloudflare 负责运行和扩缩容。

Cloudflare Pages 是什么,在这个项目里做什么

Cloudflare Pages 负责部署前端页面。

文档:

在 Blog 项目中,Pages 托管 Blog;在私人 Email 项目中,Pages 托管 Web Inbox,也就是浏览器里的邮件管理界面。

这个界面可以用来:

  • 登录邮箱管理后台。
  • 查看收到的邮件。
  • 管理地址。
  • 处理发送、转发、过滤等功能。

这样整个系统就不只是“收到邮件后转发”,而是有了一个自己的私有收件箱。

Resend 是什么

Resend 是面向开发者的邮件发送服务。它提供 API,可以让应用通过 HTTP 请求发送邮件。

官网和文档:

为什么需要 Resend?因为收信和发信是两件事。

Cloudflare Email Routing 更适合处理收信和路由;对外发信则需要可靠的发送服务,包括 DKIM、SPF、退信处理和发送信誉。Resend 正好适合承担这个角色。

在这个项目中,Resend 负责“发信出口”:

  1. Worker 收到发信请求。
  2. Worker 校验权限和参数。
  3. Worker 调用 Resend API。
  4. Resend 使用自定义域名完成邮件发送。

这样 Blog 评论通知、站点联系、系统提醒都可以使用自己的域名邮箱发出。

DNS 是什么,为什么 Email 特别依赖 DNS

DNS 是域名系统。网站绑定域名要靠 DNS,Email 更依赖 DNS。

网页通常只需要把域名指向网站服务;Email 还需要告诉外界:这个域名的邮件由谁接收、谁有资格发送、签名如何验证。

常见邮件 DNS 记录包括:

  • MX:说明这个域名的邮件由哪台邮件服务接收。
  • SPF:说明哪些服务可以代表这个域名发送邮件。
  • DKIM:给邮件加签名,证明邮件确实来自授权服务。
  • CNAME:把一个子域名指向另一个服务地址。

这个项目里大致分成两组 DNS:

1. 收信 DNS

收信 DNS 让 Cloudflare 可以接收发往自定义域名的邮件。

概念上包括:

1
2
email.example.com MX -> Cloudflare Email Routing
email.example.com TXT -> SPF for Cloudflare Email Routing

2. 发信 DNS

发信 DNS 让 Resend 可以代表自定义域名发邮件。

概念上包括:

1
2
3
send.email.example.com MX -> Resend / SES feedback service
send.email.example.com TXT -> SPF for sending service
resend._domainkey.email.example.com TXT -> DKIM public key

这些记录配置完成后,外部邮件服务更容易判断:这封邮件是被域名授权发送的,而不是伪造的。

域名和地址规划

当前项目的思路是:把 Blog 和 Email 拆成不同子域名,各自职责清晰。

  • Blog:blog.example.com
  • Inbox:inbox.example.com
  • Email 域:email.example.com

实际使用时,只需要把 example.com 换成自己的域名。

这种拆法的好处是:

  1. Blog 是公开内容入口。
  2. Inbox 是私人邮箱管理入口。
  3. Email 域专门用于邮件地址。
  4. 后续如果增加更多服务,不会互相挤占命名空间。

搭建流程概览

整个私人 Email 项目可以拆成几个阶段。

第一步:准备域名

先拥有一个可以托管到 Cloudflare 的域名。

域名是整个系统的前提。没有域名,就无法真正拥有自定义后缀邮箱。

第二步:接入 Cloudflare DNS

把域名交给 Cloudflare 管理 DNS。这样后续 Pages、Workers、Email Routing、Resend 验证都可以在同一个地方配置。

第三步:部署收件系统

部署 Cloudflare Worker 和 Web Inbox。

Worker 负责后端 API 和邮件处理;Pages 负责网页界面。

第四步:配置 Cloudflare Email Routing

在 Cloudflare 中启用 Email Routing,并为邮件子域名配置 MX / SPF 等记录。

配置完成后,Cloudflare 就可以接收发往自定义域名的邮件。

第五步:配置 Resend 发信域名

在 Resend 中添加发信域名,并根据 Resend 提供的 DNS 要求添加 SPF、DKIM、MX 等记录。

验证通过后,就可以使用这个域名对外发信。

第六步:打通 Worker 和 Resend

Worker 保存 Resend 调用凭据作为环境变量。发信时由 Worker 调用 Resend API。

公开文档中只记录组件关系和用途,不记录任何真实凭据。

第七步:连接 Blog

Blog 评论通知、订阅通知或联系表单不直接调用 Resend,而是调用自己的邮件 Worker 接口。

这样 Blog 只知道“向自己的邮件服务发请求”,真正的发信实现留在 Email 项目里。以后如果更换发信服务,也只需要改 Email 项目。

我们增加的自定义能力

在开源项目和 Cloudflare 基础能力之上,当前系统做了这些定制:

  1. 使用自己的域名规划邮件地址。
  2. 部署独立 Web Inbox 作为私人收件箱。
  3. 使用 Cloudflare Worker 管理邮件 API。
  4. 使用 Resend 作为发信出口。
  5. 给 Blog 提供专用邮件发送接口。
  6. 让 Blog 评论、通知、联系能力统一走自己的 Email 服务。
  7. 把收信和发信都纳入自己的域名体系。

这种设计让 Email 成为 Blog 平台的基础配件,而不是临时外挂。

它适合什么场景

这套私人 Email 系统适合:

  • 个人 Blog 联系邮箱。
  • GitHub / 开源项目联系地址。
  • 多账号注册隔离。
  • 个人项目通知发送。
  • 评论、订阅、联系表单邮件。
  • 学习 Cloudflare DNS、Workers、Pages、Email Routing 和 Resend。

它不适合一开始就承担大规模商业邮件营销,也不应该用来绕过平台限制批量发信。免费额度和平台策略适合个人学习、小型项目和低频真实邮件场景。

这次搭建的收获

有了域名之后,自定义 Email 是一个非常合适的配件。

Blog 解决“内容展示和沉淀”的问题;Email 解决“联系、通知和身份”的问题。两者结合后,一个个人云端平台就更完整了。

它的价值不只是拥有一个好看的邮箱地址,而是把域名、DNS、收信、发信、前端页面、边缘函数和 API 串成了一个真实系统。

以前自己搭邮件服务器门槛很高:要处理 SMTP、反垃圾、证书、IP 信誉、运维和安全。现在借助 Cloudflare 和 Resend,可以不从零维护邮件服务器,也能拥有足够个性化和可控的私人 Email 服务。

对个人开发者来说,这确实是一个很适合“低成本搭建个人基础设施”的方案:

  • 自定义名称,解决邮箱名字被占用的问题。
  • 多地址规划,适合多账号和多项目管理。
  • 私有 Inbox,保留自己的管理入口。
  • 自定义域名发信,让对外沟通更统一。
  • 和 Blog 打通,形成个人平台闭环。

Cloudflare 相关扩展:私人 Email 的 DNS、收信、Worker、Pages 和安全能力都依赖 Cloudflare,可以看 Cloudflare:个人云端平台的低成本基础设施

相关链接

参考开源项目:

官方文档: