Yandex.360 imap python. Как удалить письмо из всех ящиков сотрудников?

Ссылка скопирована
1 ответ

Приветствую всех.
Задача такая:
Как удалить одно конкретное письмо которое лежит во всех корпоративных ящиках?
Проблема заключается в поиске этого самого письма, т.к. оно может лежать не только в 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 Ошибка поиска в папке: ххххх

Извините если что-то непонятно, но я очень старался корректно донести вопрос сообществу :))

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для удаления письма из всех ящиков сотрудников в 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()

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, перебирает все ящики сотрудников, ищет все письма в каждом ящике, помечает их как удаленные и подтверждает удаление. Пожалуйста, убедитесь, что у вас есть все необходимые разрешения для удаления писем из ящиков сотрудников, и что вы используете это с осторожностью, чтобы не потерять важные данные.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно