通过python中的多线程通过COM进行Outlook

时间:2018-12-17 20:41:30

标签: python multithreading outlook com

我需要在Outlook上使用几个线程(关于为什么的冗长解释...)。例如,第一个线程将擦除一个文件夹中的邮件,另一个线程将在其他位置进行一些过滤。

我知道我需要通过COM以及更特别是通过win32client和pythoncom来利用Outlook。但是我似乎无法正确编组线程。我的基本设置是这样:

import win32com.client
import pythoncom

olApp = win32com.client.Dispatch('Outlook.Application')

myStream = pythoncom.CreateStreamOnHGlobal()

marshalledOlApp = pythoncom.CoMarshalInterface(
    myStream,
    pythoncom.IID_IDispatch,
    olApp,
    pythoncom.MSHCTX_INPROC,
    pythoncom.MSHLFLAGS_NORMAL
)

def cleanOutlook(marshalledOlApp):
  print 'How can I make outlook COM object be available here?'

  olApp = win32com.client.Dispatch(
        pythoncom.CoGetInterfaceAndReleaseStream(
            marshalledOlApp,
            pythoncom.IID_IDispatch))

threads = [threading.Thread(target=cleanOutlook, args=(marshalledOlApp,)) for _ in range(2)]

_ = [thread.start() for thread in threads]
_ = [thread.join() for thread in threads]

执行.CoMarshalInterface()时收到错误消息
ValueError: argument is not a COM object (got type=instance)

我查看了API并用谷歌搜索了我的问题,但似乎找不到解决方案。有谁知道如何在Outlook中利用许多线程?

0 个答案:

没有答案