各位 MJJ 好,分享一个自己写的小工具,跑在 Mail-in-a-Box(MIAB)上。
GitHub:https://github.com/Doone-skser/one-mail (MIT)
起因
手上有台跑 MIAB 的小鸡,开了一堆域名邮箱拿来注册各种服务。问题是经常要让朋友/家人/同事帮忙收个验证码:
- 把邮箱密码给出去?不放心,也收不回来
- 自己盯着转发?半夜被叫起来看验证码,烦
- 用 Cloudflare 临时邮箱?那是一次性地址,不是我已有的真实邮箱
所以写了 OneMail:管理员给某个邮箱生成一条免登录、只读的取件链接,发给对方,对方打开就能看到收件箱,验证码自动提取、大字显示、一键复制。 链接可以设有效期、随时撤销,谁什么时候从哪个 IP 看过都有记录。
功能
取件页(对方看到的)
- 「验证码」Tab:只列出识别到验证码的邮件,大字 + 一键复制
- 「全部邮件」Tab:完整收件箱,分页
- 每 5 秒轻量轮询,有新邮件才刷新
- 验证码识别:中英文关键词邻近匹配(验证码/动态码/code/OTP/PIN…),避开年份、订单号误抓
- 邮件详情:HTML 正文 iframe 沙箱渲染,远端图片默认屏蔽(防追踪),附件可下载
- 链接过期/撤销后显示中文提示页,邮箱地址可打码
管理端(直接用 MIAB 管理员账号登录)
- 一键添加新邮箱(调 MIAB API,密码可自动生成),建完马上能发取件链接
- 生成链接:1 天 / 7 天 / 30 天 / 永久
- 延期(URL 不变)、重置 token、撤销/启用、删除
- 每条链接的访问日志:时间 / IP / UA
跟同类项目比
|
OneMail |
cloudflare_temp_email |
AuthInbox |
|---|
运行位置 |
自己的 MIAB 服务器 |
CF Workers |
CF Workers |
定位 |
已有真实邮箱的只读分享 |
临时邮箱 |
临时接码 |
第三方依赖 |
无,数据自控 |
CF Email Routing |
CF Email Routing |
验证码提取 |
✅ |
❌ |
✅ |
链接有效期/撤销/访问审计 |
✅ |
❌ |
❌ |
想要免费一次性临时邮箱,选 cloudflare_temp_email;想把自己服务器上的真实邮箱安全地给别人收码,可以试试这个。
技术栈
Python + Flask + gunicorn + sqlite,前端纯 CSS + 原生 JS,没用任何框架。直接只读 Maildir 文件,不改 MIAB 任何配置,nginx 只加一个独立 conf,MIAB 升级不受影响。
安全方面
毕竟是免登录链接,这块下了点功夫:
- 登录防爆破:10 分钟失败 5 次锁 15 分钟
- token 防枚举:同 IP 一分钟无效请求超 20 次返回 429
- 附带 fail2ban 规则,爆破直接封 IP
- CSRF 校验、CSP / HSTS 等安全响应头、Cookie HttpOnly + Secure
- systemd 沙箱加固
- Maildir 路径白名单校验,防路径穿越
部署
前提是已经装好 MIAB。大致流程:拷代码 → 建 venv 装依赖 → 装 systemd 服务 → 加 nginx conf → certbot 签证书 → (可选)fail2ban。README 里有从零开始的完整命令,十分钟左右能跑起来。
最后
自用为主,代码就一个 app.py 加几个模板,想改也好改。有问题或建议欢迎回帖或者提 issue,觉得有用的话点个 Star 🙏




