新增功能: - 支持 Gmail/QQ/163/126/Yahoo/阿里邮箱/自定义 IMAP - IMAP 通用服务与提供商配置系统 - 验证码提取支持 IMAP 邮箱 - 前端动态表单与账号类型标识 修复: - 数据库 Schema v2 → v3 安全升级 - 定时刷新任务只处理 Outlook 账号 - IMAP 邮箱禁止远程删除保护 测试:122 个测试全部通过 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
9.6 KiB
9.6 KiB
DEVLOG(发布记录)
v1.3.0(2026-03-03)
新增功能
- 🎯 多邮箱统一管理系统(PRD-00005):在保持 Outlook 功能完全不变的前提下,支持 Gmail、QQ、163、126、Yahoo、阿里邮箱及自定义 IMAP 邮箱
- 统一界面管理多种邮箱类型(Outlook OAuth2 + IMAP 授权码)
- 支持 8 种邮箱提供商预设配置(自动填充 IMAP 服务器地址和端口)
- IMAP 授权码/应用专用密码加密存储(Fernet 加密)
- 智能文件夹映射(收件箱/垃圾邮件/已删除邮件)支持多语言和 UTF-7 编码
- 按提供商分类导出账号(Outlook/IMAP 分组,格式清晰)
- 🔌 新增 IMAP 通用服务:
imap_generic.py提供统一的 IMAP 连接、邮件列表、详情获取能力 - 📦 邮箱提供商配置系统:
providers.py集中维护 8 种邮箱的 IMAP 配置与文件夹映射规则 - 🔍 验证码提取支持 IMAP:IMAP 邮箱也可使用验证码提取功能
- 🎨 前端动态表单:添加账号时根据选择的邮箱类型动态显示不同的输入格式提示
- 🏷️ 账号类型标识:账号列表显示邮箱类型标签(Outlook/Gmail/QQ 等)
- 📡 新增 API 接口:
GET /api/providers返回支持的邮箱提供商列表
修复
- 数据库迁移安全性:Schema v2 → v3 升级,新增
account_type、provider、imap_host、imap_port、imap_password字段,保持向后兼容 - 定时刷新任务过滤:调度器只刷新 Outlook 账号,避免对 IMAP 账号执行无效的 Token 刷新操作
- IMAP 删除保护:IMAP 邮箱禁止远程删除操作,返回友好提示信息
重要变更
- 数据库 Schema 升级至 v3:accounts 表新增 5 个字段支持多邮箱类型
- 账号导入格式扩展:
- Outlook(保持不变):
email----password----client_id----refresh_token - IMAP 预设提供商:
email----授权码----provider - IMAP 自定义:
email----密码----custom----imap_host----imap_port
- Outlook(保持不变):
- 邮件 API 路由分发:根据
account_type自动路由到 Graph API 或 IMAP 服务 - 敏感数据加密扩展:
imap_password纳入加密迁移逻辑 - 架构文档完善:新增 AGENTS.md、PRD/FD/TDD/TEST 完整文档体系
测试/验证
- 新增 355 行多邮箱测试:
test_multi_mailbox.py覆盖 Schema v3、IMAP 导入、邮件获取、验证码提取、删除保护等核心场景 - 回归测试通过:所有现有 Outlook 功能保持不变,Graph API → IMAP XOAUTH2 回退路径正常
- 数据库迁移验证:v2 → v3 升级幂等性、加密字段迁移、旧数据兼容性验证通过
- IMAP 连接测试:Gmail/QQ/163 文件夹映射、UTF-7 编码、授权码认证验证通过
v1.2.1(2026-03-02)
新增功能
- 智能 SECRET_KEY 管理系统:自动初始化、持久化保存、重启保护,彻底解决数据丢失问题
- 首次启动自动生成 SECRET_KEY 并保存到 .env 文件
- 重启时使用现有 SECRET_KEY,不再重新生成
- 添加清晰的警告提示,提醒用户备份 .env 文件
- README 界面截图展示:添加仪表盘、邮箱界面、验证码提取、设置界面 4 张最新截图
修复
- 🔥 严重 Bug 修复:修复 SECRET_KEY 每次重启都重新生成导致数据库加密数据无法解密的问题
- 问题表现:重启后提示"邮箱不存在"、"Failed to decrypt data"错误
- 根本原因:SECRET_KEY 变更导致 Fernet 加密密钥改变,无法解密旧数据
- 解决方案:start.py 添加智能环境初始化,确保 SECRET_KEY 持久化
- 自动环境配置:如果 .env 文件不存在,自动从 .env.example 创建
- 智能密钥检测:只在 SECRET_KEY 为占位符(your-secret-key-here)时生成新密钥
重要变更
- start.py 重构:添加
ensure_env_file()智能环境初始化函数- 自动检查并创建 .env 文件
- 智能判断是否需要生成新的 SECRET_KEY
- 显示友好的提示信息(首次生成 vs 使用现有)
- 截图更新:清理 12 张旧截图,更新为 4 张最新界面截图
- 用户体验改进:添加 SECRET_KEY 重要性说明和备份建议
测试/验证
python -m pytest tests/ --tb=short -q:114 个测试全部通过- SECRET_KEY 持久性验证:
- 首次启动:自动生成并保存 SECRET_KEY
- 重启验证:SECRET_KEY 保持不变(980bb366e44920382e395a3116de578b...)
- 多次重启:密钥始终一致,数据正常解密
- 数据加密解密验证:
- 清空数据库后重新启动:使用相同 SECRET_KEY
- 导入新账号:数据正常加密存储
- 重启后读取:数据正常解密,无错误
v1.2.0(2026-03-01)
新增功能
- UI 全局美化重设计:从白底黑字四栏布局全面升级为现代国风设计系统(砖红 #B85C38 + 翠绿 #3A7D44 + 琥珀金 #C8963E),支持浅色/深色主题切换
- 侧边栏导航系统:全新侧边栏支持折叠/展开,包含仪表盘、邮箱管理、临时邮箱、审计日志、刷新日志、系统设置等导航项
- 设置页面内嵌显示:系统设置从弹窗模式改为页面内嵌直接渲染,无需额外点击
- 审计日志 & 刷新日志页面:新增独立页面加载函数,进入即自动拉取数据
- 临时邮箱增强:卡片新增验证码提取按钮、邮箱地址点击复制、顶栏邮箱名称可复制
- 账号头像多彩系统:8 组渐变色按索引分配,告别单调统一颜色
- GitHub 仓库链接:侧边栏底部新增 GitHub 仓库快速入口
- 代码质量工具链:新增
pyproject.toml统一 black/isort 配置(line-length=127)
修复
- BUG-002 选中账号名称未在邮件栏顶部显示(
currentAccountBar显示逻辑修正) - BUG-012 侧边栏折叠后导航图标消失(CSS 选择器排除
.nav-icon) - BUG-013 邮箱管理页仍显示"临时邮箱"分组(
renderGroupList过滤) - BUG-014/015 审计日志和刷新日志页面永远 loading(新增加载函数 + navigate 调用)
- BUG-016 设置页面从弹窗改为内嵌显示
- BUG-018 导入账号弹窗 textarea 尺寸优化
- BUG-020 临时邮箱顶栏邮箱名称不可复制
- BUG-021 进入邮箱管理不自动选中默认分组
- BUG-022 切换分组时 currentAccountBar 不重置
- BUG-023 收件箱/垃圾邮件 Tab 切换 active 状态不更新(
.folder-tab→.email-tab) - BUG-024 从临时邮箱返回邮箱管理后账号列数据残留
- Docker CI secrets 检测从 job-level if 改为独立 check-secrets job,修复云端构建始终跳过的问题
- 安全修复:移除误提交的包含密钥的
start_temp.bat
重要变更
- CI/CD 全面升级:所有 workflow 的
actions/checkout从 v4 升级至 v6 - 代码格式化:30+ 文件 isort 导入排序修复(
--profile black),1 文件 black 格式化 - Dependabot 移除:不再自动创建依赖更新 PR
- Docker 镜像:成功推送至
guangshanshui/outlook-email-plus(支持 linux/amd64 + linux/arm64) - 新增 19 个 UI 重设计 BUG 回归测试(
test_ui_redesign_bugs.py)
测试/验证
python -m pytest tests/ --tb=short -q:114 个测试全部通过docker build .:本地 Docker 构建通过- GitHub Actions:Python Tests ✅ / Code Quality ✅ / Docker Build Push ✅
- 本地服务器启动验证:
/healthz返回{"status":"ok"}
v1.1.1(2026-02-28)
新增功能
- GitHub Actions Docker 构建工作流支持推送到 Docker Hub(
guangshanshui/outlook-email-plus),并在未配置凭据时自动跳过,避免 fork/缺失 secrets 场景构建失败。
修复
- README 同步更新镜像地址与仓库链接,避免用户拉取/访问到旧地址(GHCR/旧仓库)。
重要变更
- 容器镜像发布从 GitHub Container Registry(GHCR)切换为 Docker Hub;需要在仓库 Secrets 中配置
DOCKERHUB_USERNAME与DOCKERHUB_TOKEN才会执行推送。
测试/验证
npm test:布局系统 Jest 用例回归。python -m unittest discover -s tests -v:全量 Python 单测回归。docker build .:本地镜像构建通过(用于验证 Dockerfile 未回归)。
v1.1.0(2026-02-27)
新增功能
- 新增“可调整布局系统”:支持面板拖拽调整宽度、折叠/展开指示器、布局状态持久化与版本迁移。
- 新增“恢复默认布局”入口与确认对话框,便于一键回到默认四栏布局。
- UI 导航栏展示应用版本号,便于排查问题与对齐发布版本。
- 新增布局系统测试工程(Jest):覆盖拖拽/键盘调整、折叠/展开、状态保存/加载、窗口自适配等场景。
修复
- 修复窄屏下自动/手动折叠后指示器不可见、导致无法再展开的问题。
- 修复折叠后页面出现滚动条、指示器高度观感异常的问题。
- 修复“隐藏邮件列表”仅改 display 导致 Grid 仍占位的空白列问题(与布局系统联动)。
重要变更
- 前端布局从历史侧栏方案调整为 Grid + CSS 变量驱动的四栏式布局;折叠时通过 layout-width 变量将列宽置 0(保存宽度不丢失)。
- 新增
layout-system-enabled标记类,用于与旧的窄屏侧栏样式隔离,避免样式冲突与交互回归。
测试/验证
npm test:布局系统 Jest 覆盖单元/集成用例。python -m unittest discover -s tests -v:全量 Python 单测回归。- 手工验证:宽屏/窄屏折叠与指示器可见性、折叠后无滚动条、重置布局可恢复默认状态。