Подтвердить что ты не робот

Разбор Outlook.msg файлов с помощью python

Посмотрел вокруг и не смог найти удовлетворительного ответа. Кто-нибудь знает, как разбирать .msg файлы из Outlook с помощью Python?

Я пробовал использовать mimetools и email.parser без везения. Помощь будет принята с благодарностью!

4b9b3361

Ответ 1

Это работает для меня:

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

Пожалуйста, обратитесь к следующему сообщению о методах доступа к адресам электронной почты, а не только к именам (например, "Джон Доу") из свойств To, CC и BCC - введите описание ссылки здесь

Ответ 2

Мне удалось извлечь соответствующие поля из файлов MS Outlook (.msg) с помощью утилиты msg-extractor от Мэтта Уокера.

Prerequesites

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 есть много других полезностей, которые нужно изучить, но с этого хорошо начать.

Заметка

Мне пришлось закомментировать строки с 3 по 8 в файле C:\Anaconda3\Scripts\ExtractMsg.py:

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

Сообщение об ошибке было:

line 3
    ExtractMsg:
              ^
SyntaxError: invalid syntax

После блокировки этих строк сообщение об ошибке исчезло, и код работал просто отлично.

Ответ 3

Даже если это старый поток, я надеюсь, что эта информация может помочь кому-то, кто ищет решение того, что говорит тема темы точно. Я настоятельно рекомендую использовать решение mattgwwalker в github, для которого требуется модуль OleFileIO_PL для установки снаружи.

Ответ 5

Я пробовал модуль электронной почты python и иногда не разбирал файл msg.

Итак, в этом случае, если вы только после текста или 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)

Ответ 6

Я смог разобрать его так же, как Владимир упоминал выше. Однако мне нужно было внести небольшие изменения, добавив цикл for. Glob.glob(r'c:\test_email *.msg ') возвращает список, тогда как Message (f) ожидает файл или str.

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

Ответ 7

Я попытался установить утилиту mattgwwalker, используя метод, описанный выше, но я получил следующую ошибку:

C:\Users\jo>pip install https://github.com/mattgwwalker/msg-extractor/zipball/master
        Collecting https://github.com/mattgwwalker/msg-extractor/zipball/master
      Downloading https://github.com/mattgwwalker/msg-extractor/zipball/master
         \ 6.3MB 51.1MB/s
        Complete output from command python setup.py egg_info:
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "C:\Users\jo\AppData\Local\Temp\pip-req-build-xv_n28zg\setup.py", line 13, in <module>
            long_description = stream.read()
          File "c:\users\jo\scoop\apps\python\current\lib\encodings\cp1252.py", line 23, in decode
            return codecs.charmap_decode(input,self.errors,decoding_table)[0]
        UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 550: character maps to <undefined>

        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in C:\Users\jo\AppData\Local\Temp\pip-req-build-xv_n28zg\

Затем я запустил pip install extract-msg, и это сработало. После установки pip show extract-msg показывает следующее:

Name: extract-msg
Version: 0.21.0
Summary: Extracts emails and attachments saved in Microsoft Outlook .msg files
Home-page: https://github.com/mattgwwalker/msg-extractor
Author: Matthew Walker & The Elemental of Creation
Author-email: [email protected], [email protected]
License: GPL
Location: c:\users\jo\scoop\apps\python\current\lib\site-packages
Requires: tzlocal, olefile, imapclient
Required-by:

Код, размещенный выше Владимиром Лукиным, работал с некоторыми модификациями:

import extract_msg

msg = extract_msg.Message(r'C:\filedir\MS_Outlook_file.msg') ## Replace with yours
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))

Возможно, мне пришлось внести все эти изменения из-за обновлений утилиты mattgwwalker?