簡體   English   中英

如何使用 Python 監視 Outlook 中的不同文件夾(非默認文件夾)是否有新郵件(然后觸發事件)

[英]How do I monitor a different folder (than the default) within Outlook for new mail (and then fire an event) with Python

我有以下代碼

import win32com.client
import pythoncom
import time

    class Handler_Class(object):
    
        def OnNewMailEx(self, receivedItemsIDs):
            for ID in receivedItemsIDs.split(","):
                mailItem = outlook.GetNamespace("MAPI").GetItemFromID(ID)
                print(mailItem.Subject)
                
    outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class)        
   
    print("[" + time.strftime("%H:%M:%S %d/%m/%Y") + "] " + " Running...")
    pythoncom.PumpMessages()

上面的 python 代碼監視我的默認 Outlook 收件箱(當 Outlook 打開時)並在收到新郵件時觸發事件。此代碼適用於默認發件箱收件箱,但我更願意監視共享收件箱而不是默認一個。 共享的 email 地址是“blah@my.company.com”,然后我想查看“收件箱”文件夾。

我嘗試了下面的代碼來嘗試讓它監控 Outlook 中共享收件箱中的新郵件,但它似乎不起作用......

有人有什么想法嗎?

outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class).GetNamespace("MAPI").Folders['blah@my.company.com'].Folders['Inbox']

首先,您需要獲取共享郵箱的默認收件箱文件夾。 使用NameSpace.GetSharedDefaultFolder方法返回一個Folder object,代表指定用戶的指定默認文件夾。 此方法用於委托方案,其中一個用戶已將訪問權限委托給另一個用戶一個或多個默認文件夾(例如,他們的共享Inbox文件夾)。 以下 VBA 示例顯示了如何使用此方法:

Sub ResolveName() 
 Dim myNamespace As Outlook.NameSpace 
 Dim myRecipient As Outlook.Recipient 
 Dim CalendarFolder As Outlook.Folder 
 Set myNamespace = Application.GetNamespace("MAPI") 
 Set myRecipient = myNamespace.CreateRecipient("Eugene Astafiev")
 myRecipient.Resolve 
 If myRecipient.Resolved Then 
   Call ShowCalendar(myNamespace, myRecipient) 
 End If 
End Sub 
 
Sub ShowCalendar(myNamespace, myRecipient) 
 Dim CalendarFolder As Outlook.Folder 
 Set CalendarFolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderCalendar) 
 CalendarFolder.Display 
End Sub

獲得文件夾引用后,您可以在該文件夾的Items集合上設置ItemAdd事件。 Items.ItemAdd事件在將一項或多項添加到指定集合時觸發。 請注意,當大量項目一次添加到文件夾(超過 16 個)時,不會運行此事件。

我是這樣做的。 我知道既不優雅也不專業,但它有效:

outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class).GetNamespace("MAPI").Folders['blah@my.company.com'].Folders['Inbox'].Folders['the folder name you need to monitor']

如果您需要其中的項目,可以在末尾添加.Items但我想您已經知道了:)

暫無
暫無

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

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