it-swarm.com.de

Analysieren von Outlook-MSG-Dateien mit Python

Sah sich um und konnte keine befriedigende Antwort finden. Weiß jemand, wie .msg-Dateien mit Python aus Outlook analysiert werden?

Ich habe es mit Mimetools und email.parser ohne Glück versucht. Hilfe wäre sehr dankbar!

22
Michael

Das funktioniert für mich:

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
30
Brent Edwards

Es ist mir gelungen, relevante Felder aus MS Outlook-Dateien (.msg) mit msg-extractor utilitity by Matt Walker zu extrahieren.

Vorkenntnisse

pip install msg-extractor

Beachten Sie, dass möglicherweise zusätzliche Module installiert werden müssen. In meinem Fall muss imapclient installiert werden:

pip install imapclient

Verwendungszweck

import ExtractMsg
import glob

f = r'MS_Outlook_file.msg'  # Replace with yours
msg = ExtractMsg.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: {}, Sender: {}'.format(msg_date))
print('Subject: {}'.format(msg_subj))
print('Body: {}'.format(msg_message))

Es gibt viele andere nützliche Dinge in MsgExtractor, die es zu erkunden gilt, aber das ist ein guter Anfang.

Hinweis

Ich musste die Zeilen 3 bis 8 in der Datei C:\Anaconda3\Scripts\ExtractMsg.py auskommentieren:

#"""
#ExtractMsg:
#    Extracts emails and attachments saved in Microsoft Outlook's .msg files
#
#https://github.com/mattgwwalker/msg-extractor
#"""

Fehlermeldung war:

line 3
    ExtractMsg:
              ^
SyntaxError: invalid syntax

Nach dem Blockieren dieser Zeilen verschwand die Fehlermeldung und der Code funktionierte einwandfrei. 

4
Vladimir Lukin

Obwohl dies ein alter Thread ist, hoffe ich, dass diese Informationen jemandem helfen können, der nach einer Lösung für das Thread-Thema genau sucht. Ich empfehle dringend, die Lösung von mattgwwalker in github zu verwenden, die erfordert, dass das OleFileIO_PL-Modul extern installiert wird.

3
fatih_dur

Siehe die folgenden Links:
[MS-OXMSG]: Dateiformat des Outlook-Elements (.msg)
Lesen von .msg-Dateien ,
Bearbeiten einer gespeicherten Outlook-Nachrichtendatei * .msg

Sie können auch Redemption und ihre RDOSession .GetMessageFromMsgFile - Methode verwenden:

  set Session = CreateObject("Redemption.RDOSession")
  set Msg = Session.GetMessageFromMsgFile("c:\temp\test.msg")
  MsgBox Msg.Subject

Ich habe das Python-E-Mail-Modul ausprobiert und die msg-Datei kann manchmal nicht erfolgreich analysiert werden.

Wenn Sie also nur nach Text oder HTML suchen, hat der folgende Code für mich funktioniert.

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)
0
paolov

Ich konnte es auf ähnliche Weise analysieren, wie Wladimir oben erwähnt hat. Ich musste jedoch eine kleine Änderung durch Hinzufügen einer for-Schleife vornehmen. Der glob.glob (r'c:\test_email * .msg ') gibt eine Liste zurück, wohingegen die Nachricht (f) eine Datei oder eine Zeichenfolge erwartet.

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
0
Sazzad