lolipop 邮箱自动删除邮件工具
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # 删除lolipop邮箱中早于指定日期的邮件
  2. # 使用imaplib库连接到lolipop邮箱,并删除早于指定日期的邮件
  3. # python 3.10+
  4. # 运行 python app.py
  5. import imaplib
  6. import time
  7. from datetime import datetime
  8. IMAP_HOST = "imap.lolipop.jp" # 邮箱服务器地址
  9. EMAIL = "" # 邮箱地址
  10. PASSWORD = "" # 邮箱密码
  11. MAX_RETRIES = 5 # 最多重试 5 次
  12. # 设置截止日期
  13. # 格式:2025,04,20 前的邮件进行删除不包含2025,04,20
  14. date_cutoff = datetime(2025, 4, 20).strftime("%d-%b-%Y")
  15. def connect_with_retry():
  16. for attempt in range(1, MAX_RETRIES + 1):
  17. try:
  18. imap = imaplib.IMAP4_SSL(IMAP_HOST)
  19. imap.login(EMAIL, PASSWORD)
  20. print(f"✅ 第 {attempt} 次尝试连接成功")
  21. return imap
  22. except imaplib.IMAP4.error as e:
  23. if b"Maximum number of connections" in str(e).encode():
  24. print(f"⚠️ 第 {attempt} 次连接失败(连接数超限),等待 30 秒后重试...")
  25. time.sleep(30)
  26. else:
  27. raise # 其他错误直接抛出
  28. raise Exception("❌ 多次连接失败,请稍后重试。")
  29. imap = None
  30. try:
  31. imap = connect_with_retry()
  32. status, count_bytes = imap.select("INBOX")
  33. if status != "OK":
  34. print("❌ 无法选择邮箱文件夹")
  35. exit()
  36. total_mail_count = int(count_bytes[0])
  37. print(f"📬 当前邮箱邮件总数:{total_mail_count}")
  38. status, data = imap.search(None, f'(BEFORE {date_cutoff})')
  39. if status == "OK":
  40. mail_ids = data[0].split()
  41. print(f"🗑️ 找到 {len(mail_ids)} 封待删除邮件(早于 {date_cutoff})")
  42. for i, num in enumerate(mail_ids, start=1):
  43. print(f" ➤ 正在删除第 {i} 封邮件(ID: {num.decode()})")
  44. imap.store(num, '+FLAGS', '\\Deleted')
  45. imap.expunge()
  46. print("✅ 删除完成")
  47. else:
  48. print("❌ 搜索失败")
  49. except Exception as e:
  50. print(f"发生异常:{e}")
  51. finally:
  52. try:
  53. if imap is not None:
  54. imap.logout()
  55. except:
  56. pass