👇 下方是排版效果 · 点右侧 复制 直接粘到公众号

KAIRO · 实测教程

如果你有自己的域名

怎么搭一个私人临时邮箱?


Kairo 的 AI 拾光

如果你手里有一个自己的域名,除了拿来做网站,还可以给自己搭一个私人临时邮箱。

搭好以后,你可以随手创建这样的地址:

test001@mailbox.你的域名

project-a@mailbox.你的域名

别人发来的邮件不会进入公共临时邮箱网站,而是保存在你自己的 Cloudflare 账号里。你可以在私人页面查看,也可以随时换一个新的地址。

我已经把这套东西实际跑通了。今天这篇不讲别的,只讲它是怎么搭起来的。

先说明边界:它主要用于接收网站测试邮件,不是 Gmail 的替代品,也不适合保存重要的长期邮件。

小K把域名接到私人收件箱

01

PART


开始前,需要准备什么

不需要单独购买服务器,但需要三样东西:

1. 一个自己的域名;

2. 域名已经托管到 Cloudflare;

3. 一个 Cloudflare 账号。

邮箱程序使用的是开源项目 dreamhunter2333/cloudflare_temp_email。项目采用 MIT License,原作者和贡献者的版权需要保留。

整套邮箱的工作方式是:

邮件发到你的域名

Cloudflare 接收

Worker 处理邮件

D1 保存邮件

你在私人页面查看

域名邮件进入私人收件箱的流程

第一次看到 Worker 和 D1 不用紧张。你可以把 Worker 理解成收件员,D1 就是存放邮件的柜子。

02

PART


第一步:单独准备一个邮箱子域名

不要直接拿正在使用的主域名做实验。

建议单独分一个子域名,例如:

mailbox.example.com

这样即使临时邮箱配置出错,也不会影响主域名原来的邮件。

进入 Cloudflare 的 Email Service → Email Routing,把这个子域名加入邮件服务,并按照页面提示完成邮件 DNS 配置。

这里有一个很容易踩的坑:主域名已经能收邮件,不代表新建的子域名也会自动生效。一定要确认 Cloudflare 显示这个子域名的邮件记录已经配置完成。

03

PART


第二步:创建存邮件的 D1 数据库

进入 Cloudflare 的 Storage & Databases → D1 SQL Database,新建一个数据库。

数据库名称可以自己取,例如:

private_temp_mail

在 Cloudflare 创建 D1 数据库

数据库创建完成后,打开开源项目中的数据库初始化文件,也就是 db/schema.sql

复制里面的 SQL,粘贴到 D1 的 Console 中执行。

在 D1 Console 执行初始化 SQL

不要只看页面提示“执行成功”。刷新后确认数据库里已经出现项目需要的数据表,这一步才算完成。

04

PART


第三步:部署负责收信的 Worker

接下来创建一个 Cloudflare Worker,并按照开源项目当前文档部署对应版本的 Worker 程序。

不要从不明网盘下载别人打包的代码。建议只使用项目的 GitHub 仓库或 Releases,并记录自己部署的具体版本。

部署后,需要根据项目文档填写运行变量。最关键的几类配置是:

允许使用的邮箱域名;

管理后台密码;

JWT 签名密钥;

是否允许匿名创建邮箱。

密码和密钥都应该放进 Cloudflare 的 Secret,不要写进公开代码,也不要出现在教程截图里。

项目需要什么运行环境,以当前官方文档为准。我部署的版本需要启用 nodejs_compat 兼容标志。

设置 Worker 运行兼容标志

05

PART


第四步:把 Worker 和数据库连起来

Worker 已经部署,但它现在还不知道邮件应该存到哪个数据库。

进入 Worker 的 Bindings,添加 D1 Database Binding。

绑定名称填写:

DB

然后选择前面创建的 D1 数据库。

给 Worker 绑定 D1 数据库

这里最容易出错的不是数据库选错,而是绑定名称写错。项目代码读取的是 DB,多一个字母或换成其他名字,Worker 都会认为数据库不存在。

06

PART


第五步:让所有邮件进入 Worker

回到邮箱子域名的 Email Routing → Routing Rules

我第一次操作时,直接在 Email pattern 里输入了一个 *,以为星号代表所有地址。

结果输入框马上变红:

在普通地址框输入星号会报错
星号报错与 Catch-all 正确做法

正确做法不是在普通地址框里填星号,而是启用单独的 Catch-all 规则。

Catch-all 的处理方式选择:

Send to a Worker

再选择刚才部署的临时邮箱 Worker。

完成这一步以后,无论邮件前缀是 test001hello 还是临时生成的随机字符,邮件都会交给同一个 Worker 处理。

07

PART


第六步:发送第一封测试邮件

先在临时邮箱页面创建一个测试地址,例如:

hello@mailbox.example.com

然后使用另一个正常邮箱给它发送一封不含私人信息的测试信:

主题:mail routing test

正文:hello from test message

不要一上来就拿它接收重要邮件。先确认下面四件事:

1. Email Routing 出现了邮件处理记录;

2. Worker 日志出现了邮件事件;

3. D1 出现了对应的邮件数据;

4. 私人收件页面能够读出邮件。

如果测试失败,就看最早在哪一层没有记录。

Email Routing 没记录 → 检查子域名和邮件 DNS

Worker 没记录 → 检查 Catch-all 指向

D1 没记录 → 检查 DB 绑定和数据库结构

页面看不到 → 检查前端配置和访问权限

第一封测试邮件成功到达

这比把所有服务全部重启一遍更容易找到问题。

08

PART


搭好以后,能拿来做什么

我现在主要把它用于三个场景:

测试自己网站的注册、登录和通知邮件;

给不同项目使用不同邮箱前缀;

不想把常用邮箱留在测试环境时,使用独立地址收信。

它只能解决“拥有一个可控的测试收件箱”。如果需要长期收发重要邮件、使用手机邮件客户端或多人协作,仍然应该选择正式邮箱服务。

09

PART


最后,别忘了这几件事

给管理页面设置强密码和访问限制;

不要公开数据库 ID、密码、JWT 密钥和真实邮件正文;

不要使用即将到期的域名绑定重要账号;

更新 Worker 前记录当前版本,并准备可恢复的配置;

保留开源项目原作者、仓库地址和许可证说明。

我把这次实际部署中用到的检查、备份和更新方法整理成了 Kairo Auth Stack。它不是重新发明一个邮箱项目,而是我给自己补的一层维护工具。

项目展示页:

https://www.airo.siphot.com/projects/kairo-auth-stack/

更详细的变量说明、截图步骤和排错清单,整理在《用自己的域名搭建临时邮箱:Cloudflare + Docker 自托管维护手册》中。

关注公众号后回复 临时邮箱 可以领取。

10

PART


参考资料

开源项目:https://github.com/dreamhunter2333/cloudflare_temp_email

项目中文文档:https://temp-mail-docs.awsl.uk/zh/

Cloudflare Email Routing:https://developers.cloudflare.com/email-service/get-started/route-emails/

Cloudflare D1:https://developers.cloudflare.com/d1/

觉得有用,欢迎点赞、在看和转发。

THANKS FOR READING