win32com.client.DispatchWithEvents用于同一线程中的多个对象

时间:2016-12-09 09:41:54

标签: python outlook win32com pythoncom

我正在尝试使用以下代码同时在2个单独的收件箱中监听OnItemAdd事件:

    class Handler_Class():
        def OnItemAdd(self, mail):
            #Check if the item is of the MailItem type
            if mail.Class==43:
                print(mail.Subject, " - ", mail.Parent.FolderPath)
    inboxes = ["inbox1", "inbox2"]
    for inbox in inboxes:
        items = win32com.client.DispatchEx("Outlook.Application").GetNamespace("MAPI").Folders[inbox].Folders["Inbox"].Items
        win32com.client.DispatchWithEvents(items, Handler_Class)
    print(datetime.now(),"Ready to pump")
    pythoncom.PumpMessages()

pythoncom.PumpMessages()似乎不起作用。如果我重构代码只听一个收件箱的项目,它确实有用。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

这是不可能的,我通过在一个线程中初始化所有DispatchWithEvents对象并使用pythoncom.PumpMessages()来限制它来解决这个问题。

通过这种方式,您可以同时收听多个收件箱中的ItemAdd等事件。