Посмотрел вокруг и не смог найти удовлетворительного ответа. Кто-нибудь знает, как разбирать .msg файлы из Outlook с помощью Python?
Я пробовал использовать mimetools и email.parser без везения. Помощь будет принята с благодарностью!
Посмотрел вокруг и не смог найти удовлетворительного ответа. Кто-нибудь знает, как разбирать .msg файлы из Outlook с помощью Python?
Я пробовал использовать mimetools и email.parser без везения. Помощь будет принята с благодарностью!
Это работает для меня:
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 - введите описание ссылки здесь
Мне удалось извлечь соответствующие поля из файлов MS Outlook (.msg) с помощью утилиты msg-extractor
от Мэтта Уокера.
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
После блокировки этих строк сообщение об ошибке исчезло, и код работал просто отлично.
Даже если это старый поток, я надеюсь, что эта информация может помочь кому-то, кто ищет решение того, что говорит тема темы точно. Я настоятельно рекомендую использовать решение mattgwwalker в github, для которого требуется модуль OleFileIO_PL для установки снаружи.
См. следующие ссылки:
[MS-OXMSG]: Формат файла Outlook (.msg),
Читайте из .msg файлов,
Отредактируйте сохраненный файл сообщений Outlook *.msg
Вы также можете использовать Redemption и RDOSession. GetMessageFromMsgFile:
set Session = CreateObject("Redemption.RDOSession")
set Msg = Session.GetMessageFromMsgFile("c:\temp\test.msg")
MsgBox Msg.Subject
Я пробовал модуль электронной почты 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)
Я смог разобрать его так же, как Владимир упоминал выше. Однако мне нужно было внести небольшие изменения, добавив цикл 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
Я попытался установить утилиту 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?