Я пытаюсь выбрать конкретное письмо в папке imap без четкого идентификатора. Единственное, что у меня есть - это текстовая копия письма, сохраненного в виде файла eml.
Я пытался загрузить почту из файла с помощью модуля email
, но продолжаю получать ошибки всякий раз, когда запускаю функцию поиска модуля imaplib
, начиная с данных, содержащихся в почте.
В этом случае я предполагаю, что почта приходит из текущего почтового ящика.
Это код, который я сейчас использую
import imaplib, email
m = imaplib.IMAP4_SSL(IMAP_SERVER)
m.login(IMAP_USER, IMAP_PWD)
m.select()
mail_file = open('./file.eml')
raw_mail = mail_file.read()
mail = email.message_from_string(raw_mail)
resp, items = m.search(None, '(FROM "' + mail["FROM"] +'")')
Но я получаю следующую ошибку:
Traceback (последний вызов был последним):
File "<stdin>", line 1, in <module>
File "C:\Users\user\AppData\Local\conda\conda\envs\py353\lib\imaplib.py", line 707, in search
typ, dat = self._simple_command(name, *criteria)
File "C:\Users\user\AppData\Local\conda\conda\envs\py353\lib\imaplib.py", line 1180, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "C:\Users\user\AppData\Local\conda\conda\envs\py353\lib\imaplib.py", line 1011, in _command_complete
raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SEARCH command error: BAD [b'Error in IMAP command SEARCH: Unknown argument DATE (0.000 + 0.000 secs).']`
Как мне это сделать и какие фильтры я могу использовать, чтобы иметь разумный шанс получить именно то письмо, которое я хочу получить в результатах?
Редактировать: по запросу мои mail['FROM']
возвращает 'test sender\n\t<sender@domain.com>'
Я сделал тестовое жесткое кодирование аналогичного формата и удалил специальные символы, но, конечно, мне вернули другое письмо с соответствующим отправителем.
Также я пытаюсь получить правильную почту, не изменяя никаких данных самым автоматическим способом.