From 781ad74762c07e738cf3d688cc4353cefb50ee2f Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 24 Jul 2026 20:42:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=82=AE=E7=AE=B1=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E6=97=A5=E6=9C=9F=E8=A7=A3=E6=9E=90=20BUG?= =?UTF-8?q?=EF=BC=9A=E6=97=A7=E9=82=AE=E4=BB=B6=E5=AE=8C=E6=95=B4=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=88=B3=E6=A0=BC=E5=BC=8F=E6=97=A0=E6=B3=95=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=EF=BC=8C=E5=AF=BC=E8=87=B4=E6=AF=8F=E6=AC=A1=E5=91=BD?= =?UTF-8?q?=E4=B8=AD=E5=90=8C=E4=B8=80=E6=97=A7=E9=AA=8C=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 YYYY-MM-DD HH:MM 和 YYYY-MM-DD HH:MM:SS 格式解析 - 新增 MM-DD HH:MM 格式解析 - 日期无法解析时跳过该邮件而非放行(安全兜底) --- core/douyu/email_verifier.py | 40 ++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 9 deletions(-) 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"])