Как удалить только одно конкретное сообщение, используя IMAP в Python - PullRequest
0 голосов
/ 05 июня 2019

Я ищу одно конкретное сообщение, а затем, после его обнаружения, хочу удалить его из папки «Входящие». Только этот. Мой код:

import email
import imaplib

def check_email(self, user, password, imap, port, message):
    M = imaplib.IMAP4_SSL(imap, port)
    M.login(user, password)
    M.select()
    type, message_numbers = M.search(None, '(ALL)')

    subjects = []

    for num in message_numbers[0].split():
        type, data = M.fetch(num, '(RFC822)')
        msg = email.message_from_bytes(data[0][1])
        subjects.append(msg['Subject'])

    if message in subjects:
        M.store(num, '+FLAGS', '\\Deleted')
    else:
        raise FileNotFoundError('Ooops!')

    M.close()
    M.logout()

Я хочу найти и удалить только одно письмо по заголовку, gven в переменной (сообщение). Вы можете мне помочь?

1 Ответ

0 голосов
/ 06 июня 2019

Вы перебираете все сообщения, затем удаляете последнее (то, на что num указывает после завершения цикла), если какое-либо из сообщений имеет соответствующую тему.Вы, вероятно, захотите переопределить код, чтобы проверка проходила внутри цикла, и, вероятно, отмените оставшуюся часть цикла, как только найдете нужный.

def check_email(self, user, password, imap, port, message):
    M = imaplib.IMAP4_SSL(imap, port)
    M.login(user, password)
    M.select()
    type, message_numbers = M.search(None, '(ALL)')

    found = False

    for num in message_numbers[0].split():
        type, data = M.fetch(num, '(RFC822)')
        msg = email.message_from_bytes(data[0][1])
        # No need to collect all the subjects in a list
        # Just examine the current one, then forget this message if it doesn't match
        if message in msg['Subject']:
            M.store(num, '+FLAGS', '\\Deleted')
            found = True
            break

    # Don't raise an exception before cleaning up
    M.close()
    M.logout()

    # Now finally
    if not Found:
        raise FileNotFoundError('Ooops!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...