2017-02-24 164 views
0

我想閱讀我的Outlook電子郵件並只閱讀未閱讀的電子郵件。我現在有的代碼是:如何通過使用Python以相反順序瀏覽Outlook電子郵件

import win32com.client 

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
inbox = outlook.GetDefaultFolder(6) 
messages = inbox.Items 
message = messages.GetFirst() 
while message: 
    if message.Unread == True: 
     print (message.body) 
     message = messages.GetNext() 

但是這從第一封電子郵件到最後一封電子郵件。我想按照相反的順序進行操作,因爲未讀的電子郵件將位於頂部。有沒有辦法做到這一點?

+0

那麼不會只是改變message = messages.GetFirst()?到messages.GetLast()如果存在或尋找一個函數來做類似的事情 –

+2

是的,有一個'GetLast'和一個'GetPrevious'方法。如果讓它們逆序排列,應該是不言而喻的...... – kindall

+0

'GetLast()'和'GetNext()'不能一起工作@OmidCompSCI,我找不到'GetPrevious()'。謝謝@ kindall –

回答

1

我同意cole for循環是很好的通過所有的人。如果從最近收到的電子郵件開始很重要(例如,針對特定訂單,或限制您經過的電子郵件數量),則可以使用Sort函數按Received Time屬性對它們進行排序。

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
inbox = outlook.GetDefaultFolder(6) 
messages = inbox.Items 
#the Sort function will sort your messages by their ReceivedTime property, from the most recently received to the oldest. 
#If you use False instead of True, it will sort in the opposite direction: ascending order, from the oldest to the most recent. 
messages.Sort("[ReceivedTime]", True) 

for message in messages: 
    if message.Unread == True: 
     print (message.body) 
0

爲什麼不使用for循環?從頭到尾瀏覽你的消息,就像你試圖去做的一樣。

for message in messages: 
    if message.Unread == True: 
     print (message.body) 
相關問題