Фильтруйте сообщения из ВСЕХ папок в аккаунте с exchangelib - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь использовать exchangelib для извлечения сообщений из учетной записи, которая совпадает с \ начинается с определенной темы. Это должно включать в себя сообщения из всех папок, а не только из папки «Входящие». Я прошел пару похожих вопросов здесь

Как я могу получить последние электронные письма из всех папок с помощью exchangelib?

, что привело меня к использованию FolderCollection. Однако мне не ясно, как создать и передать список всех папок параметру «папки».

В настоящее время я попробовал следующее:

conf = Configuration(server=ex_srv, credentials=cred)
acct = Account(primary_smtp_address=email, 
                            config=conf, 
                            autodiscover=False, 
                            credentials=cred, 
                            access_type=IMPERSONATION
                        )

from exchangelib.folders import Messages, FolderCollection
all_folder_list = acct.folders[Messages]
all_folder_collection = FolderCollection(account=acct, folders=all_folder_list)

all_folder_collection.filter(subject__startswith='test')

Кажется, я делаю глупую ошибку, но не могу ее найти.

Не мог бы кто-нибудь сообщить мне наиболее оптимальный способ достижения этого варианта использования?

Edit:

Я вижу ошибку

Traceback (most recent call last):

  File "queryset.py", line 298, in __iter__
    for val in self._format_items(items=self._query(), return_format=self.return_format):
  File "queryset.py", line 375, in _item_yielder
    for i in iterable:
  File "account.py", line 580, in fetch
    shape=ID_ONLY,
  File "account.py", line 302, in _consume_item_service
    is_empty, items = peek(items)
  File "util.py", line 118, in peek
    first = next(iterable)
  File "folders.py", line 250, in find_items
    for i in items:
  File "services.py", line 432, in _paged_call
    parsed_pages = [self._get_page(message) for message in response]
  File "services.py", line 432, in <listcomp>
    parsed_pages = [self._get_page(message) for message in response]
  File "services.py", line 481, in _get_page
    rootfolder = self._get_element_container(message=message, name='{%s}RootFolder' % MNS)
  File "services.py", line 345, in _get_element_container
    raise self._get_exception(code=response_code, text=msg_text, msg_xml=msg_xml)
exchangelib.errors.ErrorInvalidOperation: Shared folder search cannot be performed on multiple folders.

1 Ответ

0 голосов
/ 22 января 2019

Проблема в том, что ваша папка FolderCollection содержит несколько общих папок. EWS не позволяет запрашивать более одной общей папки одновременно. Вам придется либо исключить общие папки из поиска, если вам не нужно искать их, либо искать общие папки по одной за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...