Mail-Hook:打造属于自己的多域名邮件系统
Galaxy
|
2026-10-01 19:20
|
379 次浏览 |
自研代码
邮箱
代码
自研
**前言 :** 做 MailHook 这个项目的起因很简单,我需要一个能自动提取验证码的临时邮箱系统,顺便兼顾一下我博客的发邮箱信息(谁让服务商不开放25端口,且465端口发信承接不了很大批量的信息)
**具体架构为:** 多域名解析到Cloudflare使用 CF email邮件服务器负责接信,Resend 负责发信,拥有网页版+桌面版
### 展示:


#### 部署教程
1. ***部署自购域名 或者 获取免费域名***
**注: 必须解析到Cloudflare上面方便部署 二级域名可能发信被抬到垃圾箱哦 如果只用于收信那就没事了**
打开[https://my.dnshe.com/clientarea.php](https://my.dnshe.com/clientarea.php) 不是广告哈

上图为能解析到CF上面的域名哦
2. ***Cloudflare 部署收信服务***
打开 [Cloudflare](https://dash.cloudflare.com/) 进入电子邮件服务页面 点击已经在Cloudflare上面解析的域名

选择接入的域名

激活接入域名

点击激活 会自动转跳 转跳之后选择Worker创建一个worker

选择代码编辑器 粘贴Github代码 里面的worker.js里面的代码 选择保存发布即可

到设置 添加变量 添加MAILHOOK_URL你准备部署邮件服务器的url 例如https://XXXX.com/mail-hook.php(mail-hook.php必须加) 与 HOOK_SECRET 变量 (后面MAIL Hook后台 回调密钥)(部署完服务器再填写)

回到刚刚创建的电子邮件服务 进入路由规则 启用全收点击三个点 编辑规则 转发到worker 选择你刚创建worker名称 点击保存

3. 发信服务部署 我代码只写了resend平台 大家可以自行添加 欢迎各位贡献 帮助完善代码
[resend](https://resend.com/) 进行注册 (Resend每天发信额度为 每日100封)
注册成功先添加一个api密钥 一定要记住

在域名页面点击添加域名 输入刚刚CF解析的域名

在resend平台上把给出的DNS记录在Cloudflare上面 域名管理页面 DNS记录一一 进行添加 千万不要打开Cloudflare上面添加DNS记录的代理 功能 **(注dnshe的二级域名 一定要只填send rsend)** 分清楚DNS类型

然后回Rsend 点击 ***I've added the records***
等待验证完成DNS

验证完成

4. 部署Mail Hook
***环境要求***
| 软件 | 版本 |
| ---------- | ------- |
| Nginx | 1.28.3 |
| PHP | 8.0+ |
| MySQL | 5.7 |
| phpMyAdmin | 可选 |

新建网站 数据库后 上传Github 0.1.1版本后台文件

导入数据库

配置数据库

部署完成进 https://mail.xxx.com/admin 根据实际填写即可

进入后台 设置 复制生成的回调密钥 然后进入CF 刚刚邮件worker中变量 粘贴HOOK_SECRET 密钥值

然后在后台添加域名 这样就完整配置好了

5. 配置桌面端 (在Github中下载桌面端安装包)
填写服务器地址

输入用户名密码

进入主界面OK了

6. **API超高可玩性**
#### 1. 查最新邮件(注册脚本最常用)
按邮箱前缀查最新一封邮件,自动提取 4-6 位验证码。
```
GET /api.php?action=get_mail&prefix=abc
GET /api.php?action=get_mail&recipient=abc@example.net
```
**Query 参数**(三选一,优先级:recipient > prefix > domain):
| 参数 | 必填 | 说明 |
|------|------|------|
| `recipient` | 否 | 完整邮箱地址,精确匹配 |
| `prefix` | 否 | 邮箱前缀,如 `abc`,会匹配 `abc@*` |
| `domain` | 否 | 配合 prefix,限定域名,默认 `%`(匹配所有)
---
#### 2. 邮件列表
```
GET /api.php?action=list_mails&limit=50&prefix=abc
```
| 参数 | 必填 | 默认 | 说明 |
|------|------|------|------|
| `limit` | 否 | 50 | 1-100,最多返回 100 条 |
| `prefix` | 否 | — | 按收件人前缀过滤 |
---
#### 3. 邮件详情
```
GET /api.php?action=mail_detail&id=123
```
| 参数 | 必填 | 说明 |
|------|------|------|
| `id` | 是 | 邮件 ID |
同 get_mail 的 data 字段,但无自动提取的 `code`。
---
## 最后
MailHook 从最开始的一个“小需求”发展到现在,已经不只是一个简单的临时邮箱项目。
最初只是因为需要一个能够自动获取验证码的邮箱,同时解决自己博客发信以及服务器端口受限的问题,于是尝试把 Cloudflare Email Routing、Worker、Resend 和自己的邮件管理系统组合起来,最终慢慢做成了现在这个支持 **收信、发信、验证码自动提取、API 调用、网页版以及桌面端** 的完整邮件系统。目前项目还有很多可以继续完善的地方。
目前发信部分我只实现了 Resend,后续也欢迎大家贡献其他邮件服务商的适配代码。如果你有更好的实现方式,也欢迎提交 Issue 或 Pull Request,一起把这个项目完善起来。
## 项目地址
MailHook 已经正式开源。项目源码、桌面端程序、更新记录以及后续版本都会在 GitHub 持续维护。
**GitHub 项目主页:** [Mail-Hook](https://github.com/sirvffg/Mail-Hook)
如果你在部署或者使用过程中遇到了问题,可以直接提交 Issue;如果你有新的功能想法或者代码改进,也欢迎提交 Pull Request。
## 欢迎参与贡献
MailHook 目前还处于持续开发阶段,还有很多值得完善的地方。
欢迎大家:
* 提交 **Issue**,反馈 Bug 或提出功能建议
* 提交 **Pull Request**,贡献代码
* 接入更多邮件发送服务商
* 完善邮件解析和验证码提取能力
* 增加新的 API
* 改进网页版和桌面端体验
* 完善部署文档
* 分享更多实际使用场景
如果你觉得 MailHook 对你有帮助,也欢迎给项目点一个 **Star ⭐**。
一个最初只是为了满足自己需求而诞生的小项目,希望最终能够变成一个真正实用、自由、可扩展的开源邮件系统。
**感谢看到这里,也欢迎加入 MailHook,一起折腾更多有意思的功能。**
提示:本文最后更新时间为 2026-10-01 22:06,如文中内容素材有错误或者已经失效,请留言告知。