Не могу раскодировать тело письма Gmail POP3
import email
import poplib
login = "my_login"
password = "my_pass"
pop3_server = "pop.gmail.com"
gmail = poplib.POP3_SSL(pop3_server, "995")
gmail.set_debuglevel(1)
gmail.user(login)
gmail.pass_(password)
number_of_messages = len(gmail.list()[1])
print(number_of_messages)
lines = gmail.retr(number_of_messages)[1]
msg_content = b'\n\r'.join(lines)
message = email.message_from_bytes(msg_content)
print(message)
Я ожидаю получить
Delivered-To: [email protected]
Received: by 2002:a05:6e04:583:0:0:0:0 with SMTP id r3csp1208903imz;
Wed, 20 Oct 2021 09:29:39 -0700 (PDT)
<html>
....
content of message
....
</html>
Но получаю
Delivered-To: [email protected]
Received: by 2002:a05:6e04:583:0:0:0:0 with SMTP id r3csp1208903imz;
Wed, 20 Oct 2021 09:29:39 -0700 (PDT)
DQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFu
c2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRt
bDEtdHJhbnNpdGlvbmFsLmR0ZCI+DQo8IS0tIFRoaXMgaXMgdGhlIG5ldyBlbWFpbCB0
ZW1wbGF0ZSBmb3IgU1NQUiB3aGljaCBhbGlnbnMgd2VsbCB3aXRoIHRoZSBlbWFpbCB0
Ответы (2 шт):
Автор решения: Alexander Prokoshev
→ Ссылка
Кодировки тела письма и соответствующие им заголовки описаны в RFC 2045. Конкретно это письмо закодировано Base64, что должно быть отражено в заголовках, иначе вам придётся применять в программе какую-то эвристику для её обнаружения.
Кроме упомянутого RFC для корректного разбора писем вам как минимум понадобятся RFC 5322 и RFC 2047.
Автор решения: Shelmn
→ Ссылка
import poplib
from email.parser import Parser
login = ""
password = ""
pop3_server = "pop.yandex.com"
server = poplib.POP3_SSL(pop3_server)
server.set_debuglevel(1)
pop3_server_welcome_msg = server.getwelcome().decode('utf-8')
server.user(login)
server.pass_(password)
print('Messages: %s. Size: %s' % server.stat())
resp, mails, octets = server.list()
print(mails)
index = len(mails)
lines = server.retr(index)[1]
msg_content = b'\r\n'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
content = msg.get_payload(decode=True).decode("utf-8")
print(content)
server.quit()
Этот код возвращает красивый HTML
Всем спасибо за ответы!