How to get csv application from email and save it

I am trying to get an attachment from email and save it in a specific folder with the original file name. Email is very simple and has nothing but an app. The file is a csv file, and for each letter there will be only one. This is what I still have, but I'm new to this and don’t know how to proceed. This will help Outlook if it helps. Any help is appreciated.

import imaplib import email mail=imaplib.IMAP4('mailserver.com') mail.login("username", "password") mail.select("DetReport") typ, msgs = mail.uid('Search', None, '(SUBJECT "Detection")') msgs = msgs[0].split() for emailid in msgs: resp, data = mail.fetch(emailid, "(RFC822)") email_body = data[0][1] m = email.message_from_string(email_body) message=m.get_content_maintype() 

FYI, when I run message=m.get_content_maintype() , it says that it is text.

+6
source share
1 answer

I looked around and tried a few more things. These are: Downloading multiple attachments using imaplib and How do I download only unread attachments from a specific gmail tag? They answered as soon as I played with him a little.

Code that worked:

 import imaplib import email import os svdir = 'c:/downloads' mail=imaplib.IMAP4('mailserver') mail.login("username","password") mail.select("DetReport") typ, msgs = mail.search(None, '(SUBJECT "Detection")') msgs = msgs[0].split() for emailid in msgs: resp, data = mail.fetch(emailid, "(RFC822)") email_body = data[0][1] m = email.message_from_string(email_body) if m.get_content_maintype() != 'multipart': continue for part in m.walk(): if part.get_content_maintype() == 'multipart': continue if part.get('Content-Disposition') is None: continue filename=part.get_filename() if filename is not None: sv_path = os.path.join(svdir, filename) if not os.path.isfile(sv_path): print sv_path fp = open(sv_path, 'wb') fp.write(part.get_payload(decode=True)) fp.close() 

POP3:

 import poplib import email server = poplib.POP3(pop_server) server.user(user) server.pass_(pass) # get amount of new mails and get the emails for them messages = [server.retr(n+1) for n in range(len(server.list()[1]))] # for every message get the second item (the message itself) and convert it to a string with \n; then create python email with the strings emails = [email.message_from_string('\n'.join(message[1])) for message in messages] for mail in emails: # check for attachment; for part in mail.walk(): if not mail.is_multipart(): continue if mail.get('Content-Disposition'): continue file_name = part.get_filename() # check if email park has filename --> attachment part if file_name: file = open(file_name,'w+') file.write(part.get_payload(decode=True)) file.close() 
+11
source

Source: https://habr.com/ru/post/952686/


All Articles