Я пытаюсь создать соединитель IMAP в Python для получения почты до ее обработки. Сейчас я делаю свой тест с GMAIL.
Вот письмо, которое я пытаюсь обработать: http://i.imgur.com/i1WU1gU.png
В моем коде вот что я делаю для сейчас:
import email
import chardet
import imaplib
for mail_id in data:
res, data = self.conn.fetch(mail_id, '(BODY[HEADER.FIELDS (FROM)] BODY[HEADER.FIELDS (TO)] UID BODY[TEXT])')
raw_body = data[0][1]
encoding_body = chardet.detect(raw_body)['encoding']
body = email.message_from_string(raw_body.decode(encoding_body))
dest_email = data[1][1]
sender_email = data[2][1]
f = open('/home/nathan/PycharmProjects/test.html', 'w+')
f.write(body.get_payload())
f.close()
У меня не было ошибок, но вот результат тела:
https://pastebin.com/fhzqsCRM
Любая идея почему какой-то странный символ здесь? Кроме того, символ с акцентом неправильно декодирован ..
Заранее спасибо
РЕДАКТИРОВАТЬ:
Я уже пробую со следующим:
res, data = self.conn.fetch(mail_id, '(RFC822)')
msg = email.message_from_bytes(data[0][1])
for part in msg.walk():
if part.get_content_type() == 'text/html':
print(part)
У меня просто HTML, но та же проблема с кодировкой ..
ФИНАЛЬНОЕ РЕДАКТИРОВАНИЕ:
Благодаря @Botje кажется, что электронная почта была закодирована с помощью 'Quoted-printable ». Итак, вот решение для этого типа кодировки:
import quopri
res, data = self.conn.fetch(mail_id, '(RFC822)')
msg = email.message_from_bytes(data[0][1])
for part in msg.walk():
if part.get_content_type() == 'text/html':
part = quopri.decodestring(part.get_payload()).decode('UTF-8')