Repository navigation
iCloud Mail v0.2.0 · 共享收件与后台体验更新
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