Skip to content

Releases: t508708/icloud-mail

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。

iCloud Mail v0.2.5 · 收件归档修复与 IMAP 同步优化

Choose a tag to compare

@t508708 t508708 released this 15 Oct 19:29

iCloud Mail v0.2.5:邮件归档升级修复与 IMAP 批量同步优化。

修复与优化

  • 修复网页按需收件已保存正文重建版、随后 IMAP 获取相同 UID 的完整 MIME 时,出现 stage mailbox archive: archived message identity conflicts with an existing file 并导致整个批次提交失败的问题。仅在非空 Message-ID 一致、旧文件大小和校验和正确且具有网页重建标记时允许升级;完整原文使用独立不可变路径,事务成功后清理旧投影。
  • 归档升级保留原归档 ID、邮箱本地 UID 与取码记录;后续网页读取不会覆盖完整原文。原始 MIME 内容冲突、损坏文件及身份不一致继续报错,失败不删除已提交文件,不推进增量游标。
  • 同一增量批次的匹配正文合并为一次 UID FETCH,减少逐封网络往返。默认每批最多处理 32 条 UID,保留正文大小限制、超大邮件元数据与逐批原子提交;不支持批量读取的服务器保留逐封回退,取消或失败清理已暂存文件。
  • 手动单次与批量创建按实际选择的通道确认待处理候选。新通道已过期时可使用旧通道,已知来自新通道的候选不再阻塞旧通道;同通道或来源不明的候选仍先确认,身份、容量和转发目标检查保持。

验证与升级

  • SQLite 与隔离 PostgreSQL 验证网页投影升级、邮件身份保持及事务回滚;覆盖损坏文件、Message-ID 不匹配、过期观察、同 UID 冲突及后续网页重放。
  • IMAP 离线夹具覆盖单个命令读取整批正文、逐封兼容回退、连接复用、取消清理和 UID 游标边界;不支持的响应顺序保持失败且不前移游标。受影响 Go 包、重点 race、go vet 与版本元数据检查通过。
  • 本地受控增量同步约 2.7 秒完成,状态恢复正常;该次没有新增匹配邮件,不代表大批次吞吐或真实投影升级的现场性能。
  • Docker 默认继续使用应用与配套 PostgreSQL 的多架构 latest,另提供 v0.2.5 标签、源码与 Linux amd64 离线镜像包。升级保留数据库、密钥、邮件归档和原计划;本次收件修复无新增 schema 迁移。

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

Docker 与下载

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

iCloud Mail v0.2.4 · 创建确认与通道冷却修复

Choose a tag to compare

@t508708 t508708 released this 15 Oct 09:42

iCloud Mail v0.2.4:自动创建确认、通道冷却隔离与后台弱网恢复。

修复与调整

  • 修复待确认地址恢复及单地址详情读取时,新通道限流误将整个自动计划暂停一小时的问题。候选来源与完成 ID 持久保存,限流只冷却受影响通道并遵守更长 Retry-After;旧通道按原时间槽与独立额度继续。已知 ID 只重读原详情,来源不明的旧候选继续保守确认,未知结果不换地址重建。
  • 后台普通读取增加 15 秒等待上限,覆盖连接及响应正文;提交操作使用独立 120 秒上限。请求挂起会显示明确提示,切换页面仍可主动取消,不自动重放已提交操作。
  • 页面启动保留加载提示,等会话检查及目标页面模块就绪后再挂载;资源失败或加载超时提供手动重新加载入口,页面切换模块失败保留当前页面并显示提示。主题脚本延后执行,减少脚本网络阻塞造成的空白。
  • 修复 Apple 单地址详情已确认启用、但目录列表仍遗漏该地址时,手动与自动创建持续显示“待目录确认”的问题。候选和凭据先持久化,再按完成回执的原 ID 读取详情;严格核验地址、ID、存在及启用状态,转发目标必须匹配当前主号。
  • 兼容完成接口返回原候选的 active=false / exists=false、而随后详情已启用的回执差异:收到 ID 后仍读取详情核验,完成回执的标记不作为跳过详情的依据。
  • 旧候选恢复先核对原地址,明确完成或结果未知时保留候选,不因超过 20 分钟且列表缺失就换地址重建。详情异常继续使用目录确认兜底,不把不完整回执当作成功。
  • 修复无会话诊断字段时,管理操作失败日志出现 LogValue panicked 的问题。目录同步仍报告 Apple 实际返回数量,不以本地库存冒充远端目录数量。

合并此前 latest 的通道降级修复

  • 修复新通道认证过期后仍被选中、随后关闭整个自动创建计划的问题。已开启的计划保留;新通道失效且旧通道可用时,在原持久化计划中分散安排每小时最多 5 次旧通道尝试。
  • 新通道重新登录后,后续时间槽自动恢复新通道 19 次、旧通道 4 次的每小时规则,不重排计划,不清空滚动额度或 Apple 冷却。临时续期故障不直接当作退出。
  • 创建时确认新通道认证失效会持久保存该通道失效状态,保留旧通道登录;本次调用不重复创建。旧通道目录失效时暂停远端创建、保留计划,手动关闭的计划保持关闭。
  • 未执行的时间槽不写成远端创建尝试;待确认地址、未知副作用、库存/容量与账户身份检查保持原规则。
  • SQLite 完整离线创建与确认验证:降级创建并入库 5 个,更新登录态后完成 19+4 个。跨调度器重启、两边离线、手动关闭、SQLite/PostgreSQL 滚动额度与冷却测试、受影响 Go 包、重点 race、go vet 及 diff 检查通过;未额外发送真实 Apple 创建探测。
  • README、创建规则、兼容说明和内置 /docs/ 同步更新;此前仅通过 latest 提供的降级补丁纳入本次正式版本。

详细规则见 自动创建通道降级与恢复。

验证与升级

  • 受影响 Go 包测试、go vet、重点竞态检查通过。SQLite 与独立 PostgreSQL 验证候选来源、完成 ID、重启恢复、幂等迁移、主号隔离和独立冷却。
  • 完整 23 槽离线调度联测:新通道候选遇到限流后,原候选保留,旧通道完成 4 次创建并入库;2 小时 Retry-After 不被轮询延长。详情确认、旧候选兼容、fallback 防重复和公共目录限流优先级均覆盖。
  • 前端 247 项测试通过;浏览器故障注入验证入口资源失败、路由模块失败和 API 挂起的恢复提示。正常加载测试不代表用户设备代理或网络速度改善。
  • 本地观察原自动计划:新版本旧通道创建成功并入库,约 8.6 秒;未通过真实限流来验证异常分支,也不承诺 Apple 配额或会话永久有效。
  • Docker 默认继续使用应用与配套 PostgreSQL 的多架构 latest,另提供 v0.2.4 镜像标签、源码与 Linux amd64 离线包。升级保留数据库、密钥、邮件归档和原计划;新增候选辅助表自动迁移,历史来源不明项继续保守核验。

完整源码比较:v0.2.3...v0.2.4。

Docker 镜像与下载

  • 默认部署继续使用 ghcr.io/t508708/icloud-mail:latest 和 ghcr.io/t508708/icloud-mail-postgres:latest;两者亦提供 v0.2.4 标签,支持 linux/amd64、linux/arm64。
  • 更新命令:git pull --ff-only && docker compose pull && docker compose up -d --wait。升级前备份数据库、密钥与邮件归档,保留原 .env 和数据卷。
  • 附件提供源码 ZIP、含应用和配套 PostgreSQL 预构建镜像的 Linux amd64 离线 ZIP,以及 SHA256SUMS。离线包包含 RELEASE.json,记录源码提交和镜像 ID。
  • 发布源码提交:0120994e9dcef6f8be712aa487acde6a8031610a。部署及来源说明见 README 与 NOTICE。

iCloud Mail v0.2.3 · 退役核验与收件并行修复

Choose a tag to compare

@t508708 t508708 released this 14 Oct 09:07

iCloud Mail v0.2.3:退役核验、收件并行与接口文档同步。

修复与调整

  • 同主号 Apple 管理与 IMAP 读取使用独立执行锁,退役和收件的网络阶段可并行;两类操作各自保持主号串行及既有全局并发预算。
  • 归档提交逐项核验邮箱身份与启停修订,退役、删除或停用一个邮箱只过滤其关联,其他邮箱的有效邮件仍与 UID 游标事务提交。新加入但未参与当前读取的邮箱不误标同步成功。
  • 账户密码、服务器、用户名、主号启停及收件通道变更使旧观察失效,切换后切回仍可识别。旧连接失败不会覆盖新配置的同步状态;最近访问、备注、分组、凭据轮换及主号名称更新不会误丢邮件。
  • 新增 alias_receive_revisions 持久化启停修订,SQLite 与 PostgreSQL 迁移一致、幂等;旧邮箱默认修订 0,无需回填。
  • 修复原退役工单与收件本地收口的并发冲突。Pool 进入 retiring 后继续关闭取码、续期、释放与再次领取;原管理批量删除合同保持。
  • 原工单新增显式 reconcile:resume=false 只核验完整权威目录,可靠确认已不存在的原目标可事务收口;resume=true 明确允许继续删除目录中仍存在的原目标。临时目录缺失或未知结果保持 review,不盲目重放。
  • reconcile 延续管理员 Session、POST CSRF 与项目 Pool Key 双鉴权,核验完整原顺序 alias/lease 绑定。相同在途动作返回当前快照,不同动作返回 RETIREMENT_ACTION_CONFLICT,不生成无归属的新工单。
  • 补充仅供离线运维的原退役快照据证恢复能力,无公开 HTTP 入口;保留 lease 历史并核验原始归属。
  • 旧 recent 的上游已读回写继续固定来源并使用管理锁,等待该锁时不占 IMAP 执行名额;普通 OTP / Pool 收件不受此锁限制。

文档与验证

  • 重写服务内置 /docs/,同步直接 OTP、严格同域 root+tag、Pool、退役与 reconcile、2 秒取件预算、IMAPS / OAuth 和并行边界。页面样式内置,支持深浅模式,无外部脚本或字体。
  • README、发布版本及离线编排同步为 v0.2.3;Docker 默认部署继续使用 GHCR 多架构 latest,保留固定版本镜像和离线包。
  • HTTP、syncer、Store、隐藏邮箱同步与邮件解析受影响包测试、go vet 及重点 race 验证通过;隔离 PostgreSQL fixture 验证配置切换、启停修订、重开 Store 与幂等迁移。
  • TLS IMAP 协议联测验证读取未结束时退役可完成,其他邮箱与其 +tag 邮件正常归档;完整 + 地址优先,未知根和不同域名跳过,retiring / retired 租约停止取码。额外回归验证旧来源冲突内容不覆盖当前归档。
  • 已有取件链接只读实测两次 HTTP 200,均与数据库最新归档一致:首次约 6 秒,后续约 154 毫秒。这是单环境冷/热读取结果,不是新邮件投递时延承诺;本次并行联测使用离线 fixture。

升级前成组备份数据库、密钥、installation state 和邮件归档;保持单应用实例,保留 .env 与数据卷。未知退役结果先 GET 原工单,再按原 items 显式核验或恢复。

完整源码比较:v0.2.2...v0.2.3。

Docker 镜像与下载

  • 默认部署:ghcr.io/t508708/icloud-mail:latest 与 ghcr.io/t508708/icloud-mail-postgres:latest。
  • 固定版本:两个镜像均提供 v0.2.3 标签,支持 linux/amd64、linux/arm64。
  • icloud-mail-v0.2.3-linux-amd64.zip:应用与 PostgreSQL 预构建镜像、部署配置及源码,附 RELEASE.json 与包内校验。
  • icloud-mail-v0.2.3-source.zip:源码包;SHA256SUMS:下载校验文件。
  • 本版镜像由发布提交 0e2755156557d9255da343edc35610ef48c90020 的干净 GitHub Actions checkout 构建,未包含本机未提交改动或运行数据。

安装:Docker 部署教程 · 来源与许可。

iCloud Mail v0.2.2 · GHCR latest 与社区入口

Choose a tag to compare

@t508708 t508708 released this 24 Sep 09:15

iCloud Mail v0.2.2:正式提供 GHCR latest 多架构镜像与简化部署流程。

  • 默认 Docker 部署改为匿名拉取 GHCR latest;应用与 PostgreSQL 镜像均支持 linux/amd64、linux/arm64。
  • 新增 GitHub Actions 镜像发布:main 更新 latest,版本标签发布对应版本与短 SHA 标签。
  • 源码构建改用 compose.build.yaml,离线固定版本继续使用 compose.offline.yaml。
  • 仓库调整为独立项目,完整保留 Git 历史、上游来源和许可说明。
  • 后台与 README 增加 QQ 群 1105888476 一键入口。

Docker 部署

git clone --depth 1 https://github.com/t508708/icloud-mail.git
cd icloud-mail
cp -n .env.example .env
docker compose pull
docker compose up -d --wait

下载与验收

  • icloud-mail-v0.2.2-linux-amd64.zip:Linux amd64 应用与 PostgreSQL 预构建 Docker 镜像、部署配置及源码。
  • icloud-mail-v0.2.2-source.zip:标签对应的完整源码包。
  • SHA256SUMS:下载文件校验;镜像包内另含逐文件校验和 RELEASE.json。
  • GHCR:ghcr.io/t508708/icloud-mail:v0.2.2、ghcr.io/t508708/icloud-mail-postgres:v0.2.2。
  • 两个 GHCR 镜像均已核对 amd64/arm64 清单;amd64 镜像 OCI 版本与完整源码提交一致。
  • 干净标签快照通过 240 项前端测试、生产构建、Go 全量测试和 go vet。

源码提交:32d3d2db2291006e2ddce70b42ce681d1a25b2e1

完整更新日志 · v0.2.1...v0.2.2 · 部署文档 · 来源与许可

iCloud Mail v0.2.1 · 取件冷却与双通道创建修复

Choose a tag to compare

@t508708 t508708 released this 24 Sep 08:01

iCloud Mail v0.2.1:取件限流与双通道自动创建补丁更新,附 Linux amd64 预构建 Docker 镜像。

  • 自动创建改为每主号每小时 23 个错峰计划槽,新通道最多 19 次、旧通道最多 4 次,分别持久化滚动额度与冷却。明确限流且未产生地址时可使用另一通道的剩余额度;待确认和不确定结果继续走原确认流程。

  • 创建限流默认等待从本地写死的 24 小时调整为 1 小时,尊重 Apple 更长的 Retry-After;创建通道限流不再暂停另一通道,公共验证/目录限流仍暂停主号。手动探测保持独立,历史冷却不会在升级时清空。

  • 共享取件改用容量 2、每 2 秒恢复 1 次的 root 预算;分离一个普通读取与一个长等待,等待结束不再追加 2 秒冷却,上游同步仍合并并限频。

  • 429 保留原 JSON 错误码,新增原因及剩余时间响应头;被拦截请求不消耗 root 额度或推动时间。旧非共享路径维持原保护规则,详见 分层取件限流。

  • 自动创建计划、通道尝试记录与冷却支持 SQLite / PostgreSQL 持久化;历史未分通道的尝试记录采用保守过渡,升级后的首小时可能少建。取件限流状态仍在单个应用进程内维护。

  • 已通过受影响 Go 包、聚焦 race、vet、PostgreSQL 并发与重启测试。公网取件连续两次返回 HTTP 200、超额后剩余等待递减并恢复;该验证未发送新邮件。自动计划的 23 次是安排上限,实际成功量取决于 Apple。

下载与镜像验收

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

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

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

v0.1.0 - Public source baseline

Pre-release

Choose a tag to compare

@t508708 t508708 released this 24 Sep 08:01

首次公开源码基线(预发布)。

  • Web 控制面板、浅色/深色主题与本地化前端资源。
  • 多主号、隐私邮箱、邮箱池、批量操作与定时创建。
  • 按需 OTP / IMAPS 取件、独立凭据及轮换;同一邮箱共享 3 秒请求间隔。
  • Docker 源码构建、首次安装说明及宝塔单文件编排入口。

验证:Go 全套测试通过(未启用的外部集成测试保持跳过);前端 230 项测试通过;Vite 生产构建和 Compose 配置校验通过。未连接真实 Apple 账号执行发布测试。

下载下方 Source code (zip),按照 DELIVERY.md 源码构建安装。本版本未附预构建 Docker 镜像,不含账号、邮件、密钥、证书或本机运维历史。

许可:保留 mangobubu/icloud-api 上游来源和历史,上游尚未提供通用软件许可证,整仓未套用 MIT,详情见 NOTICE.md。

Apple 接口与限流由上游决定;长时会话恢复仍需持续验证,保持单应用实例。