# 删除lolipop邮箱中早于指定日期的邮件 # 使用imaplib库连接到lolipop邮箱,并删除早于指定日期的邮件 # python 3.10+ # 运行 python app.py import imaplib import time from datetime import datetime IMAP_HOST = "imap.lolipop.jp" # 邮箱服务器地址 EMAIL = "" # 邮箱地址 PASSWORD = "" # 邮箱密码 MAX_RETRIES = 5 # 最多重试 5 次 # 设置截止日期 # 格式:2025,04,20 前的邮件进行删除不包含2025,04,20 date_cutoff = datetime(2025, 4, 20).strftime("%d-%b-%Y") def connect_with_retry(): for attempt in range(1, MAX_RETRIES + 1): try: imap = imaplib.IMAP4_SSL(IMAP_HOST) imap.login(EMAIL, PASSWORD) print(f"✅ 第 {attempt} 次尝试连接成功") return imap except imaplib.IMAP4.error as e: if b"Maximum number of connections" in str(e).encode(): print(f"⚠️ 第 {attempt} 次连接失败(连接数超限),等待 30 秒后重试...") time.sleep(30) else: raise # 其他错误直接抛出 raise Exception("❌ 多次连接失败,请稍后重试。") imap = None try: imap = connect_with_retry() status, count_bytes = imap.select("INBOX") if status != "OK": print("❌ 无法选择邮箱文件夹") exit() total_mail_count = int(count_bytes[0]) print(f"📬 当前邮箱邮件总数:{total_mail_count}") status, data = imap.search(None, f'(BEFORE {date_cutoff})') if status == "OK": mail_ids = data[0].split() print(f"🗑️ 找到 {len(mail_ids)} 封待删除邮件(早于 {date_cutoff})") for i, num in enumerate(mail_ids, start=1): print(f" ➤ 正在删除第 {i} 封邮件(ID: {num.decode()})") imap.store(num, '+FLAGS', '\\Deleted') imap.expunge() print("✅ 删除完成") else: print("❌ 搜索失败") except Exception as e: print(f"发生异常:{e}") finally: try: if imap is not None: imap.logout() except: pass