Ошибка com_error, которая не позволяет мне открыть файл .msg

Мой код отлично работал с тестовым файлом msg, скажем, file_1.

Но это не сработало с целевым сообщением, которое я действительно собирался запустить, скажем, это file_2.

Еще более странно то, что после того, как он выбросил com_error, он не смог запустить file_1.

См. Подробности во вставленном ниже фрагменте.

Поменял полный путь, не работает. Я закрыл свой клиент Outlook, не работает. Я пытался использовать другой пакет, не смог установить msg_extract, с сообщением об ошибке другого пакета с именем OLE something. Нашел пакет под названием outlook_msg, который мог бы анализировать мой файл msg, но там не так много функций, и я не мог даже получить адрес получателя электронной почты, поэтому мне, вероятно, следует придерживаться win32com.

from win32com import client as win32

outlook = win32.Dispatch('Outlook.Application').GetNamespace('MAPI')
msg = outlook.OpenSharedItem('file_1.msg')
print(msg.SenderEmailAddress)

кто-нибудь@email.com

outlook = win32.Dispatch('Outlook.Application').GetNamespace('MAPI')
msg = outlook.OpenSharedItem('file_2.msg')
print(msg.SenderEmailAddress)

com_error: (-2147352567, 'Произошло исключение.', (4096, 'Microsoft Outlook', «Мы не можем открыть 'file_2.msg'. Возможно, файл уже открыт или у вас нет разрешения на его открытие. . \ n \ nЧтобы проверить свои разрешения, щелкните папку с файлом правой кнопкой мыши и выберите "Свойства". ", Нет, 0, -2147287038), Нет)

outlook = win32.Dispatch('Outlook.Application').GetNamespace('MAPI')
msg = outlook.OpenSharedItem('file_1.msg')
print(msg.SenderEmailAddress)

com_error: (-2147352567, 'Произошло исключение.', (4096, 'Microsoft Outlook', «Мы не можем открыть 'file_1.msg'. Возможно, файл уже открыт, или у вас нет разрешения на его открытие. . \ n \ nЧтобы проверить свои разрешения, щелкните папку с файлом правой кнопкой мыши и выберите "Свойства". ", Нет, 0, -2147287008), Нет)

Я ожидаю, что file_2 может выдать результат, подобный file_1 в моей первой попытке, но он показал ошибку, которая была вставлена ​​выше.

com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', "file_2.msg'. It's possible the file is already open, or you don't have permission to open it.\n\nTo check your permissions, right-click the file folder, then click Properties.", None, 0, -2147287008), None)

person Billie_H    schedule 05.09.2019    source источник


Ответы (2)


Кажется, файл .msg уже открыт. Попробуйте вставить код перед сценарием, чтобы, если открыт какой-либо файл .msg, он сначала убил его.

Сценарий:

import os

try:
    os.system('taskkill /f /im OUTLOOK.exe')
except:
    pass

... snippet ... your script goes here.
person Mans123    schedule 31.10.2020
comment
У меня это сработало так же, как outlook.Application.quit(). Есть ли способ закрыть .msg, не убивая сам Outlook? - person Dani LA; 03.11.2020

Ошибка STG_E_FILENOTFOUND, что имеет смысл - вы указываете только имя файла без пути. Вы должны указать полное имя файла.

person Dmitry Streblechenko    schedule 05.09.2019