退信核查记住扫描位置:UID 游标续扫,不再每次从头拉全量头部

- broadcast_bounces_seen.json 扩展为 {seen, cursor}(兼容旧列表格式):
  cursor 记录 INBOX 的 uidvalidity + last_uid
- 下次 --check-bounces 默认 UID n+1:* 续扫,只查新到的邮件;随邮箱
  邮件增多不再越扫越慢
- 回退全扫的情形:首次核查(无记录)、UIDVALIDITY 变化(换号/重建邮箱)、
  显式 --since、新增 --full-scan
- 扫描循环统一走 UID 检索/取信;UID n:* 在 n 超过邮箱最大 UID 时会返回
  最后一封,已防御过滤,游标不回退、不误报
- 发送中巡检不推进扫描位置(not_before 会过滤历史邮件,推进会把未处理
  的邮件标记成已扫导致漏报);位置只由 --check-bounces 推进
- 退信报告新增 scan_mode / scan_cursor 字段
This commit is contained in:
tamakyi
2026-09-07 22:53:35 +08:00
parent 6dc33604d1
commit d4e5c611b0
2 changed files with 121 additions and 29 deletions
+11 -3
View File
@@ -249,9 +249,17 @@ conf/app.ini 路径的解析优先级:
- 用的是 conf/app.ini [mail] 的账号与密码(需邮箱已开启 IMAP,密码为邮箱登录密码)
- 交互模式的运行方式「4) 退信核查」里同样三选一:仅核查 / 仅剔除 / 剔除并补发,
选择「仅剔除 / 剔除并补发」时会再问一次是否连未分类的一起补发
- 已核查过的退信(按 Message-ID)记录在 broadcast_bounces_seen.json
重复核查不会重复报告/重复剔除
- 每次核查另写一份明细报告 broadcast_bounce_report.json(含每个收件人的类别与判定依据)
- 已核查过的退信(按 Message-ID)与**上次扫描位置**INBOX UID 游标 +
UIDVALIDITY)都记录在 broadcast_bounces_seen.json
默认从上次位置续扫(UID n+1:*),只拉新邮件的头部,重复核查不会
重复报告/重复剔除,也不会随邮箱邮件增多越扫越慢
- 以下情况自动回退为按日期窗口从头扫(扫完位置照常更新):
首次核查(无位置记录)、邮箱 UIDVALIDITY 变化(换号/重建邮箱)、
显式指定 --since、加 --full-scan
- 发送中巡检不推进扫描位置(它只看本次运行之后新到的退信,
范围内的历史邮件不标记「已扫」),位置只由 --check-bounces 推进
- 每次核查另写一份明细报告 broadcast_bounce_report.json(含每个收件人的
类别与判定依据,以及 scan_mode / scan_cursor
安全机制
--------