2017-05-04 15 views
2

So habe ich einen Ordner mit einer Tonne MSG-Dateien. Ich möchte einen der Anhänge speichern können. Meine Idee war es, auf die Dateien zu klicken und dann die Datei mit einem bestimmten Dateinamen zu extrahieren, aber ich habe noch keine Lösung gefunden.Python: Anhänge von MSG-Dateien speichern

Wie gehe ich dabei vor? Oder ein besserer Weg?

Danke!

Update: Ich habe eine Idee, verwenden os.startfile die Datei zu öffnen Ich will es öffnen ... Wie kann ich es nicht in einem neuen Fenster öffnen? Aber tu es so? Wenn das Sinn macht:/

+0

Diese Frage kann hilfreich sein: http:

import win32com.client outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") msg = outlook.OpenSharedItem(filename) #filename including path att=msg.Attachments for i in att: i.SaveAsFile(os.path.join(Pathname, i.FileName))#Saves the file with the attachment name 

Da Sie sagen, dass Sie einen Ordner haben, das den gesamten Ordner automatisieren//stackoverflow.com/questions/9937664/how-to-extract-attachments-from-msg-files – Sevyns

+0

Ich habe diese Datei gesehen! Leider habe ich die msg-Datei bereits in einem Ordner. Es interagiert also nicht direkt mit dem Outlook – arthur6523

Antwort

1

Ich bin mir nicht sicher, ob das dein Problem lösen wird, aber Python kommt mit email.parser. Dies wird zumindest helfen, die msg-Datei lesen (es ist das richtige Format vorausgesetzt) ​​

import email 
with open('/path/to/your/file.msg') as fl: 
    msg = email.message_from_file(fl) 

, die Ihnen ein Message Objekt. Sie sollten in der Lage sein, die Datei unter Verwendung msg.walk() zu erhalten, die Ihnen den ganzen beigefügten Inhalt gibt.

for part in msg.walk(): 
    if part.get_content_type() == "image/png": 
     with open('out.png', 'w') as fl: 
      fl.write(part.get_payload(decode=True))) 
0

Diese Arbeit sollte:

Sie
import win32com.client 
import os 
files = [f for f in os.listdir('.') if os.path.isfile(f)] 
for file in files: 
    if file.endswith(".msg"): 
     outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
     msg = outlook.OpenSharedItem(file)   
     att=msg.Attachments 
     for i in att: 
      i.SaveAsFile(os.path.join(Pathname, i.FileName))#Saves the file with the attachment name