Cómo obtener el archivo adjunto csv del correo electrónico y guardarlo

Estoy tratando de obtener el archivo adjunto de un correo electrónico y guardarlo en una carpeta específica con el nombre del archivo original. El correo electrónico es muy básico y no tiene mucho más que el archivo adjunto. El archivo es un archivo csv y solo habrá uno por correo electrónico. Esto es lo que tengo hasta ahora, pero soy nuevo en esto y no estoy seguro de cómo proceder. Esto está usando Outlook si eso ayuda. Cualquier ayuda es apreciada.

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() 

Para su información, cuando ejecuto el message=m.get_content_maintype() dice que es texto.

Miré a mi alrededor un poco más y probé algunas cosas más. Éstas: descargando múltiples archivos adjuntos usando imaplib y ¿Cómo descargo solo archivos adjuntos no leídos de una etiqueta específica de gmail? Tuve la respuesta una vez jugué con ella un poco.

Código que funcionó:

 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()