J'ai regardé autour de moi et je n'ai pas trouvé de réponse satisfaisante. Est-ce que quelqu'un sait comment analyser les fichiers .msg à partir d'Outlook avec Python?
J'ai essayé d'utiliser mimetools et email.parser sans succès. De l'aide serait grandement appréciée!
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
J'ai réussi à extraire des champs pertinents de fichiers MS Outlook (.msg) à l'aide de msg-extractor
utilitity de Matt Walker.
pip install msg-extractor
Notez qu'il peut être nécessaire d'installer des modules supplémentaires, dans mon cas, il a fallu installer imapclient:
pip install imapclient
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))
L'utilitaire MsgExtractor contient de nombreux autres avantages, mais il est bon de commencer.
J'ai dû commenter les lignes 3 à 8 du fichier C:\Anaconda3\Scripts\ExtractMsg.py:
#"""
#ExtractMsg:
# Extracts emails and attachments saved in Microsoft Outlook's .msg files
#
#https://github.com/mattgwwalker/msg-extractor
#"""
Le message d'erreur était:
line 3
ExtractMsg:
^
SyntaxError: invalid syntax
Après avoir bloqué ces lignes, le message d'erreur a disparu et le code a fonctionné correctement.
Même s’il s’agit d’un vieux fil de discussion, j’espère que cette information pourra aider quelqu'un qui cherche une solution à ce que dit le sujet du fil exactement. Je conseille vivement d'utiliser la solution mattgwwalker dans github , qui nécessite le module OleFileIO_PL pour être installé à l'extérieur.
Voir les liens suivants:
[MS-OXMSG]: Format de fichier d'élément Outlook (.msg) ,
Lire des fichiers .msg ,
Modifier un fichier de message Outlook enregistré * .msg
Vous pouvez également utiliser Redemption et sa méthode RDOSession .GetMessageFromMsgFile:
set Session = CreateObject("Redemption.RDOSession")
set Msg = Session.GetMessageFromMsgFile("c:\temp\test.msg")
MsgBox Msg.Subject
J'ai essayé le module de messagerie python et parfois, cela ne permet pas d'analyser correctement 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 été capable de l'analyser de la même manière que Vladimir mentionné ci-dessus. Cependant, je devais apporter de petites modifications en ajoutant une boucle for. Glob.glob (r'c:\test_email * .msg ') renvoie une liste alors que le message (f) attend un fichier ou une chaîne.
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