Использование регулярных выражений может быть самым коротким, но это решение более читаемо:
def to_snake_case(s):
snake = "".join(["_"+c.lower() if c.isupper() else c for c in s])
return snake[1:] if snake.startswith("_") else snake
Можно использовать imap_tools пакет: https://pypi.org/project/imap-tools /
from imap_tools import MailBox, Q
# get list of email subjects from INBOX folder
with MailBox('imap.mail.com').login('test@mail.com', 'password') as mailbox:
# mark_seen=False - not mark emails as seen on fetch
subjects = [msg.subject for msg in mailbox.fetch(mark_seen=False)]
Вы можете использовать (RFC822.PEEK)
в качестве аргумента «части сообщения» согласно RFC 1730 (я не проверял, какие серверы на самом деле реализовать это правильно, но им это не кажется трудным).
Должно работать следующее:
typ, msg_data = imap_conn.fetch(uid, '(BODY.PEEK[HEADER])')
или BODY.PEEK[TEXT]
и т.д.