yml2213
4d87cdc16d
fix(douyu): 取邮箱验证码取错邮件,导致登录永远报「邮箱验证码错误」
线上现象:同一个邮箱每次登录都取到同一个旧验证码(UID=1、几小时前那封),
提交必然失败;整体重试 20 次又把斗鱼的发信配额打爆。
两个根因:
1. Roundcube 返回的邮件列表本来就是 UID 降序(最新在前),代码又 reversed()
了一次,于是从收件箱最旧的一封开始读;
2. _parse_rc_date 用 UTC 作为基准,而 Roundcube 显示的是邮箱本地时间,旧邮件
被凭空加了 8 小时,看起来比发送时间还新,时间过滤形同虚设。
改动:
- 发信前用 latest_douyu_uid() 记录收件箱最新斗鱼邮件 UID,之后只接受 UID
更大的邮件,精确锁定「本次发送触发的那封」,不再依赖列表顺序和日期解析;
- 明确按 UID 降序读取,去掉多余的 reversed();
- 日期解析改为本地时区 aware datetime,时间兜底过滤才真正生效;
- 斗鱼返回「邮箱验证码发送次数已达上限」时抛 EmailQuotaError,直接终止批次
不再重试,避免继续烧配额。
线上实测(忧伤的心750 / aakpfc@bdhg.xyz):修复前每次读 UID=1 的旧码
942715;修复后基线 UID=20、按发送时间与快照过滤均正确跳过旧邮件,正文读取
取到最新一封。
2026-10-01 18:42:56 +08:00
..
2026-08-31 10:55:44 +08:00
2026-08-31 10:28:14 +08:00
2026-08-31 10:28:14 +08:00
2026-08-31 10:55:44 +08:00
2026-08-30 19:48:41 +08:00
2026-08-31 10:28:14 +08:00
2026-10-01 18:42:56 +08:00
2026-08-30 21:04:52 +08:00
2026-08-30 21:04:52 +08:00
2026-08-31 10:28:14 +08:00
2026-10-01 18:42:56 +08:00
2026-08-31 10:28:14 +08:00
2026-08-31 10:28:14 +08:00
2026-08-31 10:55:44 +08:00
2026-08-31 10:55:44 +08:00
2026-08-31 10:55:44 +08:00
2026-06-25 08:04:56 +08:00
2026-08-31 10:28:14 +08:00