I am displaying new email with IMAP
, and everything looks fine, except for one message subject shows as:
=?utf-8?Q?Subject?=
How can I fix it?
I am displaying new email with IMAP
, and everything looks fine, except for one message subject shows as:
=?utf-8?Q?Subject?=
How can I fix it?
In MIME terminology, those encoded chunks are called encoded-words. You can decode them like this:
import email.Header
text, encoding = email.Header.decode_header('=?utf-8?Q?Subject?=')[0]
Check out the docs for email.Header
for more details.
This is a MIME encoded-word. You can parse it with email.header
:
import email.header
def decode_mime_words(s):
return u''.join(
word.decode(encoding or 'utf8') if isinstance(word, bytes) else word
for word, encoding in email.header.decode_header(s))
print(decode_mime_words(u'=?utf-8?Q?Subject=c3=a4?=X=?utf-8?Q?=c3=bc?='))
Try Imbox
Because imaplib
is a very excessive low level library and returns results which are hard to work with
Installation
pip install imbox
Usage
from imbox import Imbox
with Imbox('imap.gmail.com',
username='username',
password='password',
ssl=True,
ssl_context=None,
starttls=False) as imbox:
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
message.subject