2017-05-04 427 views
2

私は大量の.msgファイルを含むフォルダを持っています。添付ファイルの1つを保存できるようにしたい。私のアイデアは、ファイルをクリックして自動でファイルを抽出した後、何らかのファイル名でファイルを抽出していましたが、これに対する解決策はまだ見つかりませんでした。Python:.msgファイルから添付ファイルを保存する

これを行うにはどうすればよいですか?それとも良い方法ですか?

ありがとうございます!

更新: os.startfileを使用してファイルを開きたいと思っています... どうすれば別のウィンドウで開くことができますか?しかし、そのように行動する?/

+0

をこの質問はあなたに役立つかもしれない:のhttp:/ /stackoverflow.com/questions/9937664/how-to-extract-attachments-from-msg-files – Sevyns

+0

このファイルを見ました!残念ながら、私は既にmsgファイルをフォルダに持っています。だから、それは直接Outlookと相互作用していない – arthur6523

答えて

1

問題が解決するかどうかはわかりませんが、Pythonにはemail.parserが付いています。これは、少なくともあなたにMessageオブジェクトを与える

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

(それが適切な形式でだと仮定して)あなたはMSGファイルを読み込むのに役立ちます。あなたは付属のすべてのコンテンツを与えるmsg.walk()を使ってファイルを取得できるはずです。

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

これは動作するはずです:

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 

をあなたはフォルダを持っていると言うので、これはフォルダ全体を自動化します:

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