2017-08-29 130 views
0

目前,我用如何使用exchangelib從所有文件夾中獲取最新電子郵件?

latest_mails = account.inbox.filter(datetime_received__gt=emails_since) 

但似乎錯過接收到的電子郵件這是在子文件夾。

打印所有文件夾與

for f in account.root.get_folders(): 
    print(f) 

給出類似

Calendar (Kalender) 
Contacts (Kontakte) 
Contacts (Vorgeschlagene Kontakte) 
Folder (AllItems) 
Folder (Calendar Logging) 
Folder (Common Views) 
Folder (Conversation Action Settings) 
Folder (Deferred Action) 
Folder (Deletions) 
Folder (Erinnerungen) 
Folder (ExchangeSyncData) 
Folder (Finder) 
Folder (Infected Items) 
Folder (Journal) 
Folder (Location) 
Folder (MailboxAssociations) 
Folder (Notizen) 
Folder (Recipient Cache) 
Folder (Recoverable Items) 
Folder (Schedule) 
Folder (Shortcuts) 
Folder (Spooler Queue) 
Folder (System) 
Folder (Versions) 
Folder (Views) 
Folder (WorkingSet) 
Messages (Postausgang) 
Messages (Posteingang) 
Messages (foo) 
Messages (bar) 
Messages (something is) 
Messages (here) 
Messages (Gelöschte Elemente) 
Messages (Gesendete Elemente) 
Messages (Junk-E-Mail) 
Messages (Meine Kontakte) 
Messages (MyContactsExtended) 
Messages (Nachverfolgte E-Mail-Verarbeitung) 
Messages (Zugang) 
Tasks (Aufgaben) 
Tasks (Aufgabensuche) 

所以我只是想看看「信息」的文件夾,但是所有的人。這是可能的(不使用account.root.get_folders())和循環結果(大約需要5分鐘)

+0

另請參閱:https://github.com/ecederstrand/exchangelib/issues/30#issuecomment-257429078 - 但我不知道「Messages」來自哪裏。 –

+0

'from exchangelib.folders import Messages'似乎是 –

回答

0

你是正確的.filter()只適用於你打電話給它的文件夾,而不是子文件夾。我很確定EWS一次只支持搜索一個文件夾。

你應該能夠做這樣的事情,以加快東西一點點:

from exchangelib.folders import Messages 

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

Folder類型的文件夾也可以包含Message物品,所以根據你的需要,你可能還需要訪問這些。

f.supported_item_models會告訴您給定文件夾可以包含哪些項目類型。

+0

實際上,EWS *不允許在一個請求中搜索多個文件夾。 exchangelib只是不支持它通過正常的過濾方法:https://github.com/ecederstrand/exchangelib/issues/224 –

相關問題