L'analyse outlook.fichiers msg avec python

J'ai regardé autour de moi et je n'ai pas trouvé de réponse satisfaisante. Personne ne sait comment les analyser .des fichiers msg d'outlook avec Python?

j'ai essayé d'utiliser des outils de mimétisme et des e-mails.analyseur avec pas de chance. De l'aide serait grandement appréciée!

17
demandé sur Michael 2014-10-12 09:41:26

6 réponses

Cela fonctionne pour moi:

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
22
répondu Brent Edwards 2015-05-25 19:45:44

même s'il s'agit d'un vieux fil, j'espère que cette information pourrait aider quelqu'un qui est à la recherche d'une solution à ce que le sujet du fil exactement dit. Je conseille fortement l'utilisation de la solution de mattgwwalker dans github, ce qui nécessite olefileio_pl module à installer à l'extérieur.

4
répondu fatih_dur 2015-05-14 02:52:56

j'ai réussi à extraire les champs pertinents des fichiers MS Outlook (.msg) à l'aide de msg-extracteur utilisation par Matt Walker: https://github.com/mattgwwalker/msg-extractor

Voici mes étapes:

pip install https://github.com/mattgwwalker/msg-extractor/zipball/master

Remarque, il peut exiger l'installation de modules supplémentaires, dans mon cas, il est nécessaire d'installer imapclient:

pip install imapclient

la page de Matt explique comment utiliser MsgExtractor depuis la ligne de commande. Je l'ai utilisé dans jupyter carnet de notes:

import ExtractMsg
import glob

f = glob.glob(r'C:\filedir\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))

il y a beaucoup d'autres goodies dans MsgExtractor utility, à explorer, mais c'est bon pour commencer. Une note, j'ai dû commenter les lignes 3 à 8 dans le fichier C:\Anaconda3\Scripts\ExtractMsg.py:

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

message D'erreur:

line 3
    ExtractMsg:
              ^
SyntaxError: invalid syntax

après avoir bloqué ces lignes, le message d'erreur a disparu et le code a très bien fonctionné.

3
répondu Vladimir Lukin 2018-04-05 21:10:25

Voir les liens suivants:

[MS-OXMSG]: Outlook Item (.msg) format de fichier,

Lecture .les fichiers msg,

éditer un fichier de Message D'Outlook enregistré *.msg

Vous pouvez aussi utiliser rédemption et son RDOSession.GetMessageFromMsgFile méthode:

  set Session = CreateObject("Redemption.RDOSession")
  set Msg = Session.GetMessageFromMsgFile("c:\temp\test.msg")
  MsgBox Msg.Subject
1
répondu Dmitry Streblechenko 2017-10-04 21:36:11

j'ai essayé le module d'e-mail python et parfois cela ne passe pas avec succès le fichier msg.

donc, dans ce cas, si vous êtes seulement après text ou html, le code suivant a fonctionné pour moi.

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
répondu paolov 2017-10-04 08:00:48

j'ai pu l'analyser de la même manière que Vladimir mentionné ci-dessus. Cependant j'avais besoin de faire un petit changement en ajoutant une boucle pour. Le glob.glob(R)c:\test_email*.msg') retourne une liste alors que le Message(f) attend un fichier ou une DOD.

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
répondu Sazzad 2018-05-23 17:19:18