@llllDMllll

Как проще разпарсить email на Python?

Добрый день! Читаю почту с помощью

box = poplib.POP3(server, port)
OpenMailbox()
...
(resp, lines, octets) = box.retr(msgnum)


далее парсю содержимое с помощью

msgtext = "\n".join(lines) + "\n\n"
message = email.message_from_string(msgtext)


иногда в message["subject"] (или message["to"], message["from"]) попадается такое содержимое

=?UTF-8?B?0KHQsdC10YDQsdCw0L3QuiDQntC90LvQsNC50L0uINCe0LTQvdC+0YDQsNC3?=
 =?UTF-8?B?0L7QstGL0Lkg0L/QsNGA0L7Qu9GMINC00LvRjyDQstGF0L7QtNCwIDE2Mzg=?= 
 =?UTF-8?B?Nw==?=


Бывает так же =?UTF-8?Q? и другие.
Это кириллица в теме или адресе. Например:
"Дмитрий" <dmitry@mail.ru>
Можно в ручную перекодировать такие заголовки с помощью функций:

quopri.decodestring(mystr) для  =?UTF-8?Q?
base64.b64decode(mystr) для  =?UTF-8?B?


но, для этого нужно: определить наличие проблемы (не ascii кодировка), в ручную выделять подстроку, в ручную определять кодировку и вызывать decodestring для subject, (а так же иногда для полей from, to). Может быть кто-то подскажет более простой способ чтения почты, решающий проблемы с различными кодировками в полях письмах?
  • Вопрос задан
  • 2492 просмотра
Решения вопроса 1
@javedimka
Хочу сока
Гуглится по запросу “Python poplib Unicode”:
>>> from email.header import decode_header
>>> s = '=?UTF-8?B?0KHQsdC10YDQsdCw0L3QuiDQntC90LvQsNC50L0uINCe0LTQvdC+0YDQsNC3?='
>>> bytes, encoding = decode_header(s)[0]
>>> bytes.decode(encoding)
'Сбербанк Онлайн. Однораз'

https://stackoverflow.com/questions/12527655/how-t...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы