Recupere constantemente direcciones de correo electrónico "De" en todas las versiones de Outlook

StackOverflow https://stackoverflow.com/questions/112227

  •  02-07-2019
  •  | 
  •  

Pregunta

Estoy trabajando en una aplicación de escritorio C# independiente que envía documentos y luego los importa desde Outlook cuando se devuelven.La aplicación recoge los correos electrónicos de una carpeta específica, los procesa y luego guarda el nombre del remitente y otras cosas en una base de datos.

Esto funciona bien para Outlook 2003 y 2007, que tienen la propiedad SenderEmailAddress.Sin embargo, Outlook 2000 y XP no tienen esta propiedad y no devolverán constantemente nombre@dominio.com.Estoy brindando soporte para estas versiones.

Descubrí que una biblioteca llamada Outlook Redemption resolverá esto, pero estoy desarrollando en .net y realmente quiero evitar escribir en los registros de clientes.También encontré MAPI33, un contenedor .Net para MAPI, pero en los foros no está claro si todavía es compatible.

Agradecería cualquier sugerencia sobre una alternativa .Net a la DLL de Redemption o un enfoque para poder recuperar consistentemente una dirección de correo electrónico en todas las versiones de Outlook.

Muchas gracias

AbsFabs

Epílogo:Terminé usando una solución de este artículo. http://support.microsoft.com/kb/324530.Consistía en crear una respuesta y luego extraer la respuesta a la dirección del elemento de correo creado.Funcionó bien para correos electrónicos enviados a través de Internet y actualmente se encuentra en pruebas de Exchange Server.

También encontré esto en mis viajes. http://anoriginalidea.wordpress.com/2008/01/11/getting-the-smtp-email-address-of-an-exchange-sender-of-a-mailitem-from-outlook-in-vbnet-vsto/ parece ser un toque involucrado.Esto podría constituir mi plan B si mi implementación actual no sobrevive a las pruebas.

Gracias por tus comentarios

AbsFabs

Al final terminé usando Redemption.Excelente herramienta para el trabajo.Mi problema fue tener que registrar el dll cuando se instaló mi aplicación.Como mi aplicación está escrita en dotnet, no es necesario registrar nada.Pude solucionar el problema del registro de dll utilizando COM sin registro.

Muchas gracias por tu inspiración.

¿Fue útil?

Solución

Estoy usando la solución Outlook Redemption en un código de producción C#.Funciona maravillosamente.Con él, puede obtener el SenderID de un mensaje de correo (IRDOMail) y, desde allí, puede utilizar el método GetAddressEntryFromID() del objeto IRDOSession.

Otros consejos

Si bien teníamos un problema similar en el trabajo, decidimos seguir la ruta netMAPI, lo que causó algunos problemas.

El principal problema es que MAPI administraba su propia memoria, al igual que .NET, lo que significa que ocasionalmente (tenemos alrededor de 300 personas usando nuestro software interno) causaba que nuestra aplicación fallara, generando el cuadro de diálogo de "informar error" de Windows en lugar de nuestro propio diálogo de seguimiento de errores.Esto fue causado porque los dos sobrescribieron los montones de memoria del otro.

Como tenemos que usar un servidor Exchange, investigamos un poco y descubrimos que si escribías el código MAPI en una aplicación VB6, tendría su propio espacio de memoria y, por lo tanto, no sobrescribiría el montón .NET.

Es una forma bastante larga de hacer las cosas, pero hasta ahora no hemos tenido problemas y nuestro personal envía cientos (si no miles) de correos electrónicos todos los días.

La buena noticia es que está en el camino correcto al localizar las interfaces adecuadas.La mala noticia es que 2000 y XP tienen muy poco soporte en .NET porque fueron anteriores a .NET y sólo con 2003 se hizo un esfuerzo real para que COM funcionara en .NET.

Su solución para estas versiones 2000 y XP consistirá en que usted localice las interfaces COM correctas y las ajuste usted mismo.He tenido que hacer esto muchas veces para esta versión de Outlook y nunca queda bien.Buena suerte.

El canje se puede utilizar sin instalarlo en el registro; puede utilizar Cargador de redención en C#, VB.Net, Delphi y C++.

//tell the app where the 32 and 64 bit dlls are located
//by default, they are assumed to be in the same folder as the current assembly and be named 
//Redemption.dll and Redemption64.dll.  
//In that case, you do not need to set the two properties below
RedemptionLoader.DllLocation64Bit = @"c:\SourceCode\Redemption\redemption64.dll";
RedemptionLoader.DllLocation32Bit = @"c:\SourceCode\Redemption\redemption.dll";
//Create a Redemption object and use it
RDOSession session =  RedemptionLoader.new_RDOSession();
session.Logon(Missing.Value, Missing.Value,  Missing.Value, Missing.Value, Missing.Value,  Missing.Value);

En realidad, nunca los he usado, pero puedes probar Outlook. Objetos de datos de colaboración (CDO).Solían ser un complemento que se podía instalar con Outlook, pero ahora se proporcionan por separado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top