【教程】如何0成本部署一个属于自己的企业域名邮箱? 时间: 2026-08-14 23:20 分类: 猿码 热度: 7°C 评论 国内有很多免费的企业域名邮箱,比如阿里云、腾讯云、网易等等。 但是他们都解决不了以下的痛点: - 无限邮箱 - 数据完全私有 - 一处登录,全局掌控 - 自由切换发件身份 - 零成本 ####预览官网:https://mail.inurl.link/ 基于以上痛点,我自己做了个邮箱系统,完全解决了以上痛点,并且开源了这个系统。  如上图,这个邮箱系统,除了大家最关心的成本问题(部署在**Cloudflare**上,完全免费,你只需要一个域名即可)。 还有一个最核心的功能,只需要登录一个后台,就能管理所有域名邮箱的收件、发件功能。 打个比方,搞互联网的网友都知道,注册一个微信公众号or小程序就需要一个邮箱,而这些大厂的邮箱也能满足你的需求,但是你得一个一个的去登录,很麻烦。而这个系统能在一个页面内就解决这些问题,非常方便。  如上图,点击红框内的这个小“+”,就能增加一个邮箱,发件、收件在这一个页面内就能完成。 ##系统架构  **组件职责:** - **邮件路由(Email Routing)**:接收发往域名任意地址的邮件,按 Catch-all 规则转发给 Worker。 - **Worker**:系统大脑。`email()` 收信解析、`fetch()` 处理所有接口、`scheduled()` 定时清理回收站。 - **D1 数据库**:存邮箱列表、邮件、设置、广告、运行日志(SQLite 形态)。 - **R2 对象存储**:存邮件附件本体(数据库只存索引)。 - **前端面板(Assets)**:登录页 + 三栏邮件客户端,纯静态托管,跟着 Worker 一起部署。 - **运营后台(central.html)**:内联在 Worker 代码里,**不**作为静态文件暴露,且只对指定域名(默认 `mail.inurl.link`)放行。 - **Resend**:发信通道(国外服务,免备案,每月 3000 封免费)。国内已备案域名也可改用腾讯云邮件推送。 ### 一封邮件的旅程 > 别人给你域名下的任意邮箱发信时,系统是这样处理的: 外部发件人 → 邮件路由(全域名 Catch-all)→ Worker 解析入库 → 面板可读 + 微信推送 废话不多说了,开干吧。 ##一、准备工作 | 序号 | 准备项 | 说明 | | -- | ----------------------------- | --------------------------------------------- | | 1 | **Cloudflare 账号** | 免费,官网 cloudflare.com 注册 | | 2 | **一个域名**,且 DNS 托管在 Cloudflare | 这是收信的前提,域名可以在任何注册商购买,但要把 DNS 改到 Cloudflare | | 3 | **一台电脑** | Windows / Mac / Linux 都可以 | | 4 | **Node.js 18 以上** | 下面会教你怎么装 | | 5 | **发信账号(任选其一)** | Resend(海外,免费额度大)或 腾讯云邮件推送(国内);不配置也能收信,只是暂时不能发 | | 6 | **微信通知 token(可选)** | PushPlus / 企业微信机器人 / Server酱 等任意一个的 token | ##二、下载代码、安装环境 ####源码下载地址:https://inurl.link/inurl-exmail ###1 放好代码 把本目录整体复制(或解压)到你电脑的某个位置,比如 `D:\mail-panel` 或 `~/mail-panel`。 **记住这个路径**,后面所有命令都要先「进入这个目录」。 ###2 安装 Node.js 1. 打开浏览器访问 nodejs.org,下载左侧的「LTS」版本(长期支持版,最稳)。 2. 双击安装,一路点「下一步」即可。 3. 安装完成后,**重新打开**一个命令行窗口(Windows 用 PowerShell 或终端,Mac 用终端)。 4. 输入下面这行命令并回车,能看到版本号就说明装好了: ```bash node -v ``` > 显示类似 `v20.x.x` 或 `v22.x.x` 都正常。如果提示「找不到命令」,说明没装好或没重启终端,重来一次。 ###3 进入代码目录 在命令行里输入(把路径换成你自己的): ```bash cd D:\mail-panel ``` > 后面所有命令都要保证你「已经在这个目录下」再执行。 --- ##三、修改 wrangler.toml(共 5 处) 这个文件是整个系统的「部署配置」,里面有 5 个地方需要你改成自己的。用任意文本编辑器(记事本也行,推荐用 VS Code)打开本目录下的 `wrangler.toml`。 找到下面这几行,按说明改: | 行 | 原来长这样 | 你改成 | 说明 | | --------------- | --------------------------------------------- | ----------------------------------------------------------------------- | ------------------------- | | ① name | `name = "mail-panel"` | 一般**不用改**,保持 `mail-panel` 即可;若提示名字被占,改成一个独一无二的,比如 `mail-panel-zhangsan` | Worker 的项目名,只能小写字母/数字/短横线 | | ② MAIL_DOMAIN | `MAIL_DOMAIN = "your-domain.com"` | 改成**你的域名**,例如 `MAIL_DOMAIN = "wo-de-domain.com"` | 系统靠它判断邮件属于哪个域名 | | ③ database_name | `database_name = "maildb"` | 一般**不用改** | 数据库名,第⑥步建库时会用到 | | ④ database_id | `database_id = "" # ← 执行 ... 后把返回的 ID 填到这里` | **先空着**,等第⑥步走完把返回的 ID 填进来 | 后面步骤会拿到 | | ⑤ bucket_name | `bucket_name = "mail-attachments"` | 一般**不用改** | 附件存储桶名,第⑦步建桶时会用到 | > 改完保存文件。**只改上面 5 处的值,不要动其它行、不要删掉引号。** ##四、登录 Cloudflare 在代码目录的命令行里执行: ```bash npx wrangler login ``` 执行后,它会自动打开你的浏览器,让你登录 Cloudflare 并授权。按提示点「允许 / Authorize」即可。 > 如果浏览器没自动弹出来,命令行里会给出一个网址,复制它到浏览器打开也一样。 > 看到 `Successfully logged in.` 之类提示就成功了。 --- ## 五、创建数据库(D1) ###1 建库 ```bash npx wrangler d1 create maildb ``` 执行后,命令行会返回一段内容,里面有一行类似: ``` database_id = "a1b2c3d4-1234-5678-9abc-def012345678" ``` **把这串 ID 复制下来**。 ###2 把 ID 填回配置 回到 `wrangler.toml`,找到第④行的 `database_id = ""`,把引号里填上刚才复制的 ID: ```toml database_id = "a1b2c3d4-1234-5678-9abc-def012345678" ``` 保存。 ###3 初始化表结构 ```bash npx wrangler d1 execute maildb --remote --file=./schema.sql ``` > 这步会在数据库里建好所有需要的表。看到 `executed` / 成功提示即可。 > 注意 `schema.sql` 是本目录里已经有的文件,不要删。 --- ##六、创建附件存储桶(R2) ```bash npx wrangler r2 bucket create mail-attachments ``` > 看到 `Created bucket mail-attachments` 之类的提示就成功了。 > 桶名要和 `wrangler.toml` 里的 `bucket_name` 一致(默认就是 `mail-attachments`)。 --- ##七、设置登录密码和签名密钥 系统后台需要密码登录,密码通过「密钥(secret)」方式设置,不会写进代码文件。 ###1 设置后台登录密码 ```bash npx wrangler secret put ADMIN_PASSWORD ``` 回车后,命令行会让你「输入值」,输入你想用的密码(比如 `MyMail2026!`),回车确认。 > 这个密码就是你以后登录面板的密码,请记好。 ###2 设置签名密钥 ```bash npx wrangler secret put AUTH_SECRET ``` 回车后输入任意一长串随机字符(比如随手敲 30 位英文+数字),回车确认。 > 这串字符用于登录安全签名,越乱越好,不用记住。 --- ##八、安装依赖并部署 ###1 安装依赖 ```bash npm install ``` > 第一次会装一些工具,等它跑完(可能几十秒到一两分钟)。 ###2 正式部署 ```bash npx wrangler deploy ``` 看到类似下面的输出就成功了: ``` Uploaded mail-panel (x.xx sec) Deployed ... triggers https://mail-panel-xxxx.workers.dev ``` > `https://xxxx.workers.dev` 是系统自带的一个临时网址,先记下来,用来临时访问。 > 真正的收信要用你自己的域名(下一步配置)。 --- ##九、开启收信(最关键的一步) 没有这一步,系统能登录但**收不到任何邮件**。 1. 打开 Cloudflare 控制台,进入**你的域名**。 2. 左侧菜单找到 **电子邮件路由(Email Routing)**。 3. 第一次用会让你先「启用电子邮件路由」,按提示添加两条验证记录(Cloudflare 会告诉你加哪两条 DNS 记录,照着加)。 4. 进入 **电子邮件路由 → 路由规则(Routing rules)**。 5. 找到 **Catch-all 地址(兜底地址)**,点「添加 / 编辑」。 - 动作(Action)选择:**发送到 Worker(Send to Worker)** - Worker 选择:刚才部署的 `mail-panel` 6. 保存。 ### 测试收信 用别的邮箱(比如你的 QQ 邮箱)发一封信到 `随便一个名字@你的域名`,例如 `test@wo-de-domain.com`。 等十几秒,打开面板(下一步登录),应该就能在收件箱看到这封信了。 > 重点:`Catch-all` 的意思就是「发往这个域名任意地址的邮件都收下来」。所以你不用提前建邮箱,来一封就多一个。 --- ##十、登录后台做初始设置 1. 浏览器访问 `https://你的域名`(或临时的 `https://xxxx.workers.dev`)。 2. 进入**登录页**,账号默认是 `admin`,密码是你在第八步设置的 `ADMIN_PASSWORD`。 3. 登录后进入面板,找到**设置**(通常在右上角或侧边栏)。 4. 在设置里补全两项(建议尽早配,否则不能发信 / 没有微信提醒): - **发信通道**:填 Resend 的 API Key,或腾讯云邮件推送的密钥(按面板提示填)。 - **微信通知**:填 PushPlus / 企业微信机器人 等的 token,新邮件就会推到微信。 --- 通过上面的一通操作,你就能真正拥有一个属于自己的、无限制的企业域名邮箱了。 ## 常见问题(FAQ) **Q1:部署时报错 `database_id` 相关?** → 回到 `wrangler.toml` 确认第④行已经填了第六步返回的 ID(带引号)。 **Q2:收不到邮件?** → 检查三件事:① 域名的 DNS 是否真的托管在 Cloudflare;② 电子邮件路由的 Catch-all 是否设为「发送到 Worker → mail-panel」;③ 等 1~2 分钟再试,DNS 生效需要时间。 **Q3:能登录但发不出信?** → 发信通道(Resend / 腾讯云)的密钥没填或填错;先去设置里配好。 **Q4:本地预览怎么弄?** → 在代码目录执行 `npx wrangler dev`,打开 `http://localhost:8787`,用本地 `.dev.vars` 里的账号密码登录(详见 `.dev.vars.example`)。 **Q5:我要改面板里的品牌 / 文案?** → 前端文件在 `public/` 目录下(`index.html` 是首页、`app.html` 是面板),样式在 `public/style.css`,可自由修改后重新 `npx wrangler deploy`。 标签: 无
评论已关闭