I inadvertently marked all the messages in my inbox as read with this python statement:
status, data = conn.uid('fetch', fetch_uids, '(RFC822)')
But I was able to walk through all the parts of the message with the following set of statments:
email_message = email.message_from_string(data[0][1])
for part in email_message.walk():
print '\n'
print 'Content-Type:',part.get_content_type()
print 'Main Content:',part.get_content_maintype()
print 'Sub Content:',part.get_content_subtype()
The output:
Content-Type: multipart/mixed
Main Content: multipart
Sub Content: mixed
Content-Type: multipart/alternative
Main Content: multipart
Sub Content: alternative
Content-Type: text/plain
Main Content: text
Sub Content: plain
Content-Type: text/html
Main Content: text
Sub Content: html
I found that if I used this statement instead:
status, data = conn.uid('fetch', fetch_uids, '(RFC822.HEADER BODY.PEEK[1])')
that I wouldn’t mark all of my messages read. However, I also wouldn’t get all the parts of the message:
Content-Type: multipart/mixed
Main Content: multipart
Sub Content: mixed
I tried to read the manual for imaplib here, but the word “peek” is not mentioned. My question is, how do I get all the parts of the message while not marking my messages as read? Thanks.
If you want just the headers, but still want the message to be left marked unread (UNSEEN), it requires two commands fetch and then store: