周りを見て、満足のいく答えを見つけることができませんでした。誰もがPythonでOutlookから.msgファイルを解析する方法を知っていますか?
Mimetoolsとemail.parserを試してみましたが、うまくいきませんでした。ヘルプは大歓迎です!
これは私のために働く:
import win32com.client
Outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
msg = Outlook.OpenSharedItem(r"C:\test_msg.msg")
print msg.SenderName
print msg.SenderEmailAddress
print msg.SentOn
print msg.To
print msg.CC
print msg.BCC
print msg.Subject
print msg.Body
count_attachments = msg.Attachments.Count
if count_attachments > 0:
for item in range(count_attachments):
print msg.Attachments.Item(item + 1).Filename
del Outlook, msg
To、CC、およびBCCプロパティの名前(例: "John Doe")だけでなく、電子メールアドレスにアクセスする方法については、次の投稿を参照してください。 リンクの説明をここに入力
Matt Walkerによる msg-extractor
utilityを使用して、MS Outlookファイル(.msg)から関連フィールドを抽出することに成功しました。
pip install extract-msg
追加のモジュールをインストールする必要がある場合があることに注意してください。私の場合、imapclientをインストールする必要があります。
pip install imapclient
import extract_msg
f = r'MS_Outlook_file.msg' # Replace with yours
msg = extract_msg.Message(f)
msg_sender = msg.sender
msg_date = msg.date
msg_subj = msg.subject
msg_message = msg.body
print('Sender: {}'.format(msg_sender))
print('Sent On: {}'.format(msg_date))
print('Subject: {}'.format(msg_subj))
print('Body: {}'.format(msg_message))
MsgExtractorユーティリティには他にも多くの便利な機能がありますが、これは最初から始めるのがよいでしょう。
ファイルC:\ Anaconda3\Scripts\ExtractMsg.py内の3〜8行目をコメントアウトする必要がありました。
#"""
#ExtractMsg:
# Extracts emails and attachments saved in Microsoft Outlook's .msg files
#
#https://github.com/mattgwwalker/msg-extractor
#"""
エラーメッセージ:
line 3
ExtractMsg:
^
SyntaxError: invalid syntax
これらの行をブロックすると、エラーメッセージは消え、コードは正常に機能しました。
これは古いスレッドですが、スレッドの件名exactlyの解決策を探している人にこの情報が役立つことを願っています。 githubのmattgwwalker のソリューションを使用することを強くお勧めします。これは OleFileIO_PLモジュール を外部にインストールする必要があります。
次のリンクを参照してください。
[MS-OXMSG]:Outlookアイテム(.msg)ファイル形式 、
。msgファイルから読み取る 、
保存されたOutlookメッセージファイル* .msgの編集
Redemption およびその RDOSession 。GetMessageFromMsgFileメソッドも使用できます。
set Session = CreateObject("Redemption.RDOSession")
set Msg = Session.GetMessageFromMsgFile("c:\temp\test.msg")
MsgBox Msg.Subject
pythonメールモジュールを試しましたが、msgファイルを正常に解析できない場合があります。
したがって、この場合、テキストまたはhtmlの後だけであれば、次のコードがうまくいきました。
start_text = "<html>"
end_text = "</html>"
def parse_msg(msg_file,start_text,end_text):
with open(msg_file) as f:
b=f.read()
return b[b.find(start_text):b.find(end_text)+len(end_text)]
print parse_msg(path_to_msg_file,start_text,end_text)
上記のウラジミールと同様の方法で解析できました。ただし、forループを追加して小さな変更を加える必要がありました。 glob.glob(r'c:\ test_email * .msg ')はリストを返しますが、Message(f)はファイルまたはstrを予期します。
f = glob.glob(r'c:\test_email\*.msg')
for filename in f:
msg = ExtractMsg.Message(filename)
msg_sender = msg.sender
msg_date = msg.date
msg_subj = msg.subject
msg_message = msg.body