• Doone

    各位 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 🙏

    图片

    图片

    图片

    图片

    图片

    主楼
  • sibyl98

    不错不错

    #1
  • anarkh35

    感谢分享!

    #2
  • AppIe

    喜欢😘

    #3
  • BoYaJun

    很强大佬,感谢分享

    #4
  • 不过尔尔

    这个不错

    #5
  • Na

    感谢分享 ^-^

    #6
  • xq772

    mark 备用

    #7

发表回复

登录后回复