Как использовать IConverterSession в pywin32 - PullRequest
0 голосов
/ 12 апреля 2019

pywin32 имеет интерфейс outlook под названием «IConverterSession», который имеет метод MIMEToMAPI, который импортирует файлы eml. Кто-нибудь может привести пример того, как получить доступ к интерфейсу внешнего вида "IConverterSession" и методу MINEToMAPI?

Я использую pywin32 build 224 с python3.6.5. Если это помогает, следующий код работает, чтобы открыть существующий файл msg, проанализировать его и распечатать отправленный тег. Это, конечно, порождает перспективы в процессе.

import win32com.client
import win32com.mapi.mapitags

file = r"C:\Path_to_File\test.msg"

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
msg = outlook.OpenSharedItem(file)

print (msg.SentOn)

Я ссылаюсь на комментарии сборки , в каком состоянии:

Начиная со сборки 218:

  • win32com.mapi Добавлен внешний вид интерфейса IConverterSession с методами MIMEToMAPI, MAPIToMIMEStm и SetAdrBook.

Кажется, что это не было бы слишком сложно, если бы только один мог найти способ доступа к методу "MIMEToMAPI".

В конце концов, я хотел бы использовать эту функцию для чтения файлов eml и сохранения их в виде файлов msg. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Вы должны использовать Extended MAPI:

from win32com.mapi import mapi
from win32com.mapi import mapitags
import pythoncom
from win32com import storagecon

mapi.MAPIInitialize((mapi.MAPI_INIT_VERSION, mapi.MAPI_MULTITHREAD_NOTIFICATIONS))

inf = mapi.OpenStreamOnFile('test.eml')
stg = pythoncom.StgCreateDocfile('test.msg',
    storagecon.STGM_CREATE | storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE)
msg = mapi.OpenIMsgOnIStg(0, None, stg, None, 0, mapi.MAPI_UNICODE)
cs = pythoncom.CoCreateInstance(
    mapi.CLSID_IConverterSession, None, pythoncom.CLSCTX_INPROC_SERVER,
    mapi.IID_IConverterSession)
cs.MIMEToMAPI(inf, msg, 0)
msg.SaveChanges(0)

mapi.MAPIUninitialize()
0 голосов
/ 12 апреля 2019

IConverterSession основан на IUnknown, а не IDispatch, плюс он работает с интерфейсами, которые, как мне кажется, Python не понимает, такими как IStream и IMessage .

Вы можете самостоятельно анализировать сообщения MIME в python , почему бы не сделать это и явно установить различные свойства сообщения Outlook?

Вы также можете использовать Redemption (я его автор) - он основан на IDispatch, поэтому его легко использовать из python. Вы можете создать экземпляр объекта RDOSession , вызвать RDOsession.CreateMessageFromMsgFile (возвращает RDOMail объект), вызвать RDOMail.Import( ..., 1024), за которым следует RDOMail.Save. Его импорт MIME использует IConverterSession, если Outlook установлен, или собственный анализатор MIME, если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...