本仓库是由 TQZHR 维护的 Outlook/Hotmail 邮箱管理和接码工具,基于原 assast/outlookEmail 项目继续改造。当前版本重点是多用户隔离、管理密钥授权、账号池管理、定时刷新、邮件转发,以及本地 Flask、Docker 和 Cloudflare Worker Native Backend 三种运行方式。
核心领域模型、权限边界和运行时约束见 ADT 文档。
- 多用户注册、登录、禁用、删除和管理员用户管理。
- 管理员可管理全部用户和全部邮箱,普通用户只能访问本人数据。
- 管理密钥按创建者授权,支持生成、轮换、禁用和审计。
- Outlook/Hotmail OAuth + Microsoft Graph 取信和 refresh token 刷新。
- 标准 IMAP 账号导入、文件夹解析、邮件详情和附件读取。
- 邮箱分组、标签、别名、备注、批量移动、批量删除和批量转发开关。
- 项目账号池接口,支持随机领取、成功完成、失败重置、别名邮箱模式和分组作用域。
- 邮件验证码提取、收件箱/垃圾邮件/已删除邮件读取、批量标记已读和删除。
- SMTP、Telegram、企业微信转发,多通道转发日志和失败排查。
- 本地 APScheduler 定时刷新,Cloudflare Worker Cron 定时刷新和转发。
- Cloudflare Worker Native Backend 使用 D1 存储,直接提供登录、账号、取信和转发 API,不依赖 Flask 源站代理。
| 方式 | 适用场景 | 数据存储 |
|---|---|---|
Windows exe |
桌面单机使用 | %APPDATA%\OutlookEmail |
| 本地 Python | 开发、调试、小规模自用 | data/outlook_accounts.db |
| Docker / Docker Compose | 服务器部署 | ./data volume |
| Cloudflare Worker Native Backend | 无服务器部署、D1 存储、Worker Cron | Cloudflare D1 |
# 本地 Python 运行,会创建 .venv、.runtime/local.env 和 data/
.\scripts\deploy.ps1 -Target local -Port 5000
# Docker 运行,会生成 .env、SECRET_KEY、初始管理员和首次管理密钥
.\scripts\deploy.ps1 -Target docker -Port 5000
# Cloudflare Worker Native Backend + D1
$env:CLOUDFLARE_ACCOUNT_ID="your-account-id"
$env:CLOUDFLARE_API_TOKEN="your-api-token"
.\scripts\deploy.ps1 -Target cloudflare `
-WorkerName outlookemail-native `
-D1DatabaseName outlookemail-native `
-AdminUsername admin `
-AdminPassword "replace-with-a-strong-password"启动后访问 http://127.0.0.1:5000 或脚本输出的 Worker 地址。
git clone https://github.com/TQZHR/outlookjiema.git
cd outlookjiema
pip install -r requirements.txt
export SECRET_KEY="$(python -c 'import secrets; print(secrets.token_hex(32))')"
export ADMIN_USERNAME=admin
export ADMIN_PASSWORD=replace-with-a-strong-password
python web_outlook_app.pyWindows PowerShell 可使用:
$env:SECRET_KEY = python -c "import secrets; print(secrets.token_hex(32))"
$env:ADMIN_USERNAME = "admin"
$env:ADMIN_PASSWORD = "replace-with-a-strong-password"
python web_outlook_app.pycp .env.example .env
# 编辑 .env,至少设置 SECRET_KEY 和 ADMIN_PASSWORD
docker compose up -d --build
docker compose logs -fdocker-compose.yml 默认从当前源码构建本地镜像 outlookemail:local,并把 ./data 挂载到容器内 /app/data。
cd cloudflare-worker
npm install
npm run check
cd ..
$env:CLOUDFLARE_ACCOUNT_ID="your-account-id"
$env:CLOUDFLARE_API_TOKEN="your-api-token"
.\scripts\deploy.ps1 -Target cloudflare `
-WorkerName outlookemail-native `
-D1DatabaseName outlookemail-native `
-AdminUsername admin `
-AdminPassword "replace-with-a-strong-password"脚本会创建或复用 D1 数据库、应用迁移、部署 Worker、写入 SECRET_KEY、ADMIN_USERNAME 和 ADMIN_PASSWORD Worker secrets。CLOUDFLARE_API_TOKEN 只从当前进程环境读取,不会写入仓库。
| 变量 | 说明 | 默认值 |
|---|---|---|
SECRET_KEY |
Session、管理密钥哈希和敏感数据加密的根密钥 | 服务器部署必须显式设置 |
ADMIN_USERNAME |
初始管理员用户名 | admin |
ADMIN_PASSWORD |
初始管理员密码 | admin |
DATABASE_PATH |
Flask/SQLite 数据库路径 | data/outlook_accounts.db |
APP_RUNTIME |
运行环境标识 | local |
SCHEDULER_ENABLED |
是否启用 Flask 内置 APScheduler | true |
CORS_ALLOWED_ORIGINS |
允许跨域调用 API 的 Origin,逗号分隔 | 空 |
MANAGEMENT_KEY_BOOTSTRAP |
首次部署注入初始管理密钥 | 空 |
生产环境必须固定 SECRET_KEY。更换 SECRET_KEY 会导致已有 Session、管理密钥、refresh token 和邮箱密码无法继续验证或解密。
- 设置
SECRET_KEY、ADMIN_USERNAME、ADMIN_PASSWORD。 - 启动本地、Docker 或 Worker 运行时。
- 使用管理员账号登录。
- 登录后立即修改管理员账号和密码。
- 按需开启普通用户注册和注册验证码。
- 用户分别导入自己的邮箱账号。
- 在账号列表点击邮箱后读取邮件和验证码。
- 在设置页生成管理密钥,用于外部系统或自动化 API 调用。
仓库包含以下工作流:
deploy-cloudflare-worker.yml:手动部署 Worker Native Backend + D1。docker-build-push.yml:构建并推送 GHCR 镜像,镜像名随仓库变为ghcr.io/tqzhr/outlookjiema。release.yml:按vX.Y.Z标签或手动输入版本构建 Windows 可执行文件、Docker 镜像和 GitHub Release。sync-main-to-dev.yml:把main同步到dev。
Cloudflare 部署需要在仓库 Secrets 中配置:
CLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_TOKENSECRET_KEYADMIN_PASSWORD
可选:
ADMIN_USERNAMED1_DATABASE_ID
| 路径 | 说明 |
|---|---|
web_outlook_app.py |
Flask 兼容入口,按 segment 加载主应用 |
outlook_web/segments/ |
Flask 数据模型、路由、取信、刷新、转发和调度逻辑 |
cloudflare-worker/ |
Worker Native Backend、D1 迁移和 Wrangler 配置 |
templates/ |
Flask 前端模板 |
static/ |
前端 CSS、JS、图标和背景资源 |
scripts/ |
本地、Docker、Cloudflare 一键部署脚本 |
tests/ |
Flask 多用户、项目池、IMAP、Worker 源码一致性测试 |
docs/ |
API、部署、安全、升级、排障和 ADT 文档 |
| 文档 | 内容 |
|---|---|
| ADT 文档 | 领域模型、权限不变量和运行时边界 |
| API 文档 | Session、管理密钥、对外 API 和业务 API |
| 部署指南 | 本地、Docker、Worker、Actions 和环境变量 |
| 安全说明 | 密钥、加密、CSRF、XSS、审计和备份 |
| 升级指南 | Docker、Windows、Python 和 Worker 升级策略 |
| 故障排查 | 登录、取信、密钥、数据库、Worker 和容器问题 |
| Worker Native Backend | Worker + D1 后端能力和部署检查 |
| 更新记录 | TQZHR 维护版变更 |
| 发版说明 | 版本号、标签、Release 和镜像发布流程 |
仓库已通过 .gitignore 排除以下敏感或本地生成内容:
.envdata/.runtime/.venv/cloudflare-worker/.dev.varscloudflare-worker/.wrangler/node_modules/- 数据库、日志和构建产物
不要把真实 Cloudflare API Token、邮箱密码、refresh token、管理密钥、数据库文件或生产 SECRET_KEY 提交到 GitHub。
本项目仅用于学习、研究和技术交流。使用者应遵守邮箱服务商、云平台和相关平台的服务条款,不得用于违规、滥用或非法用途。因使用本项目产生的风险和后果由使用者自行承担。