Quantcast
Channel: Active questions tagged email - Stack Overflow
Viewing all articles
Browse latest Browse all 30082

How to save file for every content_type rather than every uid with imaplib and email

$
0
0

I am successfully saving the content for each email with the following code, as a .txt, .html or .PDF file. However, I would like to save a version of every content_type, for each email (for each uid). Currently it is only saving one file type for every uid.

For example, an email with a PDF attachment is only currently saving the PDF. I would like it to save the PDF attachment along with the plain text content of the email, in 2 separate files.

Thanks for any help.

import imaplib
import email
import os
import mimetypes

mail = imaplib.IMAP4_SSL('imap.secureserver.net',993)
mail.login('[user]', '[pw]')
mail.select('Inbox')
result, data = mail.uid('search', None, 'ALL')
item_list = data[0].split()

for item in item_list:
    result2, email_data = mail.uid('fetch',item,'(RFC822)')
    raw_email = email_data[0][1].decode("utf-8")
    email_message = email.message_from_string(raw_email)

print_dir = False
if print_dir: print(dir(email_message)) #options, e.g. list of from, to etc.
from_    = email_message['From']
date_    = email_message['Date']

for part in email_message.walk():
    option = str(item)[2:-1] + '' + date_[:-15] + '' + from_ + ''

    content_type = part.get_content_type()
    print(str(item),'',content_type)

    if content_type == 'text/html':
        filename = option + '.html'
    elif content_type == 'text/plain':
        filename = option + '.txt'
    elif content_type == 'application/pdf':
        attachment = part.get_filename() #attachment filename
        filename = option + str(attachment)
    else:
        # Guesses the file type
        ext = mimetypes.guess_extension(content_type)
        if not ext:
            ext = '.bin'
        filename = option + ext

save_path = os.getcwd() + '/' + filename

with open(save_path, 'wb') as fp:
    fp.write(part.get_payload(decode=True))

^ For multitypes I would like to save a file with all the type extensions. Such as for 22382, a PDF and txt

^ Current Output files


Viewing all articles
Browse latest Browse all 30082

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>