CloudMail 自托管邮箱服务

弃用传统邮箱平台,用自己域名收发邮件的自托管方案:前端 Vue3 SPA、后端 Hono Worker,数据落在 D1/KV/R2,服务器成本为零。
概述
个人域名邮箱的需求很朴素:用自己的域名收发邮件、注册各类服务、随用随建隔离别名。商业邮箱平台按席位收费且数据在他方,传统自建(Postfix + VPS)又运维繁琐、IP 信誉难维护。CloudMail 把整套邮件服务搬进 Cloudflare 无服务器生态——一个域名、一个 Worker,就能拥有多邮箱、附件收发、管理后台的完整邮件服务。
核心功能
收件
- 多邮箱管理:一个域名创建多个邮箱,类似主流邮箱平台的多账户体验
- 附件接收:入站邮件附件自动转存 R2 对象存储,支持在线预览与下载
- 实时推送:新邮件可转发至 Telegram 机器人或其他邮箱,不错过任何验证码
- 验证码识别:Workers AI 自动从邮件中提取验证码,免复制粘贴
发信
- Resend 集成:稳定送达率,支持群发、内嵌图片与附件
- 发送状态:每封信的投递状态可查,失败可追溯
管理与安全
- RBAC 权限:按角色控制功能与资源配额,用户/邮件后台管理
- 人机验证:Turnstile 集成,防止批量注册
- 开放 API:批量生成用户、多条件查询邮件,便于自动化接入
- 数据可视化:ECharts 展示系统数据与用户邮件增长趋势
架构
┌─────────────┐ ┌──────────────────────┐
│ Email Routing│────▶│ Mail Worker (Hono) │
│ (CF 收件路由) │ │ API + 邮件处理 │
└─────────────┘ └──────┬───────────────┘
│
┌────────────┼────────────┐
┌─────▼─────┐ ┌────▼────┐ ┌────▼────┐
│ D1 (数据) │ │ KV(缓存) │ │ R2(附件) │
└───────────┘ └─────────┘ └─────────┘
▲
┌───────┴────────┐
│ Vue3 + Element │
│ Plus 管理前端 │
└────────────────┘
- 收件链路:Cloudflare Email Routing 接收入站邮件 → 投递至 Worker
email事件 → 解析 MIME、附件落 R2、正文落 D1 → 触发推送 - 分层后端:
api/接口层、service/业务层、dao/数据访问层、security/认证鉴权,职责清晰 - 前端:Vue3 + Element Plus 响应式布局,PC 与移动端自适应
挑战与解决
邮件接收链路
问题:无服务器环境没有常驻 SMTP 服务,如何收邮件?
解决:利用 Cloudflare Email Routing 将域名 MX 收到的邮件直接投递给 Worker 的 email 事件,配合 MIME 解析库在边缘完成正文与附件分离,全程无需一台服务器。
附件存储与流量成本
问题:附件体积大,塞进数据库既撑爆 D1 又拖慢查询。
解决:附件与元数据分离——D1 只存索引,二进制内容进 R2,下载走预签名直链,边缘缓存降低回源。
验证码提取
问题:验证码邮件模板千差万别,正则规则维护不过来。
解决:接入 Workers AI 对邮件正文做智能提取,规则兜底为辅,验证码一键复制。
技术栈细节
后端
- Cloudflare Workers + Hono:路由、拦截器、全局异常、i18n
- Drizzle ORM 操作 D1(SQLite),KV 做缓存加速
- Resend 发信,Email Routing 收信
前端
- Vue3 + Element Plus 组件库
- ECharts 数据可视化
- Axios 统一请求层,Pinia 全局状态
安全
- JWT 身份认证 + RBAC 鉴权
- Turnstile 人机验证
- 自定义异常体系与错误码
成果
- 成本:Workers + D1 + KV + R2 免费额度内运行,零固定支出
- 隐私:邮件数据完全自持,不经过第三方邮箱平台
- 灵活:别名随用随建,注册服务时一键生成隔离邮箱
- 体验:验证码自动识别 + TG 实时推送,收验证码快过手机短信
后续计划
- 邮件搜索全文索引
- 日程/订阅邮件智能归档
- 自定义域名多域支持
- 移动端 PWA
项目状态:✅ 生产运行中
GitHub:查看源码
Demo:Try it Live
