Skip to content

iCloud Mail v0.2.0 · 共享收件与后台体验更新

Choose a tag to compare

@t508708 t508708 released this 24 Sep 08:01

iCloud Mail v0.2.0:自首个公开标签 v0.1.0 以来的累计更新,附 Linux amd64 预构建 Docker 镜像。

本次汇总自首个公开标签 v0.1.0 以来的累计变化,以两个版本的实际源码差异为准。邮箱池基础领取、独立凭据、深浅色控制面板和 Docker 部署已包含在初版;以下列出之后新增、调整和修复的内容。

新增与改进

  • 按活跃主号共享 IDLE 通知与增量读取;复用已认证的读取连接,闲置后释放,不为每个 root 或 +tag 建连。
  • Pool lease code 增加可选 wait_seconds=0..15,支持在预算内等待新码,保留默认单次读取合同。
  • 支持严格的 root+tag 回根归档,完整地址优先;域名保持一致,不作点号或近似匹配。
  • 增加 Pool 已使用邮箱退休作业:管理员 Session / CSRF 与项目 Key 双重鉴权,幂等提交、项目隔离、持久化 lease 状态及未知结果待核查。
  • 退休接口整批预检 alias/lease 绑定和项目归属,按 used -> retiring -> retired 收口;明确失败恢复 used,未知或重启中断保持待核查。保留租约历史,SQLite / PostgreSQL 迁移对应,旧管理批量删除语义保留。
  • 后台按目标页面预载本地 JS/CSS,首屏复用已验证会话,减少串行网络请求;新增生产转译后的会话引导回归测试。
  • 收件日志增加连接是否复用、建连登录耗时与邮箱读取耗时,便于区分网关处理、上游连接和投递延迟。

行为调整

  • 会话保活:已有 Apple Account 续期调度从接近短 TTL 到期时触发,调整为每次成功后随机 4-6 分钟;抽样结果持久化,重启沿用。更短 TTL 提前续期,失败退避和 Apple Retry-After 优先。
  • 续期可观测性:补充原登录时间、会话年龄、下次续期、失败检查点及上游操作/状态码;明确失效停止自动尝试,重新登录后恢复,不宣称会话永久有效。
  • 手动批量:与自动计划的本地额度分离,成功一项后直接继续,不再等待自动计划的 2 分钟节奏。
  • 单次探测:移除原本独立的 25 次/小时本地额度和等待;不消耗或延长自动计划额度/冷却。Apple 实际限流、账号状态、容量、转发目标及同主号串行校验仍生效。
  • 自动创建:保持每主号滚动 18 次/小时、至少间隔 2 分钟;明确区分手动与自动规则。自动及批量遇 Apple 限流仍进入相应等待,单次探测只返回本次结果。
  • 取件冷却:同一 root 完成后从 3 秒调整为 2 秒;主号实际 IMAP 启动间隔从 30 秒调整为 2 秒,并合并同主号工作,减少邮件已到却等待旧调度窗口的情况。
  • 并发预算:共享模式支持全站最多 128 个在途取件、每主号 64 个;真实 IMAP 并发独立限制。Pool code 使用专用取件预算,避免多个 root 轮询重复消耗公共每 IP 额度;其他 Pool 路由保留原预算。
  • 历史读取:首次/闲置恢复只检查最近 128 条候选头部,正文限最近 15 分钟;活跃时从持久化游标继续增量。有取件需求且观测超过 5 秒才共享补查,10 分钟无人取件后休眠。

修复与边界

  • 收到新邮件却仍读到旧记录:兼容 Apple X-ICLOUD-HME 缺少 r 字段的实际投递格式,并继续核验 root、转发目标及冲突收件头;按需候选检索增加 +tag 发现,再严格路由。邮件没有进入本地归档时,不用旧码冒充新码。
  • 缺失投递头的定向兼容:仅在直连 iCloud、指定 alias 取件、没有 HME/强投递头且只有单一 To 地址时允许精确目标回退;主号共享扫描不放宽为任意 To/Cc 匹配。
  • 虚假同步失败:修复空闲恢复已追平 UID 仍报告未完成,导致 503 SYNC_UNAVAILABLE、额外退避和下游超时的问题。
  • 反复刷新一直限流:冷却以实际取件完成时间为锚;被拦截的刷新不重置计时。Pool、Bearer 与直达链接继续共享同 root 状态。
  • IDLE 未及时通知新信:增加按需求、共享且有界的补查;不再仅依赖长连接存在来判断数据新鲜度,也不在无人访问时持续扫信。
  • 创建一直停在目录确认:同一候选地址可恢复完成步骤;完成请求明确 5xx 时短暂等待后最多重试一次,不重新生成地址。目录已出现则确认原凭据;候选超过 20 分钟且完整目录仍缺失时,仅清理未发布的本地预留,再重新做创建预检,避免陈旧 pending 永久阻挡后续操作。
  • 完善读取连接在取消、断线、主号停用/删除、凭据变化时的回收,以及等待取码返回前的身份和租约复验。
  • Pool code 等待期间不占用 Pool 或全量凭据轮换锁;取消单个请求不取消其他读者的共享同步。过期、释放、停用、Key 轮换后的请求在返回前重新校验。
  • 生产后台刷新回退:修复前端转译后原生时钟调用与默认参数导致引导失败、重新串行请求会话的问题;补充真实构建产物回归。会话数据仍禁止缓存,数据 API 独立鉴权。

文档与发布

  • 重写本派生版本 README,详细配置和兼容说明保留至 docs/REFERENCE.md。
  • 新增根目录 VERSION,同步前端 manifest/lockfile 版本,增加发布元数据与文档链接一致性测试。
  • 保留上游署名与许可现状;提供源码 ZIP、Linux amd64 应用与 PostgreSQL 预构建镜像包、校验文件及 Docker 部署教程。镜像从干净提交构建,不包含用户运行数据。
  • 补充离线 TLS IMAP、多 root 错峰取件及真实只读探针证据,见 验收记录。既有 API 和旧管理批量删除合同保持。

升级提示

  • 升级前成组备份数据库、keys、installation state 与 mail archive;保留现有 .env 和卷。
  • 自动创建默认关闭;现有计划保留启停状态。Apple 配额与会话有效期仍取决于其实际响应。
  • wait_seconds 为可选参数;现有客户端保持默认行为,采用等待模式时调整 HTTP 超时并遵循 Retry-After。
  • 本地 +tag 路由通过离线验证;真实投递和端到端延迟仍需在自己的环境验收,不将热读耗时作为投递承诺。

验证

  • 本次文档与版本更新运行 239 个前端/发布元数据测试,全部通过;版本一致性、相对链接和来源署名检查通过。
  • 本版本功能代码此前已通过受影响 Go 包、聚焦 race、go vet 和干净快照构建;40 root / +tag / 错峰等待 TLS fixture 连续 3 次通过。具体命令与实测条件见验收记录。
  • 后台在同浏览器、热缓存、180 ms 模拟延迟与 200 KiB/s 下载条件下,主号刷新中位数从 650 ms 降到 448 ms,邮箱池从 722 ms 降到 530 ms;不是各地区网络的统一承诺。
  • 真实只读探针冷读 2647 ms、热补查 480 ms,证明连接复用生效;这是同版本冷/热比较,未将其解释为新邮件端到端投递已降到 480 ms。
  • 发布提交更新说明、版本、镜像打包与对应校验,不包含尚未审查的工作树改动;发布构建不替换运行服务。

完整源码比较:v0.1.0...v0.2.0。

下载与镜像验收

  • icloud-mail-v0.2.0-linux-amd64.zip:应用与配套 PostgreSQL 镜像、部署配置及源码。
  • icloud-mail-v0.2.0-source.zip:可自行构建的源码包。
  • SHA256SUMS:下载校验文件;包内另有逐文件校验及记录镜像 ID 的 RELEASE.json。
  • 两个镜像从提交 a5d84e49576c78368199a01b2049f3b30eae49b0 的干净归档构建,OCI 标签中的版本与提交均已核对。
  • 已实际导入包中镜像,在无外网的独立空白 Compose 环境中执行 --no-build --pull never 启动,应用和数据库健康检查、后台 HTML、依赖许可文件检查通过。
  • 本次发布未替换已有运行服务。

安装与来源:Docker 部署教程 · NOTICE