Как правильно написать запрос поиска письма по BODY?

Для написания запроса поиска письма по BODY в Python вам понадобится библиотека IMAP и модуль SearchKey. IMAP (Internet Message Access Protocol) – это стандартный протокол для доступа к электронной почте на удаленном сервере.

Вот пример кода, который позволит вам выполнить поиск письма по BODY:

import imaplib
from email.header import decode_header

# Подключение к почтовому серверу
imap_server = 'imap.example.com'
username = 'your_username'
password = 'your_password'

# Установка соединения
imap_connection = imaplib.IMAP4_SSL(imap_server)
imap_connection.login(username, password)
imap_connection.select('INBOX')  # Выбираем папку "Входящие"

# Функция для декодирования заголовков письма
def decode_header_text(text):
    decoded = decode_header(text)
    return ' '.join([str(part[0], part[1]) if isinstance(part[0], bytes) else part[0] for part in decoded])

# Функция для поиска писем по BODY
def search_emails_by_body(body_search_text):
    # Кодируем текст запроса в формат для IMAP
    search_query = '(BODY "' + body_search_text + '")'
    result, data = imap_connection.search(None, search_query)
    email_ids = data[0].split()

    # Перебираем все найденные письма
    for email_id in email_ids:
        # Получаем данные электронного письма
        result, data = imap_connection.fetch(email_id, '(RFC822)')
        raw_email = data[0][1]

        # Декодируем и обрабатываем содержимое письма
        email_message = email.message_from_bytes(raw_email)
        subject = decode_header_text(email_message['Subject'])
        from_address = decode_header_text(email_message['From'])
        to_address = decode_header_text(email_message['To'])

        print('Email ID:', email_id)
        print('Subject:', subject)
        print('From:', from_address)
        print('To:', to_address)
        print('---')

# Выполняем поиск писем по BODY
search_emails_by_body('привет')

# Закрываем соединение с сервером
imap_connection.logout()

Обратите внимание, что вам нужно будет заменить imap.example.com на адрес вашего почтового сервера, your_username на ваше имя пользователя и your_password на ваш пароль.

В функции search_emails_by_body мы используем метод search библиотеки IMAP для выполнения запроса поиска. Затем мы обрабатываем найденные письма с помощью методов fetch и message_from_bytes модуля email. Можно выбрать и обработать другие заголовки письма, если это требуется.

Надеюсь, эта информация поможет вам правильно написать запрос поиска письма по BODY в Python с использованием библиотеки IMAP.