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!
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
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.
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é.
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
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)
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