2013-08-28 38 views
6

Próbuję pobrać załącznik z wiadomości e-mail i zapisać go w określonym folderze z oryginalną nazwą pliku. E-mail jest bardzo prosty i nie ma go wiele poza załącznikiem. Plik jest plikiem csv i będzie tylko jeden na e-mail. To jest to, co dotychczas, ale jestem nowy w tym i nie jestem pewien, jak postępować. Używa programu Outlook, jeśli to pomaga. Każda pomoc jest doceniana.Jak uzyskać załącznik CSV z wiadomości e-mail i zapisać go

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, gdy uruchomię message=m.get_content_maintype() mówi, że to jest tekst.

Odpowiedz

11

Rozejrzałem się jeszcze raz i wypróbowałem jeszcze kilka rzeczy. Te: Downloading multiple attachments using imaplib i How do I download only unread attachments from a specific gmail label? otrzymałem odpowiedź, gdy trochę się z nią bawiłem.

kod, który pracował:

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