Очиститель почты

Очиститель почты


from imapclient import IMAPClient

import pyzmail

import datetime


EMAIL = "your_email@gmail.com"

PASSWORD = "your_password_or_app_password"

IMAP_SERVER = "imap.gmail.com"

SENDER_FILTER = "newsletter@example.com" # можно список

SUBJECT_KEYWORDS = ["скидка", "акция", "подтверждение", "рассылка"]

DAYS_OLD = 60 # письма старше этого срока


def connect():

  server = IMAPClient(IMAP_SERVER, ssl=True)

  server.login(EMAIL, PASSWORD)

  server.select_folder("INBOX", readonly=False)

  return server


def search_emails(server):

  before_date = datetime.date.today() - datetime.timedelta(days=DAYS_OLD)

  criteria = ['BEFORE', before_date.strftime("%d-%b-%Y")]

  if SENDER_FILTER:

    criteria += ['FROM', SENDER_FILTER]

  return server.search(criteria)


def filter_by_subject(server, uids):

  filtered = []

  for uid in uids:

    raw = server.fetch([uid], ['BODY[]', 'FLAGS'])[uid]

    msg = pyzmail.PyzMessage.factory(raw[b'BODY[]'])

    subject = msg.get_subject().lower()

    if any(keyword in subject for keyword in SUBJECT_KEYWORDS):

      filtered.append(uid)

  return filtered


def delete_emails(server, uids):

  if not uids:

    print("Писем для удаления не найдено.")

    return

  server.delete_messages(uids)

  server.expunge()

  print(f"Удалено писем: {len(uids)}")


if __name__ == "__main__":

  print("🔐 Подключение к почте...")

  server = connect()

  print("📬 Поиск писем по фильтрам...")

  uids = search_emails(server)

  uids = filter_by_subject(server, uids)

  print(f"📛 Найдено {len(uids)} писем на удаление.")

  delete_emails(server, uids)

  server.logout()

Report Page