使用 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。
我希望构建一个 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。