Фильтруйте сообщения из ВСЕХ папок в аккаунте с exchangelib
Я пытаюсь использовать 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')
Кажется, я делаю глупую ошибку здесь, но не могу обойти ее.
Может кто-нибудь, пожалуйста, дайте мне знать наиболее оптимальный способ достижения этого варианта использования?
Редактировать:
Я вижу ошибку
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 ответ
Проблема в том, что ваша папка FolderCollection содержит несколько общих папок. EWS не позволяет запрашивать более одной общей папки одновременно. Вам придется либо исключить общие папки из поиска, если вам не нужно искать их, либо искать общие папки по одной.