【问题标题】:Monitor for category/folder change in Outlook with Python使用 Python 监控 Outlook 中的类别/文件夹更改
【发布时间】:2018-01-19 01:47:37
【问题描述】:

我希望构建一个 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()

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

【问题讨论】:

    标签: python outlook activex win32com dispatch


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,埃里克,感谢您回来。几个问题: 1. 如何挂钩“PropertyChange”/“ItemAdd”事件?我认为这不像在上面的 handler_Class 中添加 def OnPropertyChange(self, name) 那样简单?我需要创建一个新的“DispatchWithEvents”吗? 2. 我可以追踪谁更改了财产/移动了物品吗?
    • 对不起,我不懂 Python。我只能说 PropertyChange 是 MailItem 类的一个事件,而 ItemAdd 是 Items 集合类的一个属性(从 Folder 对象的 Items 属性中检索)。 “谁”始终是当前用户,您可以通过 NameSpace.CurrentUser 属性获取。
    • 嗨,那么您将如何在 VBA 中挂钩这些事件?
    • 在模块或类的顶部声明要订阅事件的对象。例如。 Dim WithEvents myMailItem 作为 MailItem。 IDE 中 myMailItem 的下拉列表将显示所有可用事件,选择一个将创建一个事件存根。见:msdn.microsoft.com/en-us/library/ff866235.aspx
    • 嘿 @EricLegault 我当前的程序将传入的电子邮件分类到 Outlook 中的特定类别。该程序作为 cron 或守护程序连续运行,并对传入的电子邮件进行分类。现在,在我的分类完成后,人们会浏览分类的电子邮件,如果程序错误地分类,他们会修改类别。我必须监视和捕获手动完成的类别中的这种变化。在我当前的设置中,我无法集成如何跟踪手动完成的更改。请提供一种机制来捕捉这种变化。
    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多