Skip to content

iCloud Mail v0.2.6 · 并发取件与主号独立保活

Choose a tag to compare

@t508708 t508708 released this 16 Oct 14:30

iCloud Mail v0.2.6:并发取件、主号独立保活与目录补充优化。

修复与优化

  • Apple Account 保活按到期主号独立执行,同号最多一个在途任务并跨轮去重;取消固定 4 个全局名额,一个主号的慢请求或操作等待不占其他主号的名额。保留每号 4~6 分钟随机计划、25 秒执行上限、持久化退避与明确失效停止规则。

  • 只读目录增加 Apple Account 补充通道:优先使用 iCloud Web,仅在该通道登录缺失或认证失效时尝试已保存的新通道;限流、服务故障和响应结构错误沿原路径处理。目录转发归属、账户身份及重复项校验保持严格,目录缺项不删除本地地址,停用、删除和创建前后核验继续使用既有流程。

  • 连接管理显示最近成功续期、下次计划与失败重试时间,区分暂时退避和需要重新登录;状态读取仅访问本地记录,响应只包含公开连接元数据。

  • 共享取件取消同主号 64 个在途及全站每秒 100 次的一刀切限制;不同隐藏邮箱复用主号收件,HTTP 入口改为有界等待,并为普通读取预留容量。

  • 并发、队满与排队超时返回可重试的 503 PICKUP_BUSY;429 用于刷新速率超限。同 root 额度内并发读者共享同步,完成与取消只释放自身引用,不重置冷却。

  • Pool 取码本地复验改用共享读锁,避免所有读请求串行;保留凭据轮换、租约释放与退役复验。首次同步耗尽等待预算时执行最终本地读取,返回新码或正常 no_code。

  • 冷恢复按服务端日期定位时间窗口,再按 UID 分页,不再丢弃最后 128 封以外的本次新信;窗口起点与游标同事务持久化,跨批次及重启继续。新增 SQLite/PostgreSQL 一致、幂等的 imap_active_windows 表,完成后清除;不下载窗口前的历史正文。

  • 修正文档中的批大小:服务入口为每批 128 条 UID,底层库默认 32;批大小限制单次处理量,不限制隐藏邮箱并发数量。

  • 后台 Pool 项目列表复用已加载数据,减少切换和刷新时的重复请求;补齐加载状态、窄屏表格滚动和无障碍提示。管理页面禁止代理改写响应,保留本地 JS/CSS 与原主题。

验证与升级

  • 离线 TLS IMAP 夹具覆盖 200 个 root 共享收件、冷启动与连接复用;测试环境冷取件约 1.20 秒、复用读取约 3 毫秒,属于本地夹具结果。实际 Apple 网络与投递耗时另受上游影响。
  • 保活验证覆盖 32 个主号同时到期、同号跨轮去重,以及前 4 个主号等待各自操作锁时第 5 个仍可执行。只读目录验证账户身份、转发归属、错误分类和缺项不删除。
  • 以实际发布内容导出的隔离源码通过 Go 全套测试、全套 go vet、保活及目录重点 race 检查;前端 248 项测试与 Vite 构建通过。
  • 新增 imap_active_windows 持久化最近收件窗口,SQLite 与 PostgreSQL 迁移一致且幂等;升级保留数据库、密钥、邮件归档和创建计划。创建、退役与删除继续沿用原合同。
  • Docker 默认继续提供应用与配套 PostgreSQL 的多架构 latest,并提供 v0.2.6 标签及 Linux amd64 离线镜像包。升级前备份数据库、密钥与邮件归档。

完整源码比较:v0.2.5...v0.2.6。

Docker 与下载

  • ghcr.io/t508708/icloud-mail:latest 与 ghcr.io/t508708/icloud-mail-postgres:latest 已同步更新,也可使用 v0.2.6 标签;支持 linux/amd64、linux/arm64。
  • 更新:git pull --ff-only && docker compose pull && docker compose up -d --wait。保留 .env 和数据卷,升级前备份数据库、密钥和邮件归档。
  • 附件包含源码 ZIP、应用与 PostgreSQL 预构建镜像的 Linux amd64 离线 ZIP、SHA256SUMS。
  • 发布提交:c18ebcab012b9c953060a4404e3717ffca2448c0。来源和许可关系见 NOTICE。