簡體   English   中英

Exchangelib 掃描所有文件夾 - 效率

[英]Exchangelib Scan All Folders - Efficiency

我正在使用 exchangelib 連接到我的交換郵箱。 目前代碼正在掃描所有文件夾,因為目標 email 消息可以在我任務的任何文件夾中。

有沒有更有效的方法來循環/掃描這里的文件夾? (尋找超過目標開始日期的電子郵件)

 folder = account.root
        all_folders = folder.glob('**/*')
        for folder in all_folders:
            if folder.folder_class == 'IPF.Note': #Messages can only exist in 'IPF.Note' folder classes
                for email in folder.filter(datetime_received__gt=ews_bfr): #For all emails that are newer than the target date

編輯:感謝您的幫助,埃里克。 這奏效了,使運行時間顯着減少:

        target_folders = FolderCollection(account=account, folders=(f for f in account.root.walk() if f.name in ['xxxxxx']))\
            .filter(datetime_received__gt=ews_bfr)
        for email in target_folders:

普通的.filter()僅適用於您調用它的文件夾。 EWS 不支持在所有文件夾中搜索項目,而僅支持在FindItems服務調用中明確提及的文件夾。

在 exchangelib 中,過濾一個 go 中的多個文件夾的方法是使用FolderCollection

from exchangelib import FolderCollection
FolderCollection(account=account, folders=[...]).filter(some_field='foo')

folders參數可以是任何可迭代的文件夾,例如[account.inbox, account.sent] , account.root.walk()(f for f in account.root.walk() if f.CONTAINER_CLASS == 'IPF.Note')

.glob().walk().children和其他子文件夾訪問方法也支持對它們調用.filter()

account.root.glob('**/*').filter(datetime_received__gt=ews_bfr)
account.root.walk().filter(datetime_received__gt=ews_bfr)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM