使用 Python 监视 Outlook 中的 category/folder 变化

Monitor for category/folder change in Outlook with Python

我希望构建一个 Python 工具来监视 Outlook 中的类别和文件夹更改。

到目前为止,我设法连接到 OnNewMailEx 事件并使用以下代码监控所有传入的电子邮件:

import win32com.client
import pythoncom
import re

def getPath(folder, path=[]):
    if folder.parent.parent.parent:
        path.append(folder.name)
        getPath(folder.parent, path)
    return "\".join(reversed(path))

class Handler_Class(object):
    def OnNewMailEx(self, receivedItemsIDs):
        for ID in receivedItemsIDs.split(","):
            mailItem = outlook.Session.GetItemFromID(ID)
            if re.search("(TS)|(ST)", mailItem.Parent.FolderPath) != None:
                print "Subj: " + mailItem.Subject
                print "Time: " + str(mailItem.ReceivedTime)
                print "Parent: " + str(mailItem.Parent.FolderPath)
                # print "Body: " + mailItem.Body.encode( 'ascii', 'ignore' )
                print "========"

outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class)
pythoncom.PumpMessages()

现在我正在尝试扩展它以连接到监视类别更改的事件中。 MSDN 关于这个主题:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.olkcategory.aspx

然而,当我尝试下面的代码时(使用 http://svn.cy55.de/changeset/1896?format=diff&new=1896 中的正确名称),没有任何反应:

class Handler_Class(object):
    def OnChange(self):
        print("Hook successful!")    

category = win32com.client.DispatchWithEvents("Outlook.OlkCategoryStrip", Handler_Class)
pythoncom.PumpMessages()

此外,我找不到任何有关监视电子邮件是否移至其他文件夹的事件的文档。有什么想法吗??

您引用的 OlkCategory 接口绑定到 Outlook 表单区域中使用的类别控件;它本身是没有用的。要监视项目的 属性 更改(包括类别),您需要挂接到 MailItem.PropertyChange 事件:https://msdn.microsoft.com/en-us/library/ff866739.aspx.

要监视项目何时添加到文件夹,您需要捕获任何给定文件夹的 Items.ItemAdd 事件:https://msdn.microsoft.com/en-us/library/ff869609.aspx