05:18
Удалить письма с Mail.ru

У меня вылезла проблема, что из-за ежедневных рассылок изрядно заполнился почтовый ящик на mail.ru. По объёму меня не угнетало, но надоело, что там лежит 1500+ писем, которые я никогда читать не буду. Удалять их через WEB интерфейс то ещё удовольствие. Решил написать программу, которая сделает это за меня. С запросом к GeekBot написать программу в PowerShell у меня не срослось. Визуально код нормальный, но в Windows-10 программа не заработала от слова вообще. Такое ощущение, что не хватает библиотек для работы с почтой по протоколу IMAP. Запросил программу на Python.

Вот текст запроса: напиши программу на python для удаления писем из почтового ящика на сервере mail.ru. в теме письма должно быть "3DNews" и письма должны быть получены ранее 01/08/2025

Прилетел код, но не совсем рабочий. Пришлось поправить:

1. Спотыкался при пустой теме письма;

2. Не совпадали тип указанной даты с типом даты в письме;

3. Добавил вывод на экран списка папок;

4. Добавил вывод на экран протокола работы.

В итоге проковырялся 2 часа. Научился читать, править и использовать python, удалил 1500+ писем.

Код программы:

import imaplib
import email
import datetime
from email.header import decode_header
from datetime import datetime
import imap_utf7 #скачать библиотеку для показа списка папок или закомментарить, если не хотим использовать библиотеку imap_utf7
#imap_utf7 - декодирует названия папок на кириллице, положить в папку к программе.

# Настройки для подключения к Mail.ru
mail_server = 'imap.mail.ru'
username = 'имя_яшика@mail.ru'
# Сгенерируйте пароль для приложения в сервисе Mail.ru
password = 'пароль'

# Подключение к почтовому серверу
mail = imaplib.IMAP4_SSL(mail_server)
mail.login(username, password)
mbox='INBOX'
mail.select(mbox)
total=0

#Показать список папок.
status, folders = mail.list()
if status == 'OK':
    for folder in folders:
        print(imap_utf7.decode(folder)) #Закомментарить, если не хотим использовать библиотеку imap_utf7
#        print(folder) #Раскомментарить, если не хотим использовать библиотеку imap_utf7

print()
# Поиск писем
status, messages = mail.search(None, 'ALL')
mail_ids = messages[0].split()

# Дата для сравнения
cutoff_date = datetime(2025, 8, 1)
# Строка темы для сравнения
subj_str='3DNews'

print('Писем в', mbox, ':', len(mail_ids))
print()
for mail_id in mail_ids:
    status, msg_data = mail.fetch(mail_id, '(RFC822)')
    msg = email.message_from_bytes(msg_data[0][1])

    # Получение даты получения письма
    date_str = msg['Date']
    date_received = email.utils.parsedate_to_datetime(date_str)

#    Добавил, но не использую. Почему-то иногда письма не по порядку даты. Досрочное завершение цикла.
#    if date_received.replace(tzinfo=None) >= cutoff_date: #Если позже даты, то выходим
#        break

    # Получение темы письма
    if msg['Subject'] is not(None): #Если не пустая тема в письме
        subject, encoding = decode_header(msg['Subject'])[0]
        if isinstance(subject, bytes):
            subject = subject.decode(encoding if encoding else 'utf-8')
        print(subject, date_received)

        # Условие для удаления
        if subj_str in subject and date_received.replace(tzinfo=None) < cutoff_date:
            mail.store(mail_id, '+FLAGS', '\\Deleted')
            total=total+1
            print('Удалено:', total)

# Удаление помеченных писем
mail.expunge()
mail.logout()
print('Всего удалено:', total)
print('Очистите папку "Удалённые".')

Категория: Excel, VBA | Просмотров: 4 | Добавил: Gonzales115 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
close