@Andryxans

Как в Exchangelib получить все элементы папки Входящие и всех ее подпапок?

Как без перебора всех папок выполнить поиск писем в папке входящие и всех подпапок? Вариант ниже с чтением отдельно всех папок по очереди не подходит.

my_folder = account.inbox / 'myfolder'
for i in my_folder.all():
    print(i.subject)


Вариант ниже с перебором папок не работает:
from exchangelib.folders import Messages

for f in account.folders[Message]:
    for i in f.filter(datetime_received__gt=emails_since):
        print(i)


При таком подходе пишет:
File "test.py", line 27, in getitem
for f in self.account.folders[Messages]:
AttributeError: 'Account' object has no attribute 'folders'


Думаю дело в древности данного решения.

UPDATE:

Выкрутился с помощью вот такого поиска:
def getitem(self,c):  # Вернет количество последних писем равное c из подпапок входящие
        self.my_folder = self.account.root / 'Корневой уровень хранилища'
        for f in self.my_folder.walk().filter(subject__contains='CallKeeper').order_by('-datetime_received')[:c]:
            # for i in f.filter(subject__contains='a'):
            print(f.subject, f.datetime_received)


Но так как внутри функция walk() организована так же перебором, то результат поиска выдает первый попавшийся, т.е.: если он находит нужное количество сообщений в папке входящие, он отправляет результат, не просматривая все остальные папки, а мне нужно что бы поиск был самого последнего сообщения с темой содержащей "CallKeeper" в папке входящие и всех ее вложениях. Пробовал через:
FolderCollection(account=self.account, folders=[self.account.inbox, self.account.inbox / 'CallKeeper', self.account.inbox / 'folder2>']).filter(subject__contains='CallKeeper').order_by('-datetime_received')[:c]:

результат такой же.
Может есть идеи у кого?
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Посмотреть вручную, что содержится в объекте, который должен перебираться в цикле, есть ли у него вообще э
dir(account)
print(account)
а также
print(account.__doc__)
print(account.folder.__doc__)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы