c# outlook mapi

c# - MIME MAPI IConverterSession COMException en Activator.CreateInstance



outlook (1)

He estado tratando de usar IConverterSession para convertir de EML a MSG (MIME a MAPI), pero sigo tropezando con los errores COM. Utilizo una clase C # MAPIMethods para envolver IConverterSession (como la que se encuentra aquí: Guardar correo en formato MIME (* .eml) en el complemento de Outlook ).

Primero, tuve los problemas de clsid desconocido, resuelto con esta publicación ( https://blogs.msdn.microsoft.com/stephen_griffin/2014/04/21/outlook-2013-click-to-run-and-com-interfaces / ).

Ahora que las claves de registro correctas han sido editadas, me encuentro con un nuevo problema: primero, The operating system is not presently configured to run this application un mensaje de error The operating system is not presently configured to run this application , y obtengo una COMException: Retrieving the COM class factory for component with CLSID {4E3A7680-B77A-11D0-9DA5-00C04FD65685} failed due to the following error: 8007013d The system cannot find message text for message number 0x in the message file for . (Exception from HRESULT: 0x8007013D). Retrieving the COM class factory for component with CLSID {4E3A7680-B77A-11D0-9DA5-00C04FD65685} failed due to the following error: 8007013d The system cannot find message text for message number 0x in the message file for . (Exception from HRESULT: 0x8007013D).

Mi código es:

Type converter = Type.GetTypeFromCLSID(MAPIMethods.CLSID_IConverterSession, true); object obj = Activator.CreateInstance(converter); MAPIMethods.IConverterSession session = (MAPIMethods.IConverterSession)obj;

El error se plantea en "object obj = Activator.CreateInstance (converter);"

Una COMException normalmente significa que "tipo es un objeto COM pero el identificador de clase utilizado para obtener el tipo no es válido o la clase identificada no está registrada". Por lo tanto, Type converter = Type.GetTypeFromCLSID(MAPIMethods.CLSID_IConverterSession, true); no devuelve el tipo correcto, o aún falta una clave de registro en alguna parte.

Estoy usando Office 15 (2013) C2R 32 bits en Win 64bits. La aplicación está configurada en una configuración de compilación x86.

¿Hay algo que me falta en algún lado? ¿Alguien puede ayudar?


"El sistema operativo no está configurado actualmente para ejecutar esta aplicación": parece que su aplicación está compilada como x64 en una máquina con una versión de Outlook de 32 bits.

¿Has intentado usar Redención? Envuelve IConverterSession para lenguajes .Net. Algo como lo siguiente debería hacer el trabajo.

using Redemption; ... Redemmption.RDOSession session = new Redemmption.RDOSession(); Redemmption.RDOMail msg = session.CreateMessageFromMsgFile(@"c:/temp/test.msg"); msg.Import(@"c:/temp/test.eml", Redemption.rdoSaveAsType.olRFC822); msg.Save();

olRFC822 formato olRFC822 utilizará IConverterSession si está disponible o el convertidor de redención interno si IConverterSesison no está disponible (por ejemplo, en la versión de Exchange de MAPI o en las últimas versiones de Outlook 2016 C2R donde IConverterSession no puede utilizarse). Utilice olRFC822_Redemption o olRFC822_Outlook si siempre desea forzar el convertidor Redemption o Outlook (IConverterSession).