🎬 2025 终极教程:Cloudflare 免费搭建专属域名邮箱(发信+收信+TG推送)
📋 0. 准备工作 (Preparation)
- 账号:Cloudflare 账号、Telegram 账号、Resend.com 账号。
- 域名:一个已经托管在 Cloudflare 上的域名(例如
900900.xyz)。 - 工具:电脑文本编辑器(推荐 VS Code,或电脑自带的记事本)。
🏗️ 第一部分:数据库与存储 (D1 & KV)
1. 创建 D1 数据库
- 登录 Cloudflare 仪表盘,点击左侧菜单 Storage & Databases (存储和数据库) -> D1 SQL Database (D1 SQL 数据库)。
- 点击 Create (创建)。
- 数据库名称自己随便填写一个,如填
vmail-db,点击 Create (创建)。
2. 初始化数据库 (官方源码引用)
我们需要给数据库建立表结构。
- 获取代码:
- 打开官方数据库文件链接:schema.sql (点击打开)
- 在 GitHub 页面右上角点击 Copy raw file (复制原始内容) 图标(两个小方块),复制所有代码。
- 执行初始化:
- 回到 Cloudflare,点击刚才创建的
vmail-db进入详情。 - 点击 Console (控制台) 标签。
- 在输入框中 粘贴 刚才复制的代码。
- 点击 Execute (执行)。
- 提示:看到 “Success” 即表示成功。
🔄 以后如何更新数据库?
如果未来作者更新了功能,只需再次访问上面的 GitHub 链接,查看db文件夹下有没有新的.sql补丁文件。如果有,复制内容并在 Console (控制台) 里执行即可。
3. 创建 KV 存储
- 点击左侧菜单 Storage & Databases (存储和数据库) -> KV。
- 点击 Create (创建)。
- 随便自定义,如命名为
vmail-kv,点击 Add (添加)。
⚙️ 第二部分:后端 Worker 部署 (核心大脑)
1. 创建 Worker 应用
- 点击左侧菜单 Compute & AI (计算和 AI) -> Workers & Pages。
- 点击 Create application (创建应用)。
- 在模版选择页面,请直接点击 Start with Hello World (从 Hello World 开始)。
- 随便取个名称,也可以用默认的
- 直接点击 Deploy (部署)。
2. 上传代码 (官方发布版)
- 下载代码:
- 点击下载官方最新构建版:worker.js
- 注意:请直接下载这个文件,这是编译好的单文件。
- 替换代码:
- 用记事本打开下载好的
worker.js,全选并复制所有内容。 - 回到 刚刚创建的 Worker 页面,点击右上角 Edit code (编辑代码)。
- 在左侧文件列表点击
worker.js。 - 删除 编辑器里原本的所有代码。
- 粘贴 你刚才复制的新代码。
- 点击右上角 Deploy (部署)。
🔄 以后如何更新后端?
不需要删除 Worker 重建。只需去上面的链接下载最新的worker.js,重复“编辑代码 -> 全选覆盖 -> 部署”的步骤即可无缝升级。
3. 设置运行环境 (Runtime)
- 进入你刚刚创建的worker页面,点击打开顶部右侧的 Settings (设置) 标签。
- 列表找到 Runtime (运行时)。
- 选择 Compatibility flags (兼容性标志),点击右侧的编辑笔图标,弹出Add compatibility flag (添加兼容性标志)。
- 输入
nodejs_compat,点击 Save (保存)。
4. 绑定数据库 (Bindings)和kv存储
绑定 KV Namespace
- 在 Worker 编辑页面顶部,点击 Bindings (绑定) 标签。
- 点击Add binding(添加绑定)
- 绑定 KV namespace
- 点击 Add binding (添加绑定) -> KV Namespace (KV 命名空间)。
- Variable name (变量名) 填
KV(必须大写)。 - Namespace (命名空间) 选之前创建的空间
vmail-kv。 - 填写好点Add Binding
绑定 D1 database
- 在 Worker 编辑页面顶部,点击 Bindings (绑定) 标签。
- 点击Add binding(添加绑定)
- 绑定 D1 Database
- 点击 Add binding (添加绑定) -> D1 Database (D1 数据库)。
- Variable name (变量名) 填
DB(必须大写)。 - D1 database (D1 数据库) 选之前创建的数据库
vmail-db。 - 填写好点Add Binding
5. 配置环境变量 (Variables)
点击 Settings (设置) -> Variables & Secrets (变量和机密) -> Add variable (添加变量)。
全部添加好点击保存部署就行了。
⚠️ 请严格按照下表选择类型 (Type) 并填写:
| 变量名 (Name) | 值 (Value) 示例 | 类型 (Type) | 说明 |
|---|---|---|---|
DOMAINS |
["900900.xyz"] |
JSON | 你的域名,可以多个域名,英文逗号分隔 |
ADMIN_PASSWORDS |
["123456"] |
JSON | 后台密码,要有引号和方括号 |
JWT_SECRET |
随便填一串乱码 |
Text (文本) | 登录加密密钥 |
ENABLE_AUTO_REPLY |
true |
Text (文本) | 开启自动回复 |
ENABLE_USER_CREATE_EMAIL |
true |
Text (文本) | 允许用户创建邮箱 |
ENABLE_USER_DELETE_EMAIL |
true |
Text (文本) | 允许删除邮件 |
NO_LIMIT_SEND_ROLE |
admin |
Text (文本) | 无限制发信角色 |
*注意:发信变量RESEND_TOKEN 和 tg机器人变量TELEGRAM_BOT_TOKEN 我们留到后面章节专门填。
这个域名变量DOMAINS的值必须是根域名或者你托管到cloudflare的二级免费域名,填错无法收信。配置收信与发信看第四部分。
6. 绑定后端域名
- 点击 Settings (设置) -> Routes and domains (路由和域名)。
- 点击右侧 Add (添加) -> Custom Domain (自定义域名)。
- 输入一个二级域名,例如
mail.9009000.xyz。 - 点击 Add Custom Domain (添加)。
- ⚠️ 重要:请拿小本本记下这个域名,下一步前端配置要用!
🎨 第三部分:前端 Pages 部署 (界面)
这里提供两种方法,小白推荐方法一,进阶推荐方法二。
方法一:在线生成 (小白推荐 🌟)
- 打开官方提供的 在线生成器页面。
- 在输入框中填入你上一步绑定的 后端域名 (例如
https://mail.900900.xyz)。 - 点击 生成 按钮。
- 点击下载生成的
frontend.zip文件。
方法二:手动修改 (进阶用户)
- 下载官方前端包:frontend.zip。
- 解压后进入
assets文件夹,找到index-xxxx.js。 - 用记事本打开,搜索
https://temp-email-api.xxx.xxx,替换为你的后端域名。 - 保存并重新打包为 ZIP 文件。
上传部署 (Pages)
- 回到 Cloudflare -> Compute & AI -> Workers & Pages。
- 点击 Create application (创建应用)
- 关键点:不要点 Connect to Git,看页面最底部。
- 点击链接:“Want to deploy Pages? Start now” (想要部署 Pages?立即开始)。
- 选择 Upload assets (上传资产)。
- 项目名自定义填
vmail-web-> Create Project (创建项目)。 - 上传你准备好的 ZIP 文件 -> Deploy site (部署站点)。
- 绑定域名:点击 Custom domains (自定义域名) -> 绑定你喜欢的网址 (例如
bb.900900.xyz)。
🔄 以后如何更新前端?
重复“方法一”或“方法二”获取新的 ZIP 包,然后在 Cloudflare Pages 页面点击 Create new deployment (创建新部署) 上传即可。
📩 第四部分:配置收信与发信
1. 配置收信 (Email Routing)
- 启用:点击域名 -> Email (电子邮件) -> Email Routing (路由) -> Enable (启用)。
- 如果提示添加 DNS 记录,点击 Add records (添加记录) 自动添加。
- 规则:点击 Routes (路由) -> Create rule (创建规则):
- Action (操作):
Send to a Worker(发送到 Worker) - Destination (目标):
vmail-worker - Match (匹配):
Catch-all(全部捕获) - 点击 Save (保存)。
2. 配置发信 (Resend)
- 注册:去 Resend.com 注册并添加域名
900660.xyz。 - DNS 配置 (避坑点):
- 去 Cloudflare DNS 添加 Resend 给出的 MX 和 TXT 记录。
- ⚠️ Proxy status (代理状态) 必须是 DNS Only (灰色云朵)。
- ⚠️ 绝对不要添加 Resend 页面里 “Enable Receiving” 下方的 MX 记录!我们只用它发信。
- 获取密钥:Resend 左侧 API Keys -> Create -> Full Access -> 复制
re_开头的密钥。 - 填入 Cloudflare:
- 回到
vmail-worker-> Settings (设置) -> Variables & Secrets (变量和机密)。 - 点击 Add variable (添加变量)。
- Variable name (变量名): 输入
RESEND_TOKEN。 - Value (值): 粘贴你的 Resend 密钥。
- Type (类型): 选择 Secret (机密)。
- 点击 Deploy (部署) 或 Save (保存)。
🤖 第五部分:Telegram 机器人 (手机收信)
⚠️ 重要说明:关于邮件解析
Telegram 的聊天气泡不支持复杂的 HTML 邮件(如验证码、推广邮件)。
如果你收到邮件时提示:“解析失败,请打开 mini app 查看”,这是正常现象。
请点击聊天框底部的 “打开邮箱” 按钮,在小程序里可以完美查看邮件原文。
1. 申请机器人 (保姆级对话)
打开 Telegram,搜索 @BotFather。
⚠️ 注意:请认准名字后面带蓝色对勾 ✅ 的才是官方机器人,其他的都是假的!
(请严格照着下面的剧本操作)
- 点击 Start,发送指令:
```text
/newbot
2. **BotFather 回复**:
"Alright, a new bot. How are we going to call it?..."
*(好,取个名字吧。)*
3. **你发送** (机器人的显示名称,可用中文):
```text
我的专属邮箱
- BotFather 回复:
“Good. Now let’s choose a username… It must end inbot…”
(好,现在取个唯一 ID,必须以 bot 结尾。) - 你发送 (唯一 ID,必须英文+数字,不能重复):
```text
vmail_900900_bot
*(如果提示 Username is already taken,就换个复杂的,比如 `my_vip_mail_999_bot`)*
6. **BotFather 回复**:
"Done! Congratulations..."
*(恭喜!...)*
**👉 复制那串红色的 Token** (例如 `7123...:AAF...`)。
### 2. 配置后端变量 (双语指引)
1. 回到 Cloudflare `vmail-worker` -> **Settings (设置)** -> **Variables & Secrets (变量和机密)**。
2. 点击 **Add variable (添加变量)**。
3. **Variable name (变量名)**: 输入 `TELEGRAM_BOT_TOKEN`。
4. **Value (值)**: 粘贴刚才复制的 Token。
5. **Type (类型)**: 选择 **Secret (机密)**。
6. 点击 **Encrypt (加密)**。
7. 点击 **Deploy (部署)** 或 **Save (保存)**。
### 3. 激活机器人 (Webhook)
Worker 无法主动连接 TG,必须手动激活一次。
请在浏览器地址栏输入以下网址并回车(**替换成你的 Token 和 后端域名**):
```text
https://api.telegram.org/bot<你的Token>/setWebhook?url=https://<你的后端域名>/telegram/webhook
示例:`https://api.telegram.org/bot7123:AAF.../setWebhook?url=https://mail.900900.xyz/telegram/webhook`
看到网页显示 {"ok":true, ... "description":"Webhook was set"} 即代表激活成功。
4. 配置小程序按钮 (强烈推荐)
为了解决 HTML 邮件看不了的问题,我们必须配置这个按钮。
- 对 BotFather 发送:
/mybots - 点击你的机器人 -> Bot Settings -> Menu Button -> Configure Menu Button。
- Send me the URL: 发送你的前端网址 (例如
https://bb.900900.xyz)。 - Enter a title: 发送按钮名称 (例如
打开邮箱)。
✅ 结尾:验收成果
- 网页测试:访问
bb.9009000.xyz,复制右上角的邮箱地址。 - 发信测试:用 QQ 邮箱给它发一封信。
- TG 推送测试:
- 在 Telegram 对机器人发送
/new,生成一个新地址。 - 给这个新地址发信。
- 手机应该会震动并推送消息。
- 如果提示“解析失败”,点击左下角 “打开邮箱” 按钮查看详情。
🎉 恭喜!你现在拥有了一个永久免费、无限续杯的专属域名邮箱系统!
