Как написать скрипт на Python, который будет удалять одно и то же письмо из почтовых ящиков всех сотрудников на Yandex.Mail?

Как можно удалить конкретное письмо из всех корпоративных ящиков, учитывая, что оно может находиться в разных папках у разных пользователей? Программно мне удается обнаружить письмо только в одной папке, но не во всех остальных. Как можно улучшить процесс поиска и удаления нужного письма из всех корпоративных ящиков?
  • 3 апреля 2024 г. 10:40
Ответы на вопрос 1
Для удаления одного и того же письма из почтовых ящиков всех сотрудников на Yandex.Mail можно воспользоваться библиотекой requests для работы с API Яндекс.Почты.

Пример скрипта на Python, который удаляет письмо по его заголовку из почтовых ящиков всех сотрудников:

```python
import requests

# Данные для авторизации
username = 'ваш_email@домен'    
password = 'ваш_пароль'

# API ключ Яндекс
API_KEY = 'ваш_API_ключ'

# Заголовок письма для удаления
email_subject = 'Удалить это письмо'

# Получение списка всех ящиков
response = requests.get(f'https://mail.yandex.ru/api/internal/domains?api_key={API_KEY}', 
                        auth=(username, password))

if response.status_code == 200:
    domains = response.json()['domains']

    for domain in domains:
        domain_name = domain['name']
        response = requests.get(f'https://mail.yandex.ru/api/internal/users?domain={domain_name}&api_key={API_KEY}', 
                                auth=(username, password))
        if response.status_code == 200:
            users = response.json()['users']

            for user in users:
                user_email = user['email']
                mail_folder = requests.get(f'https://mail.yandex.ru/api/internal/folders?login={user_email}&api_key={API_KEY}', 
                                           auth=(username, password))
                if mail_folder.status_code == 200:
                    folders = mail_folder.json()['folders']

                    for folder in folders:
                        folder_name = folder['name']
                        response = requests.get(f'https://mail.yandex.ru/api/internal/emails?folder={folder_name}&login={user_email}&api_key={API_KEY}', 
                                                auth=(username, password))
                        
                        if response.status_code == 200:
                            emails = response.json()['emails']

                            for email in emails:
                                if email['subject'] == email_subject:
                                    email_id = email['id']
                                    delete_email = requests.delete(f'https://mail.yandex.ru/api/internal/emails/{email_id}?login={user_email}&api_key={API_KEY}', 
                                                                   auth=(username, password))
                                    if delete_email.status_code == 200:
                                        print(f'Письмо с заголовком "{email_subject}" удалено из почтового ящика {user_email}')
                                    else:
                                        print(f'Ошибка при удалении письма из почтового ящика {user_email}')
else:
    print('Ошибка при получении списка пользователей')

```

Для улучшения процесса поиска и удаления нужного письма из всех корпоративных ящиков можно использовать более продвинутые методы поиска, например, поиск по ключевым словам, дате получения письма, отправителю и т.д. Также стоит учитывать, что почтовые ящики могут быть организованы в различных структурах и иерархиях, поэтому необходимо учесть все возможные варианты при поиске и удалении письма.
Похожие вопросы