Files
outlookEmailPlus/docs/待办事项.md
T
胡绍康andClaude Opus 4.6 64d8a6c357 feat(multi-mailbox): 实现多邮箱统一管理功能(PRD-00005)
核心变更:
- 数据库:Schema v3,accounts 表新增 account_type/provider/imap_host/imap_port/imap_password 字段
- 后端:新增通用 IMAP 服务(imap_generic.py)与邮箱提供商配置(providers.py)
- 导入:支持 Outlook/QQ/163/Gmail/自定义 IMAP 多格式批量导入,兼容注释行与导出格式
- 导出:按邮箱类型分组导出,保留 provider 信息便于重新导入
- 邮件读取:IMAP 账号走通用 IMAP 服务,Outlook 保持原 Graph/XOAUTH2 链路
- 验证码提取:IMAP 账号通过 IMAP 获取邮件详情后提取
- 安全约束:IMAP 账号禁用远程删除,敏感字段(imap_password)加密存储
- 前端:新增邮箱类型下拉、自定义 IMAP 配置区、provider 标签显示
- 调度器:定时刷新仅处理 Outlook 账号(IMAP 无 OAuth token 刷新语义)
- 日志:配置 outlook_web 命名空间日志输出到 stderr

技术细节:
- 保持 Outlook 旧格式完全兼容(四段式:email----password----client_id----refresh_token)
- IMAP 账号使用空字符串占位 client_id/refresh_token(满足 DB NOT NULL 约束)
- 支持导出格式智能识别(5 段 custom、3 段 provider、2 段配合输入框)
- 前端 DOMPurify 未加载时回退为基本 HTML 过滤(CDN 不可达场景)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 22:54:39 +08:00

70 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 待办事项(Backlog)
> 最后更新:2026-03-03
> 说明:用于记录已完成需求后的遗留问题、技术债与下一步优化项(按优先级排序)。
---
## TODO-00005|多邮箱统一管理 — 遗留问题/技术债
### 总体评价
P0 主链路已完成并通过全量单测回归(导入/导出/邮件列表/详情/验证码提取/IMAP 禁删/调度任务跳过 IMAP)。
当前主要风险集中在 **IMAP(Generic) 列表拉取的性能** 与 **前后端 provider 展示的单一数据源**。
### 具体问题列表(按严重程度排序)
1) **IMAP(Generic) 邮件列表拉取性能/带宽风险(高)**
- 现状:`outlook_web/services/imap_generic.py` 列表为生成 `body_preview` 与 `has_attachments`,对每封邮件使用 `UID FETCH ... RFC822` 拉取整封邮件。
- 影响:遇到大邮件/多邮件时列表加载显著变慢;后端 CPU/内存/网络开销偏大;可能触发 IMAP 服务端限流/断连。
- 关联文件:`outlook_web/services/imap_generic.py`
2) **IMAP 账号“编辑/刷新”链路未适配(中)**
- 现状:前端编辑账号校验仍强制 `client_id/refresh_token`;Repo 的 `update_account()` 也要求非空,IMAP 账号不满足。
- 影响:IMAP 账号导入后若需修改授权码/服务器配置,缺少一致的编辑入口(只能删除重导)。
- 关联文件:`static/js/features/accounts.js`、`outlook_web/repositories/accounts.py`、`outlook_web/controllers/accounts.py`
3) **provider label 存在“双维护”(低)**
- 现状:后端 `MAIL_PROVIDERS` 定义 label;前端 `getProviderLabel()` 又硬编码一份。
- 影响:后续新增/修改 provider 文案容易不一致。
- 关联文件:`outlook_web/services/providers.py`、`static/js/features/groups.js`
4) **IMAP 连接超时设置的全局副作用(低)**
- 现状:为兼容旧版本 `imaplib.IMAP4_SSL`,在不支持 `timeout=` 参数时会调用 `socket.setdefaulttimeout(30)`(全局)。
- 影响:可能影响进程内其他网络连接的默认超时语义,增加排查成本。
- 关联文件:`outlook_web/services/imap_generic.py`
### 改进建议和示例代码
#### A) IMAP(Generic) 列表拉取改为“轻量 FETCH”(建议优先)
目标:列表接口只拉取必要信息(FLAGS + HEADER + 预览片段),避免整封 RFC822。
建议方向(伪代码):
```python
# 仅抓取必要字段:FLAGS + 头部 + BODYSTRUCTURE + 正文前 N 字节(按需)
mail.uid(
"FETCH",
uid,
"(FLAGS BODY.PEEK[HEADER.FIELDS (SUBJECT FROM DATE)] BODYSTRUCTURE BODY.PEEK[TEXT]<0.2048>)",
)
```
验收标准(建议写入任务卡):
- 列表接口不再使用 `RFC822` 拉取整封邮件;
- `body_preview` 来自 partial fetch(或仅 header+subject 预览兜底);
- `has_attachments` 使用 `BODYSTRUCTURE`/part 判断(或降级为“未知/False”并在详情再判定)。
#### B) IMAP 账号编辑能力(P1)
建议:
- 后端为 IMAP 账号新增更新接口或在 `update_account()` 增加 `account_type` 分支校验;
- 前端编辑模态框按 `account_type/provider` 动态展示字段(授权码/host/port)。
#### C) provider label 单一来源
建议:
- 账号列表 tag 展示优先使用 `GET /api/providers` 返回的 `label`(由前端缓存映射),移除硬编码 `getProviderLabel()` 或仅作为兜底。