浏览代码

feat: 新增邮件删除功能,支持删除lolipop邮箱中早于指定日期的邮件

master
lizhuang 3 天前
父节点
当前提交
f5b580573e
共有 2 个文件被更改,包括 69 次插入0 次删除
  1. 1
    0
      python/README.md
  2. 68
    0
      python/app.py

+ 1
- 0
python/README.md 查看文件

@@ -0,0 +1 @@
.venv\Scripts\activate

+ 68
- 0
python/app.py 查看文件

@@ -0,0 +1,68 @@
# 删除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

正在加载...
取消
保存