Ivan's Blog

KaisouMail

这类工具最容易沦为脚本集合,但它被做成了完整的 Web 产品:既有面向访客的使用入口,也有可维护、可扩展的后台组织方式。

CloudflareTypeScriptReactEmail Workflow
KaisouMail 项目海报
KaisouMail 项目界面与功能概览

临时邮箱控制面

KaisouMail 用于管理临时邮箱、自有域名、邮件阅读、验证码提取和自动化凭据。Web 控制面与 Cloudflare Worker、D1、R2 共同完成邮件接收和管理。

项目将 Web 控制面、API Worker、邮件接收 Worker 与 Cloudflare 的存储能力组合起来,让自托管实例可以在不依赖独立邮件服务器的情况下完成从域名到消息阅读的完整链路。

存储分层

KaisouMail 没有把整封邮件塞进同一张业务表。D1 保存邮箱、消息索引、域名和任务状态,R2 保存原始 EML、HTML、纯文本和附件,Pages Proxy 只负责把前端请求稳定地转到 Worker。读取列表时只取需要排序和筛选的元数据,打开详情时才按对象键取回正文。

邮箱生命周期结束时,清理任务分别处理索引记录和对象存储,删除过程保留可观察状态。

异步域名切换

域名接入并不止是保存一个字符串。系统需要检查 Cloudflare zone、创建或重建 Email Routing 记录、确认 Catch All 状态,再把结果回写到域名和任务模型。任何一步等待 DNS 或上游 API 的过程,都通过 task 状态和 SSE 进度呈现给控制面。

任务状态区分发现、写入、校验和清理阶段;重试使用同一个域名和任务记录,避免重复提交部分生效的 onboarding。

邮件接收链路

入站邮件首先经过 Cloudflare Email Routing,再由 Email Worker 接收。Worker 将结构化元数据写入 D1,将原始邮件正文和相关内容放入 R2;控制面通过 API Worker 读取这些状态,React 界面则负责邮箱列表、消息列表和正文阅读。

D1 保存可查询的邮件元数据,R2 保存正文、原始消息和附件,Pages Proxy 为前端提供同源 /api。验证码提取先使用确定性规则,无法判断时再调用 Workers AI。

邮箱生命周期

邮箱创建支持随机分配,也支持输入具体地址;邮箱记录同时保存创建来源和标签,便于在多个自动化流程之间筛选和回溯。TTL 从 1 小时到 1 年覆盖短期验证场景,也可以选择长期有效模式。

工作区显示 activedestroying 邮箱,历史状态留在记录中,不进入日常操作列表。

域名接入

/domains 页面负责发现可管理的 Cloudflare zone、启用目录中的域名或直接绑定新的 apex 根域名。项目将 apex 绑定作为标准 onboarding 路径,需要子域名地址时,再在根域名已经接入的基础上继续创建。

Catch All 的启用和禁用会创建异步 cutover task,项目清理或重建自己管理的 Email Routing 记录,并通过任务 API 和 SSE 显示进度。

阅读与自动化入口

消息详情可以查看解析内容、HTML、纯文本、headers、收件人、附件以及原始 EML。对需要脚本化操作的场景,API Key 库和受保护的 API 参考文档位于同一套身份认证区域;Passkey 则负责浏览器登录和设备管理。

KaisouMail 同时保留公开文档站、部署说明、Cloudflare 权限指南和 Storybook 预览。首次了解项目时可以使用 mock data Demo,不必先准备 Worker、Cloudflare 账户或真实邮箱域名。