簡體   English   中英

用 python 解析 outlook.msg 文件

[英]Parsing outlook .msg files with python

環顧四周,找不到滿意的答案。 有誰知道如何使用 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

請參閱以下有關訪問 email 地址的方法的帖子,而不僅僅是來自 To、CC 和 BCC 屬性的名稱(例如“John Doe”) - 在此處輸入鏈接描述

我使用 Matt Walker 的msg-extractor實用程序成功地從 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

阻止這些行后,錯誤消息消失了,代碼工作得很好。

盡管這是一個舊線程,但我希望這些信息可以幫助那些正在尋找線程主題確切內容的解決方案的人。 我強烈建議在 github 中使用 mattgwwalker 的解決方案,這需要在外部安裝OleFileIO_PL 模塊

我能夠以與上述弗拉基米爾類似的方式解析它。 但是我需要通過添加一個 for 循環來做一些小的改變。 glob.glob(r'c:\test_email*.msg') 返回一個列表,而 Message(f) 需要一個文件或字符串。

 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

我在網上找到了一個名為 MSG PY 的模塊。 這是 Python 的 Microsoft Outlook.msg 文件模塊。 該模塊允許您輕松創建/讀取/解析/轉換 Outlook.msg 文件。 該模塊不需要在機器或任何其他第三方應用程序或庫上安裝 Microsoft Outlook 即可工作。 例如:

 from independentsoft.msg import Message appointment = Message("e:\\appointment.msg") print("subject: " + str(appointment.subject)) print("start_time: " + str(appointment.appointment_start_time)) print("end_time: " + str(appointment.appointment_end_time)) print("location: " + str(appointment.location)) print("is_reminder_set: " + str(appointment.is_reminder_set)) print("sender_name: " + str(appointment.sender_name)) print("sender_email_address: " + str(appointment.sender_email_address)) print("display_to: " + str(appointment.display_to)) print("display_cc: " + str(appointment.display_cc)) print("body: " + str(appointment.body))

請參閱以下鏈接:
[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 email 模塊,有時無法成功解析 msg 文件。

所以,在這種情況下,如果你只是在 text 或 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)

extract-msg Python 模塊( pip install extract-msg )也非常有用,因為它允許從消息中快速訪問完整的標題,Z038E648F69B23B2A2A2A59DAF262D812 比必要的更難獲取。

我對顯示完整標題的 Vladimir 代碼的修改是:

 #./usr/bin/env python3 import extract_msg import sys msg = extract_msg.Message(sys.argv[1]) msg_sender = msg.sender msg_date = msg.date msg_subj = msg:subject print('Sender. {}':format(msg_sender)) print('Sent On. {}':format(msg_date)) print('Subject. {}',format(msg_subj)) print ("=== Details ===") for k. v in msg.header:items(): print("{}. {}",format(k. v)) print(msg body)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM