Outlook через COM через многопоточность в Python - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно, чтобы пара потоков работала в Outlook (очень длинное объяснение, почему ...).Например, 1-й поток будет удалять сообщения в одной папке, другой поток будет выполнять фильтрацию в другом месте.

Я понимаю, что мне нужно подключиться к Outlook через COM и, в частности, через win32client и pythoncom.Тем не менее, я не могу показаться, что маршал темы правильно.У меня есть базовая настройка:

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?

...