OutlookMail Plus 是一款面向个人与团队的注册邮箱管理器。
与市面上通用型邮箱客户端不同,它更聚焦在注册与验证场景,并围绕注册流程做了深度优化。
- 专为注册而生:尽量减少注册流程中不必要的操作。你可以一键复制邮箱地址;在注册页发送验证邮件后,回到管理器点击“验证码”,即可自动拉取最新验证邮件,并用正则快速提取验证码或验证链接,尽量减少等待。
- 更轻、更专注:舍弃发件等非核心能力,界面更清爽,所有设计都围绕“把注册跑通”。
- 导入兼容更广:支持主流邮箱导入(Gmail、QQ、163 等),也支持自定义 IMAP 服务器。即使是自建邮箱也能使用;内置 CF Worker 临时邮箱,支持多域配置与 Admin Key 加密,大幅降低注册场景的隐私泄露风险。
- 支持自动化:对外提供接口,支持批量自动化注册流程;邮箱池支持
project_key项目隔离领取。对于长期邮箱,在领取阶段显式传入project_key + caller_id + task_id时,同项目成功账号不会被重复分配,claim-complete(result=success)后会直接回到available,并可被其他项目立即复用;临时邮箱 /cloudflare_temp_mail继续沿用旧语义。获取接码与释放邮箱等能力一应俱全。 - 第三方通知:支持第三方渠道通知,当前已接入 Telegram;重点邮箱收到邮件可自动推送提醒。
简而言之,OutlookMail Plus 是一款为“注册流程”打造的邮箱管理器。
演示站点:https://demo.outlookmailplus.tech/
登录密码:12345678
站点内置 10 个邮箱账号用于演示,数据会定期重置。请勿删除演示账号或将其用于个人用途。
演示涵盖本项目的主要功能(Telegram 推送因需要额外配置,演示站未启用)。
当前仓库已包含部分截图,后续将继续补充更多演示图片。
当前稳定版本:v2.1.0
| 版本 | 日期 | 核心新功能 |
|---|---|---|
| v2.1.0 | 2026-04 | 📊 数据概览大盘:5 Tab 统一看板(总览 / 验证码提取 / 对外 API / 邮箱池 / 系统活动),新增 verification_extract_logs 统一观测链路,并修复浏览器扩展 API Key 复制与 overview i18n/实时刷新问题 |
| v2.0.0 | 2026-04 | 🌐 浏览器扩展(Chrome/Edge MV3):一键申领邮箱 → 自动提取验证码/链接 → 完成/释放,无需切换标签页;后端新增 chrome-extension:// CORS 跨域支持 |
| v1.19.0 | 2026-04 | 🔧 刷新失败提示结构化增强(错误码 + 可执行步骤 + trace 反馈指引);Selected 账号刷新提前失败修复(Issue #45) |
| v1.18.0 | 2026-04 | 🔄 邮箱池项目成功复用:显式携带 project_key + caller_id + task_id 时,success 后直接回到 available,支持跨项目立即复用(DB v22) |
| v1.17.0 | 2026-04 | 🪝 Webhook 通知通道:全局单 URL 配置,与 Email/Telegram 并存;X-API-Key 随机生成快捷入口 |
| v1.16.0 | 2026-04 | 🔑 OAuth Token 工具升级:新增"获取授权链接"模式,稳定支持跨环境授权 |
| v1.15.0 | 2026-04 | 🤖 AI 验证码增强:系统级 AI fallback(双低置信才触发),固定 JSON 契约;邮箱别名(+tag)自动识别与回溯 |
| v1.13.0 | 2026-04 | ⚡ 一键热更新:Watchtower(推荐)和 Docker API 双模式,自动检测新版本弹出提示 |
| v1.11.0 | 2026-04 | 🏊 邮箱池项目隔离(project_key);CF Worker 多域 + Admin Key 加密;前端账号列表分页;统一轮询引擎 |
| v1.9.0 | 2026-03 | 🌐 双语界面(中/英);统一通知分发(Email + Telegram);演示站点登录密码保护 |
- 新增 5 Tab 数据概览大盘,替换旧 dashboard
- 新增
verification_extract_logs,统一观测普通账号 / 临时邮箱 / external API 提取链路 - 修复浏览器扩展“API 无效”的真实根因:复制脱敏 API Key 与 external pool / pool_access 前置条件认知偏差
- overview 前端补齐实时重拉与完整 i18n,页头 / Tab / hover note / timeline 现与主体卡片保持一致
browser-extension/ 目录包含 Chrome/Edge Manifest V3 扩展,详见 浏览器扩展 章节。
- 新增独立 Token 工具窗口,以兼容账号导入模式获取 Microsoft refresh token
- 当前模式固定面向个人 Microsoft 账号:Public Client、
tenant=consumers、不支持client_secret - Azure 应用注册的 Supported account types 应选择 Accounts in any identity provider or organizational directory and personal Microsoft accounts;仅组织目录会报
unauthorized_client,而 Personal Microsoft accounts only 会在写入前/common验证阶段报AADSTS9002331 - 如果 Azure 门户在切换 Supported account types 时提示
Property api.requestedAccessTokenVersion is invalid,请到 Manifest 中把api.requestedAccessTokenVersion改为2 - 如果已经开启 Public Client 仍然报"必须包含
client_secret",说明当前回调仍被 Azure 视为机密 Web 客户端;此时应改用 Mobile and desktop applications 平台的 public redirect(如http://localhost),并在工具里走手动粘贴回调 URL - 如果遇到
AADSTS70000(scope 未授权/失效),优先检查"授权时 scope"和"验证时 scope"是否一致,并重新执行一次 强制 Consent 授权 - Graph 场景建议最小权限:offline_access + Mail.Read + User.Read;如需 IMAP 再额外补 Office 365 Exchange Online → IMAP.AccessAsUser.All
- 支持 Graph / IMAP Scope 预设、错误引导、JWT audience/scope 诊断;前端默认推荐 Graph 邮件预设(后端环境变量 fallback 保持 IMAP 兼容 Scope)
- 页面内置 Azure 应用注册快速指引折叠卡片(5 步)与教程入口:https://real-caption-6d1.notion.site/OutlooKMailplus-token-344463aed7e680099380dc324ecdf1c9?source=copy_link
- 支持一键写入已有 Outlook 账号或创建新账号,写入前自动验证 refresh token,并拒绝不兼容配置
- 支持两种更新方式:Watchtower(推荐)和 Docker API 自更新(高级)
- 自动检测 GitHub 最新版本,界面弹出更新提示
- 完整的部署信息检测:镜像标签、本地构建、Watchtower 连通性等
- Watchtower 已是最新版本智能检测(基于 Watchtower 同步行为)
- Docker API 模式 digest 预检查,相同版本不触发无效更新
- 邮箱池项目隔离:
project_key防止同项目重复领取(DB v17) - CF Worker 临时邮箱多域支持:设置页配置多个域名,"同步域名"按钮一键刷新
- Admin Key 加密存储:
cf_worker_admin_key以enc:前缀加密写入数据库(DB v18) - 账号列表前端分页:每页 50 条,大量账号时列表加载更流畅
- 统一轮询引擎:标准模式与简洁模式合并为单一
poll-engine,修复竞态与状态积压
- 多邮箱账号管理 支持 Outlook OAuth、普通 IMAP 邮箱和 CF Worker 临时邮箱(多域配置,Admin Key 加密存储)
- 批量导入与分组整理 支持批量导入、标签、搜索、分组、导出
- 邮件读取与提取 支持验证码、链接、原文内容读取
- 邮箱池调度
支持可领取、释放、完成、冷却恢复、过期回收等状态流转;长期邮箱支持
project_key项目维度成功复用:同项目按 success 记录防重复领取,success后回到available,跨项目可立即复用;未传project_key与provider=cloudflare_temp_mail/ 临时邮箱继续保持旧语义;claim-random仍支持池空时动态创建 CF 邮箱 - 受控对外接口
支持
X-API-Key鉴权、多调用方 Key 管理、邮箱范围授权、IP 白名单和速率限制 - 通知能力 支持业务邮件通知、Telegram 推送和测试发送
- 演示站点保护 可通过环境变量锁定登录密码修改入口,避免访客在设置页改后台密码
outlook_web/ Flask 应用主体(controllers / routes / services / repositories)
templates/ 页面模板
static/ 前端脚本与样式
data/ SQLite 数据与运行时文件
tests/ 自动化测试
web_outlook_app.py 兼容入口
方式一:docker run(快速体验)
docker run -d \
--name outlook-email-plus \
-p 5000:5000 \
-v $(pwd)/data:/app/data \
-e SECRET_KEY=your-secret-key-here \
-e LOGIN_PASSWORD=your-login-password \
-e ALLOW_LOGIN_PASSWORD_CHANGE=false \
guangshanshui/outlook-email-plus:latest方式二:docker-compose(推荐,含一键更新)
保存以下内容为 docker-compose.yml,然后运行 docker-compose up -d:
services:
app:
image: ghcr.io/zeropointsix/outlook-email-plus:latest # 推荐(国内网络稳定)
# image: guangshanshui/outlook-email-plus:latest # Docker Hub 备选
container_name: outlook-email-plus
restart: unless-stopped
ports:
- "5001:5000" # 可改为 5000:5000 或其他端口
env_file:
- .env
environment:
SECRET_KEY: "${SECRET_KEY:?请在 .env 中设置 SECRET_KEY}"
# 一键更新 Token:留空即可直接使用内置默认值;生产环境建议设为随机强密码
WATCHTOWER_HTTP_API_TOKEN: "${WATCHTOWER_HTTP_API_TOKEN:-outlook-mail-plus-watchtower-default}"
# Docker API 自更新(可选,高级功能)
# ⚠️ 启用后容器可通过 Docker API 控制宿主机其他容器,存在安全风险
# DOCKER_SELF_UPDATE_ALLOW: "false"
volumes:
- ./data:/app/data
# Docker socket 挂载(可选,仅用于 Docker API 自更新功能)
# ⚠️ 挂载 docker.sock 会授予容器完全的 Docker API 访问权限,请谨慎使用
# - /var/run/docker.sock:/var/run/docker.sock
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- outlook-net
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
# 与上方 app 服务保持一致;留空时两边同步使用内置默认值,无需手动对齐
- WATCHTOWER_HTTP_API_TOKEN=${WATCHTOWER_HTTP_API_TOKEN:-outlook-mail-plus-watchtower-default}
- WATCHTOWER_HTTP_API_UPDATE=true
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_HTTP_API_PERIODIC_POLLS=false
command: --http-api-update --label-enable
labels:
- "com.centurylinklabs.watchtower.enable=false"
networks:
- outlook-net
networks:
outlook-net:
driver: bridge说明:
- 建议始终挂载
data/,避免数据库与运行数据丢失 SECRET_KEY必须稳定且足够强,建议随机64位:python -c "import secrets; print(secrets.token_hex(32))"WATCHTOWER_HTTP_API_TOKEN可留空,留空时 app 和 watchtower 自动使用同一内置默认值,部署后一键更新即可使用- 配置好后,当有新版本时系统界面会自动弹出更新提示,点击"立即更新"即可完成升级
- 一键更新功能仅在 docker-compose 部署方式下有效;
docker run单容器模式不支持
更新方式:默认使用 Watchtower(推荐)。如需使用 Docker API 自更新(无需 Watchtower),需在 docker-compose.yml 中:
- 取消
DOCKER_SELF_UPDATE_ALLOW注释并设为"true" - 取消 docker.sock 挂载注释
- 在设置页选择"更新方式"为"Docker API"
⚠️ 请充分了解安全风险后再启用
- 健康检查请显式使用
GET /healthz,不要依赖/、/login或 302 跳转链路;本项目首页/受登录保护,会重定向到/login no healthy upstream表示反向代理当前没有健康后端,不等于应用一定是“代码崩溃”;更新后若持续出现,优先查看新容器启动日志与平台事件- 若平台事件出现
Stopping container、FailedKillPod、KillPodSandbox DeadlineExceeded,说明故障至少包含平台侧 Pod 停止/回收异常,不能只根据应用日志下结论 - 本项目默认使用 SQLite + 持久卷,更新时建议保持单实例;若新旧实例短时并发访问同一数据库文件,启动阶段的迁移或文件锁等待可能导致健康检查超时
TEMP_EMAIL_UPSTREAM_READ_FAILED与no healthy upstream需要分开理解:前者是临时邮箱上游读取失败,后者是入口层前面没有健康应用实例
python -m venv .venv
pip install -r requirements.txt
python web_outlook_app.pypython -m unittest discover -s tests -vSECRET_KEY会话与敏感字段加密密钥,必须配置LOGIN_PASSWORD初始后台登录密码,首次启动后会写入数据库并哈希存储ALLOW_LOGIN_PASSWORD_CHANGE是否允许在设置页修改登录密码。演示站点建议设为falseDATABASE_PATHSQLite 数据库路径,默认data/outlook_accounts.dbPORT/HOSTWeb 服务监听地址SCHEDULER_AUTOSTART是否自动启动后台调度器OAUTH_TOOL_ENABLED是否启用 OAuth Token 获取工具入口与相关 API,默认trueOAUTH_CLIENT_IDOutlook OAuth 应用 IDOAUTH_CLIENT_SECRET兼容导入模式下应保持为空;如 Azure 应用依赖client_secret,则不属于当前支持范围OAUTH_REDIRECT_URIOutlook OAuth 回调地址OAUTH_SCOPE后端环境变量默认 Scope(fallback),默认offline_access https://outlook.office.com/IMAP.AccessAsUser.All;前端首次展示默认 Graph 预设OAUTH_TENANTToken 工具默认 Tenant,固定兼容模式consumersGPTMAIL_BASE_URLGPTMail 服务地址GPTMAIL_API_KEYGPTMail API Key,用于临时邮箱能力CF_WORKER_BASE_URL(设置页对应cf_worker_base_url) Cloudflare Temp Email Worker 地址CF_WORKER_ADMIN_KEY(设置页对应cf_worker_admin_key) Cloudflare Worker Admin 密码;建议仅通过设置页保存,系统会加密存储
WATCHTOWER_HTTP_API_TOKENWatchtower API 鉴权令牌。可留空,留空时 app 和 watchtower 两边自动使用同一内置默认值,开箱即用;生产环境建议设置随机强密码WATCHTOWER_API_URLWatchtower API 地址,默认http://watchtower:8080(Docker 内部网络,通常无需修改)DOCKER_SELF_UPDATE_ALLOW是否启用 Docker API 自更新功能,默认false。⚠️ 启用后容器可访问 Docker API,存在安全风险DOCKER_IMAGE当前容器镜像名(可选,用于部署信息检测)
安全提示:Docker API 自更新需要挂载
/var/run/docker.sock,这会授予容器完全的 Docker API 访问权限。生产环境建议使用 Watchtower 方式。
如果你准备启用“邮件通知”,需要额外配置 SMTP。邮件通知与 Telegram、GPTMail 是独立链路,不能互相替代。
最少需要配置:
EMAIL_NOTIFICATION_SMTP_HOSTEMAIL_NOTIFICATION_FROM
常见可选配置:
EMAIL_NOTIFICATION_SMTP_PORTEMAIL_NOTIFICATION_SMTP_USERNAMEEMAIL_NOTIFICATION_SMTP_PASSWORDEMAIL_NOTIFICATION_SMTP_USE_TLSEMAIL_NOTIFICATION_SMTP_USE_SSLEMAIL_NOTIFICATION_SMTP_TIMEOUT
示例:
EMAIL_NOTIFICATION_SMTP_HOST=smtp.qq.com
EMAIL_NOTIFICATION_SMTP_PORT=465
EMAIL_NOTIFICATION_FROM=your_account@qq.com
EMAIL_NOTIFICATION_SMTP_USERNAME=your_account@qq.com
EMAIL_NOTIFICATION_SMTP_PASSWORD=your_smtp_auth_code
EMAIL_NOTIFICATION_SMTP_USE_SSL=true
EMAIL_NOTIFICATION_SMTP_USE_TLS=false
EMAIL_NOTIFICATION_SMTP_TIMEOUT=15注意:
- 设置页中的测试邮件遵循“先保存,再测试”
- 测试接口不会直接读取输入框临时值
- 系统只会读取已保存的
email_notification_recipient
项目支持在设置页配置:
telegram_bot_tokentelegram_chat_idtelegram_poll_interval
当前版本中,Telegram 推送与业务邮件通知已经统一接入通知分发链路。
如果你要把本项目接入注册机、脚本平台或其他自动化系统,当前推荐方式是受控外部接口:
- 路径前缀:
/api/external/* - 鉴权头:
X-API-Key - 邮箱池接口:
/api/external/pool/*
当前外部接口支持:
- 单 Key 鉴权
- 多 Key 配置
- 按调用方限制邮箱范围
- 公网模式白名单与速率限制
- 可禁用原文读取、长轮询等高风险端点
注意:
- 旧匿名
/api/pool/*已移除 - 生产环境建议开启受控公网模式并配置白名单
browser-extension/ 目录包含配套的 Chrome / Edge 扩展(Manifest V3),提供「申领邮箱 → 获取验证码/链接 → 完成/释放」一站式快捷面板,无需切换标签页。
详细说明见 browser-extension/README.md。
项目 Key 用于邮箱池的多租户隔离:不同业务/项目的申领互不干扰,配合 caller_id + task_id 还能在同项目内防止重复分配。
- 不填:从公共邮箱池随机申领
- 填写:只在该项目的邮箱中申领;
success完成后邮箱立即回到available,可被其他项目复用
完成和释放都会结束当前任务,区别在于邮箱的后续状态:
| 操作 | 邮箱状态 | 适用场景 |
|---|---|---|
| 释放(Release) | → available(立即可再申领) |
注册失败、误领、测试归还 |
| 完成(Complete) | → used(已用,默认不再分配) |
注册成功、验证码已使用 |
启用项目复用时,
complete(result=success)+ 显式project_key路径会直接回到available,支持跨项目立即复用。
如果你要公开一个演示站点给其他人访问,建议至少这样配置:
LOGIN_PASSWORD=your-strong-password
ALLOW_LOGIN_PASSWORD_CHANGE=false- 站点仍然可以登录
- 访客无法在“系统设置”里改掉后台登录密码
如果你要对接注册机或批量工作流,优先看邮箱池和外部接口文档。
本项目基于以下技术与服务能力构建:
- Flask
- SQLite
- Microsoft Graph API
- IMAP
- APScheduler
外部友链:https://linux.do/
也参考了以下项目的思路:
Apache License 2.0
如果你在使用过程中遇到问题,或有合作意向,欢迎通过邮件联系:outlookmailplus@163.com



