Как исправить ошибку OLE при разборе писем - PullRequest
0 голосов
/ 11 июля 2019

Я сталкиваюсь с ошибкой OLE, когда мой внешний вид анализируется через python с помощью модуля win32com.

Traceback (most recent call last):
    for i, message in enumerate(messages):
pywintypes.com_error: (-520879857, 'OLE error 0xe0f4010f', None, None)

Я полагаю, это связано с сетевым подключением, которое может перезапускаться через определенное время.

inbox= win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI").Folders["Inbox"]
messages = inbox.Items
for i, message in enumerate(messages):

1 Ответ

0 голосов
/ 11 июля 2019

Перебор всех элементов в папке не очень хорошая идея:

 for i, message in enumerate(messages):

Вместо этого я бы предложил получить подмножество предметов и обработать их в партии. Например, вы можете использовать методы Find / FindNext или Restrict, чтобы получить подмножество элементов (в соответствии с вашими условиями) и обработать их. Подробнее об этих методах читайте в следующих статьях:

Как: использовать методы Find и FindNext для извлечения почтовых элементов Outlook из папки (C #, VB.NET)

Как: использовать метод Restrict для получения почтовых элементов Outlook из папки

Также вы можете рассмотреть возможность использования метода AdvancedSearch класса Application. Основные преимущества использования метода AdvancedSearch в Outlook:

  • Поиск выполняется в другой теме. Вам не нужно запускать другой поток вручную, поскольку метод AdvancedSearch автоматически запускает его в фоновом режиме.

  • Возможность поиска любых типов элементов: почты, встреч, календаря, заметок и т. Д. В любом месте, т. Е. За пределами определенной папки. Методы Restrict и Find / FindNext могут применяться к определенной коллекции Items (см. Свойство Items класса Folder в Outlook).

  • Полная поддержка запросов DASL (пользовательские свойства также могут использоваться для поиска). Подробнее об этом можно прочитать в статье Filtering в MSDN. Для повышения эффективности поиска можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство IsInstantSearchEnabled класса Store).

  • Вы можете остановить процесс поиска в любой момент, используя метод Stop класса Search.

...