Вы перебираете все сообщения, затем удаляете последнее (то, на что 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!')