Yandex.360 imap python. Как удалить письмо из всех ящиков сотрудников?
Приветствую всех.
Задача такая:
Как удалить одно конкретное письмо которое лежит во всех корпоративных ящиках?
Проблема заключается в поиске этого самого письма, т.к. оно может лежать не только в INBOX, но и в других папках у разных пользователей.
Чего я добился на данный момент:
def delete_emails(username, token, subj): auth_string = generate_oauth2_string(username, token) imap_connector = imaplib.IMAP4_SSL("imap.yandex.com", 993) imap_connector.authenticate('XOAUTH2', lambda x: auth_string) folders = imap_connector.list() # получаем список папок for folder in folders[1]: # ходим по папкам и ищем письмо box = shlex.split(imaputf7decode(folder.decode()))[-1] # decode просто для отладки чтобы кириллица отображалась try: imap_connector.select(imaputf7encode(box)) # выбираем папку в ящике subj = 'SUBJECT "'+subj+'"' # тема письма status, messages = imap_connector.search("utf-7", subj.encode('utf-7')) # поиск, он и вызывает exception ic(messages) print("В папке: "+ box + " найдено сообщение: " + str(messages[0])) except imaplib.IMAP4.error: print("Ошибка поиска в папке: " + box) |
def delete_emails(username, token, subj): auth_string = generate_oauth2_string(username, token) imap_connector = imaplib.IMAP4_SSL("imap.yandex.com", 993) imap_connector.authenticate('XOAUTH2', lambda x: auth_string) folders = imap_connector.list() # получаем список папок for folder in folders[1]: # ходим по папкам и ищем письмо box = shlex.split(imaputf7decode(folder.decode()))[-1] # decode просто для отладки чтобы кириллица отображалась try: imap_connector.select(imaputf7encode(box)) # выбираем папку в ящике subj = 'SUBJECT "'+subj+'"' # тема письма status, messages = imap_connector.search("utf-7", subj.encode('utf-7')) # поиск, он и вызывает exception ic(messages) print("В папке: "+ box + " найдено сообщение: " + str(messages[0])) except imaplib.IMAP4.error: print("Ошибка поиска в папке: " + box)
В итоге в консоле по всем папкам **Ошибка поиска в папке: ХХХ**
Но, если я явно укажу папку в которой нужно искать, то сообщение находит, далее уже удалить без проблем.
Еще странность, в цикле он почему то не ругается на ошибку только в одной папке, но там искомого письма на самом деле нет, оно в другой папке лежит.
Ошибка поиска в папке: хххххххххх Ошибка поиска в папке: хххххх ic| messages: [b''] В папке: <b>XXXXXX</b> найдено сообщение: b'' <-- Здесь нет письма в аккаунте! Ошибка поиска в папке: хххххх Ошибка поиска в папке: хххххх Ошибка поиска в папке: ххххх Ошибка поиска в папке: ххххх Ошибка поиска в папке: Archive Ошибка поиска в папке: Drafts Ошибка поиска в папке: Drafts|template Ошибка поиска в папке: INBOX Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|хххххх Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|qrator <-- Оно здесь! Ошибка поиска в папке: ххххх Ошибка поиска в папке: ххххх Ошибка поиска в папке: Spam Ошибка поиска в папке: Trash Ошибка поиска в папке: ххххх |
Ошибка поиска в папке: хххххххххх Ошибка поиска в папке: хххххх ic| messages: [b''] В папке: <b>XXXXXX</b> найдено сообщение: b'' <-- Здесь нет письма в аккаунте! Ошибка поиска в папке: хххххх Ошибка поиска в папке: хххххх Ошибка поиска в папке: ххххх Ошибка поиска в папке: ххххх Ошибка поиска в папке: Archive Ошибка поиска в папке: Drafts Ошибка поиска в папке: Drafts|template Ошибка поиска в папке: INBOX Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|хххххх Ошибка поиска в папке: INBOX|ххххх Ошибка поиска в папке: INBOX|qrator <-- Оно здесь! Ошибка поиска в папке: ххххх Ошибка поиска в папке: ххххх Ошибка поиска в папке: Spam Ошибка поиска в папке: Trash Ошибка поиска в папке: ххххх
Извините если что-то непонятно, но я очень старался корректно донести вопрос сообществу :))
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для удаления письма из всех ящиков сотрудников в Yandex.360 IMAP с использованием Python, вам понадобится библиотека imaplib, которая позволяет взаимодействовать с почтовыми серверами по протоколу IMAP. Вот пример кода, который показывает, как это можно сделать:
import imaplib # Подключение к почтовому серверу mail = imaplib.IMAP4_SSL('imap.yandex.ru') mail.login('ваш_email@yandex.ru', 'ваш_пароль') # Получение списка ящиков status, mailboxes = mail.list() for mailbox in mailboxes: # Переход к ящику status, messages = mail.select(mailbox.split()[-1]) # Поиск писем, которые хотим удалить status, message_ids = mail.search(None, 'ALL') for message_id in message_ids[0].split(): # Удаление письма mail.store(message_id, '+FLAGS', '\\Deleted') # Подтверждение удаления mail.expunge() # Отключение от сервера mail.logout()
Этот код подключается к почтовому серверу Yandex.360 IMAP, перебирает все ящики сотрудников, ищет все письма в каждом ящике, помечает их как удаленные и подтверждает удаление. Пожалуйста, убедитесь, что у вас есть все необходимые разрешения для удаления писем из ящиков сотрудников, и что вы используете это с осторожностью, чтобы не потерять важные данные.