Cloud Mail部署教程:零成本自建邮箱服务

Cloud Mail部署教程:零成本自建邮箱服务
luoli前言
Cloud Mail 是一个基于 Vue3 + Element Plus 前端框架和 Hono 后端框架开发的响应式邮箱服务。
它利用 Cloudflare Workers 的无服务器架构,结合 Resend 邮件推送服务,让你不需要任何服务器成本就能搭建属于自己的邮箱系统。
功能特点
| 功能 | 说明 |
|---|---|
| 💰 低成本使用 | 无需服务器,部署到 Cloudflare Workers,利用免费额度 |
| 💻 响应式设计 | 自动适配 PC 和移动端浏览器 |
| 📧 邮件发送 | 集成 Resend,支持群发、内嵌图片和附件 |
| 🛡️ 管理员功能 | 用户管理、邮件管理、RBAC 权限控制 |
| 🔀 多号模式 | 支持一个用户添加多个邮箱地址 |
| 📦 附件收发 | 使用 R2 对象存储保存和下载文件 |
| 🔔 邮件推送 | 接收邮件后可转发到 TG 机器人或其他邮箱 |
| 🤖 人机验证 | 集成 Turnstile 验证,防止批量注册 |
| 📡 开放 API | 支持 API 批量生成用户,多条件查询邮件 |
| 📈 数据可视化 | 使用 Echarts 对系统数据可视化显示 |
技术栈
| 类别 | 技术 |
|---|---|
| 前端框架 | Vue3 + Element Plus |
| 后端框架 | Hono |
| ORM | Drizzle |
| 运行平台 | Cloudflare Workers |
| 邮件服务 | Resend |
| 缓存 | Cloudflare KV |
| 数据库 | Cloudflare D1 |
| 文件存储 | Cloudflare R2 |
准备工作
在开始部署之前,需要准备以下内容:
1. Cloudflare 账号
注册 Cloudflare 并添加你的域名。需要获取以下信息:
- Account ID — 在 Cloudflare Dashboard 右侧的账户页面中可以找到
- API Token — 进入 API Tokens → 创建令牌 → 选择”编辑 Cloudflare Workers”模板,添加 Workers、KV、D1、R2 等资源的读写权限。API Token 只会显示一次,创建后立即保存
2. GitHub 账号
用于 Fork 仓库和配置 GitHub Actions 自动部署。
3. Resend 账号
注册 Resend 用于发送邮件。免费版支持 1 个域名和每月 1000 封邮件。
4. 域名
一个托管在 Cloudflare 上的域名(例如 mail.example.com),用于访问邮箱服务。
创建 Cloudflare 资源
在 Cloudflare Dashboard 中创建以下资源:
D1 数据库
进入 Workers 和 Pages → D1 → 创建数据库,输入名称后创建。记下 数据库 ID。
KV 命名空间
进入 Workers 和 Pages → KV → 创建命名空间,输入名称后创建。记下 命名空间 ID。
R2 存储桶
进入 R2 → 创建存储桶,输入名称后创建。R2 需要绑定信用卡,免费额度 10GB 足够日常使用。
获取 R2 API 凭证:
- Access Key ID 和 Secret Access Key
- S3 Endpoint:
https://你的账户ID.r2.cloudflarestorage.com
💡 如果不想绑定信用卡,可以创建一个占位桶名称,部署时填入 R2 参数。但附件功能将不可用。
方式一:GitHub Actions 一键部署(推荐)
1. Fork 仓库
访问 cloud-mail 项目,点击 Fork 将仓库克隆到你的 GitHub 账号下。
2. 配置 GitHub Secrets
进入你的 Fork 仓库 → Settings → Secrets and variables → Actions → New repository secret,添加以下 8 个 Secrets:
| Secret 名称 | 必需 | 说明 |
|---|---|---|
CLOUDFLARE_API_TOKEN |
✅ | Cloudflare API 令牌(需要 Workers、KV、D1、R2 等权限) |
CLOUDFLARE_ACCOUNT_ID |
✅ | Cloudflare 账户 ID |
D1_DATABASE_ID |
✅ | D1 数据库 ID |
KV_NAMESPACE_ID |
✅ | KV 命名空间 ID |
R2_BUCKET_NAME |
✅ | R2 存储桶名称(没有信用卡也填一个占位名称) |
DOMAIN |
✅ | 邮箱域名,JSON 数组格式,例如 ["mail.example.com"],多域名用逗号分隔 |
ADMIN |
✅ | 管理员邮箱,例如 admin@example.com |
JWT_SECRET |
✅ | JWT 加密密钥,随机长字符串(不要包含特殊字符) |
3. 运行工作流
- 进入你的 Fork 仓库 → Actions 页面
- 手动运行工作流(首次需手动触发)
- 等待部署完成(约 2-3 分钟)
- 部署成功后,进入 Worker 设置页面绑定自定义域名
4. 配置 Cloudflare Email Routing
- 进入 Cloudflare Dashboard → Email → Email Routing
- 配置 Catch-All 规则,将所有邮件转发到你的 Worker
- 具体配置步骤参考 官方文档
5. 初始化并使用
- 访问你的 Worker 域名
- 使用
ADMIN变量中设置的邮箱注册账号 - 第一个注册的账号自动成为管理员
方式二:Cloudflare Dashboard 手动部署
1. 创建 Worker
- 登录 Cloudflare Dashboard → Workers 和 Pages → 创建应用程序 → Worker
- 输入 Worker 名称(例如
cloud-mail) - 选择 GitHub 导入,连接你的 Fork 仓库
- 设置构建目录为
mail-worker - 点击 保存并部署
2. 设置环境变量
在 Worker 详情页 → 设置 → 环境变量,添加以下变量:
| 变量名 | 示例值 |
|---|---|
domain |
["mail.example.com"] |
admin |
admin@example.com |
jwt_secret |
随机字符串(不要包含特殊字符) |
3. 绑定数据库
在 Worker 详情页 → 设置 → 绑定,添加:
- KV 命名空间:变量名必须为
kv - D1 数据库:变量名必须为
db
⚠️ 变量名必须为
kv和db,不可更改。Cloudflare UI 绑定的 KV 和 D1 有时会掉绑,建议使用 GitHub Actions 部署。
4. 绑定自定义域名
在 Worker 详情页 → 触发器 → 自定义域名,添加你的域名。
5. 初始化数据库
访问 https://你的域名/api/init/你的jwt_secret 初始化数据库。
配置 Resend 发送邮件
- 登录 Resend
- 添加并验证你的域名(需要配置 DNS 记录)
- 创建 API Key
- 在 Cloud Mail 后台 → 系统设置 → 邮件服务,填入 Resend API Key
配置 Turnstile 人机验证(可选)
- 在 Cloudflare Dashboard → Turnstile → 添加站点
- 获取 Site Key 和 Secret Key
- 在 Cloud Mail 后台 → 系统设置 → 安全设置 中配置
配置邮件推送(可选)
Cloud Mail 支持接收邮件后推送到 Telegram 或其他邮箱:
- 创建 Telegram Bot 获取 Token
- 获取你的 Chat ID
- 在 Cloud Mail 后台 → 系统设置 → 邮件推送 中配置
常见问题
部署后访问空白?
检查 KV 和 D1 数据库是否已正确绑定,变量名必须为 kv 和 db。
R2 绑定失败?
R2 需要绑定信用卡才能正常使用。如果不需要附件功能,可以填一个占位桶名称。
邮件发送失败?
检查 Resend API Key 是否正确,域名是否已在 Resend 中验证通过。
如何更新?
如果是 GitHub Actions 部署,同步上游仓库后会自动重新部署。









