[英]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.