diff --git a/core/douyu/email_verifier.py b/core/douyu/email_verifier.py index f8dc312..f530249 100644 --- a/core/douyu/email_verifier.py +++ b/core/douyu/email_verifier.py @@ -305,6 +305,18 @@ class EmailVerifier: except ValueError: 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 try: dt = datetime.strptime(date_str.strip(), "%m-%d") @@ -312,6 +324,13 @@ class EmailVerifier: except ValueError: 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 # ── 主入口 ───────────────────────────────────────────── @@ -386,15 +405,18 @@ class EmailVerifier: # 检查时间 if after_timestamp and msg.get("date"): msg_dt = self._parse_rc_date(msg["date"]) - if msg_dt: - # Roundcube 日期只有分钟精度(如"今天 14:20"→14:20:00), - # 而 after_timestamp 是秒级精度(如14:20:49)。 - # 直接比较会把同一分钟内的邮件误判为"早于发送时间"跳过。 - # 解决:将 after_timestamp 也向下取整到分钟后再比较。 - after_minute_ts = after_timestamp - (after_timestamp % 60) - if msg_dt.timestamp() < after_minute_ts - allow_old_seconds: - logger.debug(f"Roundcube: 邮件 UID={msg['uid']} 日期 {msg['date']} 早于发送时间,跳过") - continue + if msg_dt is None: + # 日期无法解析的旧邮件(如完整时间戳),在有 after_timestamp 时跳过 + logger.debug(f"Roundcube: 邮件 UID={msg['uid']} 日期 '{msg['date']}' 无法解析,已跳过") + continue + # Roundcube 日期只有分钟精度(如"今天 14:20"→14:20:00), + # 而 after_timestamp 是秒级精度(如14:20:49)。 + # 直接比较会把同一分钟内的邮件误判为"早于发送时间"跳过。 + # 解决:将 after_timestamp 也向下取整到分钟后再比较。 + after_minute_ts = after_timestamp - (after_timestamp % 60) + if msg_dt.timestamp() < after_minute_ts - allow_old_seconds: + logger.debug(f"Roundcube: 邮件 UID={msg['uid']} 日期 {msg['date']} 早于发送时间,跳过") + continue # 读取邮件正文提取验证码 body_html = self._rc_fetch_email_body(msg["uid"])