Cloud Mail – 基于 Cloudflare 的免费邮箱服务搭建教程
本文整理自 GitHub 开源项目,原文链接:maillab/cloud-mail
原作者:maillab 整理日期:2026-06-30
只需一个域名,即可搭建属于自己的全功能邮箱系统!Cloud Mail 是一个基于 Cloudflare 生态的开源邮箱服务,支持邮件收发、附件管理、验证码识别等功能,最重要的是 —— 完全免费部署,无需服务器成本。
项目简介
Cloud Mail 利用 Cloudflare 的免费额度(Workers、D1 数据库、R2 存储、KV 缓存),为个人用户提供了一套完整的邮箱解决方案。相比传统邮箱服务器动辄每月几十美元的成本,Cloud Mail 在 Cloudflare 免费计划内即可满足个人使用需求。
在线体验:https://skymail.ink
项目界面预览:


核心功能
📧 完整的邮件功能
- 邮件收发:接收外部邮件,通过 Resend 发送邮件
- 附件支持:基于 R2 对象存储的附件上传下载
- 群发功能:支持批量发送邮件
- 内嵌图片:邮件中可插入图片和富文本内容
🛡️ 权限管理
- 多用户系统:一个域名创建多个邮箱账户
- RBAC 权限控制:细粒度的功能和资源权限管理
- 管理员后台:用户管理、邮件查看、系统监控
🤖 智能功能
- 验证码识别:利用 Workers AI 自动识别邮件中的验证码
- 邮件推送:收到邮件后自动转发到 Telegram 或其他邮箱
- Turnstile 验证:防止恶意注册和滥用
📊 数据与 API
- 可视化面板:ECharts 图表展示系统数据和邮件统计
- 开放 API:支持批量创建用户、查询邮件等操作
- 响应式设计:完美适配 PC 和移动端
技术架构
后端技术栈
- 运行平台:Cloudflare Workers(Serverless)
- Web 框架:Hono(轻量级 Web 框架)
- ORM:Drizzle(类型安全的 ORM)
- 数据库:Cloudflare D1(SQLite)
- 缓存:Cloudflare KV
- 文件存储:Cloudflare R2(兼容 S3 的对象存储)
前端技术栈
- 框架:Vue 3 + Composition API
- UI 组件:Element Plus
- 图表:ECharts
- 状态管理:Pinia
第三方服务
- 邮件发送:Resend(免费额度:100 封/天)
- 人机验证:Cloudflare Turnstile(免费)
- AI 能力:Workers AI(免费额度)
完整部署教程
前置准备
1. 注册 Cloudflare 账号
访问 Cloudflare 官网 注册账号(免费)
2. 准备域名
- 拥有一个域名(可在 Cloudflare、阿里云、腾讯云等购买)
- 将域名的 DNS 解析服务器修改为 Cloudflare 的 NS 服务器
- 在 Cloudflare 控制台添加该域名
3. 注册 GitHub 账号
用于 Fork 项目和 Cloudflare Pages 部署
4. 注册 Resend 账号(可选)
- 访问 Resend 注册账号
- 免费计划提供 100 封邮件/天的额度
- 如果只接收邮件不发送,可跳过此步骤
第一步:Fork 项目到 GitHub
访问 Cloud Mail GitHub 仓库,点击右上角 Fork 按钮,将项目复制到你的 GitHub 账号下。

第二步:创建 Cloudflare 数据库
创建 D1 数据库
- 登录 Cloudflare 控制台
- 进入 Workers & Pages → D1 SQL Database
- 点击 Create Database
- 数据库名称填写:
db(必须是这个名称) - 点击创建
创建 KV 命名空间
- 在 Cloudflare 控制台,进入 Workers & Pages → KV
- 点击 Create a namespace
- 命名空间名称填写:
kv(必须是这个名称) - 点击创建
创建 R2 存储桶(可选)
如果需要附件功能:
- 进入 R2 → Create bucket
- 存储桶名称填写:
mail-attachments - 地区选择:自动(Automatic)
- 点击创建
第三步:部署 Worker 后端
创建 Pages 项目
- 在 Cloudflare 控制台,进入 Workers & Pages

- 点击 Create Application → Pages → Connect to Git

- 选择 GitHub,授权访问你的 GitHub 账号
- 选择刚才 Fork 的
cloud-mail仓库 - 配置构建设置:
- 项目名称:自定义(如
my-cloud-mail) - 生产分支:
main - 构建目录:
mail-worker - 构建命令:留空
- 输出目录:留空
- 项目名称:自定义(如
- 点击 Save and Deploy
设置环境变量
部署完成后,进入项目设置:
- 点击 Settings → Environment variables
- 添加以下必需的环境变量:

| 变量名 | 说明 | 示例值 |
|---|---|---|
domain | 邮箱域名,多个域名用 JSON 数组 | ["mail.example.com"] |
admin | 管理员邮箱地址 | admin@mail.example.com |
jwt_secret | JWT 密钥(随机字符串) | your_random_secret_key_here |
注意事项:
domain如果是单个域名,写成["example.com"]格式jwt_secret建议使用 32 位以上的随机字符串- 不要在
jwt_secret中使用特殊字符
- 点击 Save 保存
绑定数据库和存储
- 进入项目 Settings → Functions
- 找到 Bindings 部分
- 添加以下绑定:
D1 数据库绑定:
- 点击 Add binding → D1 database
- Variable name:
db - D1 database: 选择之前创建的
db
KV 命名空间绑定:
- 点击 Add binding → KV namespace
- Variable name:
kv - KV namespace: 选择之前创建的
kv
R2 存储桶绑定(如果创建了 R2):
- 点击 Add binding → R2 bucket
- Variable name:
r2 - R2 bucket: 选择之前创建的
mail-attachments
- 点击 Save 保存所有绑定
添加自定义域名
- 进入项目 Custom domains
- 点击 Add custom domain
- 输入你的邮箱域名(如
mail.example.com) - Cloudflare 会自动配置 DNS 记录
- 等待 SSL 证书签发(通常 1-5 分钟)
第四步:配置邮件路由
配置 Cloudflare Email Routing 以接收邮件:
启用 Email Routing
- 在 Cloudflare 控制台,选择你的域名
- 进入 Email → Email Routing
- 点击 Get started 启用邮件路由
- Cloudflare 会自动添加必要的 DNS 记录(MX、TXT 等)
- 等待 DNS 记录生效(通常几分钟)
配置邮件转发规则
- 在 Email Routing 页面,点击 Destination addresses
- 添加一个目标地址(用于接收验证邮件)
- 打开你的邮箱,确认 Cloudflare 发送的验证邮件
- 回到 Email Routing → Routing rules
- 点击 Create rule:
- Rule name:
Cloud Mail Worker - Matcher:
Catch-all address(匹配所有邮件) - Action:
Send to Worker - Worker: 选择你部署的 Worker 项目
- Rule name:
- 点击 Save 保存规则
第五步:初始化系统
访问管理后台
- 在浏览器中访问你的自定义域名(如
https://mail.example.com) - 首次访问会自动进入初始化流程
- 系统会创建数据库表结构
创建管理员账号
- 使用你在环境变量中设置的
admin邮箱地址 - 设置管理员密码(建议使用强密码)
- 登录系统
第六步:配置邮件发送(可选)
如果需要发送邮件功能:
1. 配置 Resend API
- 登录 Resend 控制台
- 创建一个 API Key
- 将 API Key 添加到 Cloudflare 环境变量:
- 变量名:
RESEND_API_KEY - 值:你的 Resend API Key
- 变量名:
2. 验证发件域名
- 在 Resend 控制台,进入 Domains
- 添加你的邮箱域名
- 按照提示添加 DNS 记录(SPF、DKIM、DMARC)
- 等待验证通过
第七步:测试邮箱功能
测试接收邮件
- 从其他邮箱发送一封测试邮件到
test@你的域名.com - 登录 Cloud Mail 管理后台
- 检查是否收到邮件
测试发送邮件
- 在 Cloud Mail 后台创建一个用户
- 登录该用户账号
- 尝试发送一封邮件到你的其他邮箱
- 检查是否成功接收
进阶配置
配置 Telegram 推送
- 创建 Telegram Bot(通过 @BotFather)
- 获取 Bot Token
- 在环境变量中添加:
TELEGRAM_BOT_TOKEN:你的 Bot TokenTELEGRAM_CHAT_ID:你的 Chat ID
启用验证码识别
- 在 Cloudflare 控制台启用 Workers AI
- 在 Worker 绑定中添加 AI 绑定
- 系统会自动识别邮件中的验证码
自定义主题
- 登录管理后台
- 进入 系统设置 → 个性化
- 修改网站标题、Logo、背景等
成本分析
Cloudflare 免费额度
| 服务 | 免费额度 | 说明 |
|---|---|---|
| Workers | 100,000 请求/天 | 足够个人使用 |
| D1 Database | 5GB 存储,500 万行 | 可存储大量邮件 |
| R2 Storage | 10GB 存储/月 | 足够存储附件 |
| KV | 100,000 读取/天 | 缓存使用 |
| Email Routing | 无限转发 | 完全免费 |
Resend 免费额度
- 100 封邮件/天
- 1 个自定义域名
- 超出需升级到付费计划($20/月起)
总结
个人使用完全可以在免费额度内运行,除非需要:
- 大量发送邮件(>100 封/天)
- 超大附件存储(>10GB)
- 高并发访问
常见问题
1. 无法接收邮件?
- 检查 Email Routing 是否正确配置
- 确认 MX 记录已生效(用
nslookup -type=mx 你的域名检查) - 查看 Cloudflare Email Routing 日志
2. 无法发送邮件?
- 确认 Resend API Key 是否正确
- 检查域名是否通过 Resend 验证
- 查看 SPF、DKIM、DMARC 记录是否配置
3. Worker 部署失败?
- 检查 GitHub 仓库是否 Fork 成功
- 确认构建目录设置为
mail-worker - 查看 Cloudflare Pages 构建日志
4. 数据库连接失败?
- 确认 D1 数据库绑定变量名为
db - 检查 KV 命名空间绑定变量名为
kv - 重新部署 Worker
5. 如何备份数据?
- D1 数据库可以通过
wranglerCLI 导出 - R2 存储可以使用 S3 兼容工具同步
项目目录结构
cloud-mail/
├── mail-worker/ # Worker 后端
│ ├── src/
│ │ ├── api/ # API 接口层
│ │ ├── dao/ # 数据访问层
│ │ ├── email/ # 邮件处理
│ │ ├── entity/ # 数据库实体
│ │ ├── security/ # 权限认证
│ │ └── service/ # 业务逻辑
│ └── wrangler.toml # Worker 配置
│
└── mail-vue/ # Vue 前端
├── src/
│ ├── components/ # UI 组件
│ ├── views/ # 页面视图
│ ├── store/ # 状态管理
│ └── router/ # 路由配置
└── package.json
相关链接
- GitHub 仓库:https://github.com/maillab/cloud-mail
- 在线演示:https://skymail.ink
- 官方文档:https://doc.skymail.ink
- Telegram 群:https://t.me/cloud_mail_tg
- Cloudflare Workers 文档:https://developers.cloudflare.com/workers/
- Resend 文档:https://resend.com/docs
总结
Cloud Mail 为个人用户提供了一个零成本搭建私有邮箱的完整方案。相比传统邮件服务器(VPS + Postfix + Dovecot)动辄几十美元/月的成本和复杂的配置,Cloud Mail 利用 Cloudflare 的 Serverless 架构,实现了:
✅ 零服务器成本:完全基于 Cloudflare 免费计划 ✅ 极简部署:无需配置服务器、数据库、SSL ✅ 全球加速:Cloudflare CDN 自动优化访问速度 ✅ 高可用性:Serverless 架构天然支持横向扩展 ✅ 现代化界面:Vue 3 响应式设计,体验流畅
如果你正在寻找一个简单、免费、可靠的个人邮箱解决方案,Cloud Mail 是一个值得尝试的选择。
声明:本文内容整理自 GitHub 开源项目 maillab/cloud-mail,遵循 MIT 许可证。教程内容为个人理解和实践总结,如有问题欢迎指正。












暂无评论内容