1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # 删除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
|