2013-08-28 24 views
6

メールから添付ファイルを取得し、元のファイル名の特定のフォルダに保存しようとしています。電子メールは非常に基本的なもので、添付ファイル以外にはそれほど多くありません。ファイルはcsvファイルであり、メールごとに1つしかありません。これはこれまで私が行ってきたことですが、私はこれには新しいので、どのように進むべきかは分かりません。それが役立つなら、これはOutlookを使用しています。どんな助けもありがとうございます。メールからcsv添付ファイルを取得して保存する方法

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、私がmessage=m.get_content_maintype()を実行すると、それはテキストだと言います。

答えて

11

私はもう少し見渡して、もう少し試してみました。私が少し遊んだら、答えは Downloading multiple attachments using imaplibHow do I download only unread attachments from a specific gmail label?でした。働い

コード:

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() 
関連する問題