使用Python监视Outlook中的类别/文件夹更改

时间:2016-07-11 08:44:14

标签: python outlook activex win32com dispatch

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

到目前为止,我设法挂钩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()

此外,我找不到任何监控电子邮件是否已移至其他文件夹的事件的文档。任何想法??

1 个答案:

答案 0 :(得分:0)

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

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