这份文件给新的 AI 代理或新接手开发者快速建立上下文。
如果你刚进入仓库,优先按这个顺序理解项目:
README.mddocs/architecture.mddocs/development.mdjemail-app/main.jsjemail-backend/backend/app.py
当前生产主线只有两部分:
jemail-app/jemail-backend/
不要把下面这些当成当前生产代码:
outlook-manager/:早期原型- 根目录
docker-compose.yml和.env.example:早期 Nextcloud 尝试 server-backups/:备份数据,不参与当前开发
这是一个“前端本地存账号,后端按需拉邮件”的系统:
- 账号和分组主要保存在浏览器
IndexedDB - 后端不维护长期账号数据库
- 后端收到
refresh_token后再去微软换access_token - 邮件读取主链是
IMAP XOAUTH2 Graph是兼容分支,不是当前主成功路径
jemail-app/index.html- 页面骨架和本地 vendor 资源加载
jemail-app/main.js- Vue 3 主逻辑
- 账号导入、分组、批量复制、邮件读取、接口调用
jemail-app/db.js- 浏览器
IndexedDB封装 accounts和emails两个 object store
- 浏览器
jemail-app/config.js- 运行时接口地址覆盖入口
jemail-backend/backend/app.py- Flask 入口
POST /detect-permissionPOST /api/emails/refresh- 同源静态文件托管
jemail-backend/backend/microsoft.py- 微软 refresh token 换 access token
- Graph 探测和 Graph 拉信
jemail-backend/backend/mail.py- IMAP XOAUTH2 登录和邮件提取
jemail-backend/backend/models.py- 请求校验和返回结构
jemail-backend/backend/config.py- 环境变量配置
前端支持文本和 Excel 两种输入。
常见文本格式:
邮箱地址----密码----Client ID----刷新令牌
账号导入后:
- 写入浏览器本地
IndexedDB - 保持原始导入顺序
- 可加分组
- 不会自动同步到服务器文件
前端调用:
POST /detect-permission
入参只包含:
client_idrefresh_token
后端会:
- 先换 access token
- 探测 Graph 是否可用
- 返回
graph/imap/o2
前端调用:
POST /api/emails/refresh
后端会:
- 再次用 refresh token 换 access token
- 按
token_type决定优先策略 - 优先尝试
IMAP或Graph - 必要时在两者之间回退
- 返回统一邮件结构
不是。账号主数据默认在浏览器本地。
如果你改账号模型、导入格式或分组逻辑,要同步检查:
jemail-app/db.jsjemail-app/main.js
不是。当前真实成功链路更偏 IMAP XOAUTH2。
如果你改:
backend/microsoft.pybackend/mail.pybackend/app.py
要保证 imap 路径仍然稳定。
前端强依赖这两个接口:
POST /detect-permissionPOST /api/emails/refresh
如果你改返回字段,要先同步前端。
当前现网不是:
outlook-manager/- Nextcloud
而是 jemail-app + jemail-backend。
后端启动:
cd /Volumes/SSD/Email\ Tool/jemail-backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python app.py测试:
cd /Volumes/SSD/Email\ Tool/jemail-backend
.venv/bin/python -m unittest discover -s tests -v仓库里当前主要保留两种说明:
- 本地部署
- 自行部署
- 不要提交
.env、令牌、私钥、备份 - 如果改后端接口,跑单测
- 如果改前端接口调用,至少做一次真实浏览器联调
- 如果改部署脚本,更新
docs/deployment.md