KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am trying to use Python 3 to extract the body of email messages from a thunderbird mbox file. It is an IMAP account. I would like to have the text part of the body of the email available to process as a unicode string. It should 'look like' the email does in Thunderbird, and not contain escaped characters such as \r\n =20 etc. I think that it is the Content Transfer Encodings that I don't know how to decode or remove. I receive emails with a variety of different Content Types, and different Content Transfer Encodings. This is my current attempt : import mailbox import quopri,base64 def myconvert(encoded,ContentTransferEncoding): if ContentTransferEncoding == 'quoted-printable': result = quopri.decodestring(encoded) elif ContentTransferEncoding == 'base64': result = base64.b64decode(encoded) mboxfile = 'C:/Users/Username/Documents/Thunderbird/Data/profile/ImapMail/server.name/INBOX' for msg in mailbox.mbox(mboxfile): if msg.is_multipart(): #Walk through the parts of the email to find the text body. for part in msg.walk(): if part.is_multipart(): # If part is multipart, walk through the subparts. for subpart in part.walk(): if subpart.get_content_type() == 'text/plain': body = subpart.get_payload() # Get the subpart payload (i.e the message body) for k,v in subpart.items(): if k == 'Content-Transfer-Encoding': cte = v # Keep the Content Transfer Encoding elif subpart.get_content_type() == 'text/plain': body = part.get_payload() # part isn't multipart Get the payload for k,v in part.items(): if k == 'Content-Transfer-Encoding': cte = v # Keep the Content Transfer Encoding print(body) print('Body is of type:',ty
Tags (comma-separated)
Save Edits
Cancel