2014-04-15 60 views
0

您好我有一個類似的問題,這樣的:保存電子郵件附件,以蟒蛇文件2.7

Getting mail attachment to python file object

我要保存所有文件附件的文件我從電子郵件的硬盤驅動器。但是,如果我是正確的,不是多部分電子郵件的所有部分都是「真實」文件(例如電子郵件的html部分中的某些圖像)。我想100%確定我保存的文件是附件。

現在我有這樣的:

mail = ""; 
for line in sys.stdin: 
    mail += line; 

msg = email.message_from_string(mail); 

for part in msg.walk(): 
    check if is file and save 

回答

1

基礎上 http://www.ianlewis.org/en/parsing-email-attachments-python

我設法創建此代碼:

import sys; 
import email 

class Attachement(object): 
    def __init__(self): 
     self.data = None; 
     self.content_type = None; 
     self.size = None; 
     self.name = None; 



def parse_attachment(message_part): 
    content_disposition = message_part.get("Content-Disposition", None); 
    if content_disposition: 
     dispositions = content_disposition.strip().split(";"); 
     if bool(content_disposition and dispositions[0].lower() == "attachment"): 

      attachment = Attachement(); 
      attachment.data = message_part.get_payload(decode=True); 
      attachment.content_type = message_part.get_content_type(); 
      attachment.size = len(attachment.data); 
      attachment.name = message_part.get_filename(); 

      return attachment; 

    return None; 


if __name__=='__main__': 

    mail = ""; 
    for line in sys.stdin: 
     mail += line; 


    msg = email.message_from_string(mail); 

    attachements = list(); 

    if(msg.is_multipart()): 
     for part in msg.walk(): 
      attachement = parse_attachment(part); 
      if(attachement): 
       attachements.append(attachement); 




    for att in attachements: 
     file = open(att.name, 'w'); 
     file.write(att.data); 
     file.close(); 



    print 'OK';