修复邮箱验证码日期解析 BUG:旧邮件完整时间戳格式无法解析,导致每次命中同一旧验证码
- 新增 YYYY-MM-DD HH:MM 和 YYYY-MM-DD HH:MM:SS 格式解析 - 新增 MM-DD HH:MM 格式解析 - 日期无法解析时跳过该邮件而非放行(安全兜底)
This commit is contained in:
@@ -305,6 +305,18 @@ class EmailVerifier:
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# 日期格式 2026-06-20 14:30
|
||||||
|
try:
|
||||||
|
return datetime.strptime(date_str.strip(), "%Y-%m-%d %H:%M")
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 日期格式 2026-06-20 14:30:00
|
||||||
|
try:
|
||||||
|
return datetime.strptime(date_str.strip(), "%Y-%m-%d %H:%M:%S")
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
# 日期格式 06-20
|
# 日期格式 06-20
|
||||||
try:
|
try:
|
||||||
dt = datetime.strptime(date_str.strip(), "%m-%d")
|
dt = datetime.strptime(date_str.strip(), "%m-%d")
|
||||||
@@ -312,6 +324,13 @@ class EmailVerifier:
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# 日期格式 06-20 14:30
|
||||||
|
try:
|
||||||
|
dt = datetime.strptime(date_str.strip(), "%m-%d %H:%M")
|
||||||
|
return dt.replace(year=now.year)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# ── 主入口 ─────────────────────────────────────────────
|
# ── 主入口 ─────────────────────────────────────────────
|
||||||
@@ -386,7 +405,10 @@ class EmailVerifier:
|
|||||||
# 检查时间
|
# 检查时间
|
||||||
if after_timestamp and msg.get("date"):
|
if after_timestamp and msg.get("date"):
|
||||||
msg_dt = self._parse_rc_date(msg["date"])
|
msg_dt = self._parse_rc_date(msg["date"])
|
||||||
if msg_dt:
|
if msg_dt is None:
|
||||||
|
# 日期无法解析的旧邮件(如完整时间戳),在有 after_timestamp 时跳过
|
||||||
|
logger.debug(f"Roundcube: 邮件 UID={msg['uid']} 日期 '{msg['date']}' 无法解析,已跳过")
|
||||||
|
continue
|
||||||
# Roundcube 日期只有分钟精度(如"今天 14:20"→14:20:00),
|
# Roundcube 日期只有分钟精度(如"今天 14:20"→14:20:00),
|
||||||
# 而 after_timestamp 是秒级精度(如14:20:49)。
|
# 而 after_timestamp 是秒级精度(如14:20:49)。
|
||||||
# 直接比较会把同一分钟内的邮件误判为"早于发送时间"跳过。
|
# 直接比较会把同一分钟内的邮件误判为"早于发送时间"跳过。
|
||||||
|
|||||||
Reference in New Issue
Block a user