正在加载文章...
请稍候

Mail-Hook:打造属于自己的多域名邮件系统

| | 379 次浏览 |
自研代码 邮箱 代码 自研
AI文章摘要

**前言 :** 做 MailHook 这个项目的起因很简单,我需要一个能自动提取验证码的临时邮箱系统,顺便兼顾一下我博客的发邮箱信息(谁让服务商不开放25端口,且465端口发信承接不了很大批量的信息) **具体架构为:** 多域名解析到Cloudflare使用 CF email邮件服务器负责接信,Resend 负责发信,拥有网页版+桌面版 ### 展示: ![网页端.png](/uploads/posts/2026-09/20260930_172731_6abcd6033130f.png) ![桌面端.webp](/uploads/posts/2026-09/20260930_172902_6abcd65eb2988.webp) #### 部署教程 1. ***部署自购域名 或者 获取免费域名*** **注: 必须解析到Cloudflare上面方便部署 二级域名可能发信被抬到垃圾箱哦 如果只用于收信那就没事了** 打开[https://my.dnshe.com/clientarea.php](https://my.dnshe.com/clientarea.php) 不是广告哈 ![1.png](/uploads/posts/2026-10/20261001_092637_6abdb6cdbcc7a.png) 上图为能解析到CF上面的域名哦 2. ***Cloudflare 部署收信服务*** 打开 [Cloudflare](https://dash.cloudflare.com/) 进入电子邮件服务页面 点击已经在Cloudflare上面解析的域名 ![2_compressed_80%.webp](/uploads/posts/2026-10/20261001_093005_6abdb79d8316b.webp) 选择接入的域名 ![3._compressed_80% (1).webp](/uploads/posts/2026-10/20261001_093613_6abdb90ddfcf5.webp) 激活接入域名 ![4_compressed_80%.webp](/uploads/posts/2026-10/20261001_094837_6abdbbf58192c.webp) 点击激活 会自动转跳 转跳之后选择Worker创建一个worker ![5_compressed_80%.webp](/uploads/posts/2026-10/20261001_095115_6abdbc9359f00.webp) 选择代码编辑器 粘贴Github代码 里面的worker.js里面的代码 选择保存发布即可 ![6_compressed_80%.webp](/uploads/posts/2026-10/20261001_095414_6abdbd46f0655.webp) 到设置 添加变量 添加MAILHOOK_URL你准备部署邮件服务器的url 例如https://XXXX.com/mail-hook.php(mail-hook.php必须加) 与 HOOK_SECRET 变量 (后面MAIL Hook后台 回调密钥)(部署完服务器再填写) ![7_compressed_80%.webp](/uploads/posts/2026-10/20261001_095542_6abdbd9ecbbc4.webp) 回到刚刚创建的电子邮件服务 进入路由规则 启用全收点击三个点 编辑规则 转发到worker 选择你刚创建worker名称 点击保存 ![8_compressed_80%.webp](/uploads/posts/2026-10/20261001_100233_6abdbf3942080.webp) 3. 发信服务部署 我代码只写了resend平台 大家可以自行添加 欢迎各位贡献 帮助完善代码 [resend](https://resend.com/) 进行注册 (Resend每天发信额度为 每日100封) 注册成功先添加一个api密钥 一定要记住 ![9_compressed_80% (2).webp](/uploads/posts/2026-10/20261001_104410_6abdc8fa4a4d7.webp) 在域名页面点击添加域名 输入刚刚CF解析的域名 ![11_compressed_80%.webp](/uploads/posts/2026-10/20261001_101731_6abdc2bbde034.webp) 在resend平台上把给出的DNS记录在Cloudflare上面 域名管理页面 DNS记录一一 进行添加 千万不要打开Cloudflare上面添加DNS记录的代理 功能 **(注dnshe的二级域名 一定要只填send rsend)** 分清楚DNS类型 ![12_compressed_80%.webp](/uploads/posts/2026-10/20261001_103338_6abdc6823379e.webp) 然后回Rsend 点击 ***I've added the records*** 等待验证完成DNS ![13_compressed_80% (1).webp](/uploads/posts/2026-10/20261001_105548_6abdcbb47ab16.webp) 验证完成 ![14_compressed_80%.webp](/uploads/posts/2026-10/20261001_105338_6abdcb32e50d6.webp) 4. 部署Mail Hook ***环境要求*** | 软件 | 版本 | | ---------- | ------- | | Nginx | 1.28.3 | | PHP | 8.0+ | | MySQL | 5.7 | | phpMyAdmin | 可选 | ![webp](/uploads/posts/2026-10/20261001_192002_6abe41e24fc62.webp) 新建网站 数据库后 上传Github 0.1.1版本后台文件 ![15_compressed_80%.webp](/uploads/posts/2026-10/20261001_111442_6abdd02234053.webp) 导入数据库 ![16_compressed_80%.webp](/uploads/posts/2026-10/20261001_111340_6abdcfe4cd931.webp) 配置数据库 ![17_compressed_80%.webp](/uploads/posts/2026-10/20261001_111132_6abdcf642bdb0.webp) 部署完成进 https://mail.xxx.com/admin 根据实际填写即可 ![18_compressed_80%.webp](/uploads/posts/2026-10/20261001_111625_6abdd089054e2.webp) 进入后台 设置 复制生成的回调密钥 然后进入CF 刚刚邮件worker中变量 粘贴HOOK_SECRET 密钥值 ![19_compressed_80%.webp](/uploads/posts/2026-10/20261001_111803_6abdd0ebbbf3d.webp) 然后在后台添加域名 这样就完整配置好了 ![20.png](/uploads/posts/2026-10/20261001_112542_6abdd2b68d6c2.png) 5. 配置桌面端 (在Github中下载桌面端安装包) 填写服务器地址 ![21_compressed_80%.webp](/uploads/posts/2026-10/20261001_112737_6abdd3294f6cd.webp) 输入用户名密码 ![22_compressed_80%.webp](/uploads/posts/2026-10/20261001_112856_6abdd378391b8.webp) 进入主界面OK了 ![23_compressed_80%.webp](/uploads/posts/2026-10/20261001_113023_6abdd3cfebf4f.webp) 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,如文中内容素材有错误或者已经失效,请留言告知。
版权声明

本文作者:Galaxy

本文链接: https://lygalaxy.cn/blog.php?id=44

许可协议: CC BY-NC-ND 4.0

协议说明: 允许他人非商业性共享作品,必须注明原作者及来源,不得修改、衍生或用于商业目的

本站所有文章除特别声明外,均采用上述许可协议。转载请注明文章出处!

×