Necesito la capacidad de monitorear y leer el correo electrónico de un buzón en particular en un servidor MS Exchange (interno de mi empresa). También necesito poder leer la dirección de correo electrónico del remitente, el asunto, el cuerpo del mensaje y descargar un archivo adjunto, si lo hubiera.
¿Cuál es la mejor manera de hacer esto usando C # (o VB.NET)?
c#
email
exchange-server
mapi
vajarov
fuente
fuente
Respuestas:
Es un desastre. MAPI o CDO a través de una DLL de interoperabilidad .NET no es oficialmente compatible con Microsoft; parecerá que funciona bien, pero hay problemas con pérdidas de memoria debido a sus diferentes modelos de memoria. Puede utilizar CDOEX, pero eso solo funciona en el servidor Exchange, no de forma remota; inútil. Podría interoperar con Outlook, pero ahora acaba de hacer una dependencia en Outlook; exageración. Por último, puede utilizar el soporte WebDAV de Exchange 2003 , pero WebDAV es complicado, .NET tiene un soporte integrado deficiente y (para colmo de males) Exchange 2007 prácticamente elimina por completo el soporte WebDAV.
¿Qué puede hacer un chico? Terminé usando el componente IMAP de AfterLogic para comunicarme con mi servidor Exchange 2003 a través de IMAP, y esto terminó funcionando muy bien. (Normalmente busco bibliotecas gratuitas o de código abierto, pero encontré que todas las de .NET faltan, especialmente cuando se trata de algunas de las peculiaridades de la implementación IMAP de 2003, y esta era lo suficientemente barata y funcionó en la primera probar. Sé que hay otros por ahí).
Sin embargo, si su organización está en Exchange 2007, está de suerte. Exchange 2007 viene con una interfaz de servicio web basada en SOAP que finalmente proporciona una forma unificada e independiente del idioma de interactuar con el servidor Exchange. Si puede hacer que 2007+ sea un requisito, este es definitivamente el camino a seguir. (Lamentablemente para mí, mi empresa tiene una política de "pero 2003 no está roto").
Si necesita unir Exchange 2003 y 2007, IMAP o POP3 es definitivamente el camino a seguir.
fuente
Um,
Puede que sea un poco tarde aquí, pero ¿no es este el punto de EWS?
https://msdn.microsoft.com/en-us/library/dd633710(EXCHG.80).aspx
Se necesitan aproximadamente 6 líneas de código para recibir el correo de un buzón:
fuente
service.autodiscoverurl
, tendré que ingresarservice.credentials
, estoy en lo cierto?La API actualmente preferida (Exchange 2013 y 2016) es EWS . Está basado puramente en HTTP y se puede acceder a él desde cualquier idioma, pero existen bibliotecas específicas de .Net y Java .
Puede utilizar EWSEditor para jugar con la API.
MAPI extendido . Esta es la API nativa que usa Outlook. Termina utilizando el
MSEMS
proveedor MAPI de Exchange, que puede comunicarse con Exchange mediante RPC (Exchange 2013 ya no lo admite) o RPC sobre HTTP (Exchange 2007 o posterior) o MAPI sobre HTTP (Exchange 2013 y posterior).Solo se puede acceder a la API en sí desde C ++ o Delphi no administrados . También puede usar Redemption (cualquier idioma): su familia de objetos RDO es un contenedor MAPI extendido. Para usar MAPI extendido, debe instalar Outlook o la versión independiente (Exchange) de MAPI (con soporte extendido, no admite archivos Unicode PST y MSG y no puede acceder a Exchange 2016). MAPI extendido se puede utilizar en un servicio.
Se puede jugar con la API usando OutlookSpy o MFCMAPI .
Modelo de objetos de Outlook : no es específico de Exchange, pero permite el acceso a todos los datos disponibles en Outlook en la máquina donde se ejecuta el código. No se puede utilizar en un servicio.
Exchange Active Sync . Microsoft ya no invierte recursos importantes en este protocolo.
Outlook solía instalar la biblioteca CDO 1.21 (incluye MAPI extendido), pero Microsoft la ha desaprobado y ya no recibe actualizaciones.
Solía haber un contenedor .Net MAPI de terceros llamado MAPI33, pero ya no se desarrolla ni se admite.
WebDAV: obsoleto.
Objetos de datos colaborativos para Exchange (CDOEX): en desuso.
Proveedor Exchange OLE DB (EXOLEDB): obsoleto.
fuente
Aquí hay un código antiguo que tenía para hacer WebDAV. Creo que fue escrito contra Exchange 2003, pero no recuerdo nada más. Siéntase libre de pedirlo prestado si es útil ...
Y modelo. Correo:
fuente
Usé código que se publicó en CodeProject.com . Si desea utilizar POP3, es una de las mejores soluciones que he encontrado.
fuente
Si su servidor Exchange está configurado para admitir POP o IMAP, esa es una salida fácil.
Otra opción es el acceso WebDAV. hay una biblioteca disponible para eso. Ésta podría ser tu mejor opción.
Creo que hay opciones que usan objetos COM para acceder a Exchange, pero no estoy seguro de lo fácil que es.
Todo depende de a qué exactamente su administrador esté dispuesto a darle acceso, supongo.
fuente
Debería poder utilizar MAPI para acceder al buzón y obtener la información que necesita. Desafortunadamente, la única biblioteca .NET MAPI (MAPI33) que conozco parece no estar mantenida. Esta solía ser una excelente manera de acceder a MAPI a través de .NET, pero ahora no puedo hablar de su efectividad. Hay más información sobre dónde puede obtenerlo aquí: ¿ Ubicación de descarga para MAPI33.dll?
fuente
Al final obtuve una solución usando Redemption, eche un vistazo a estas preguntas ...
Uso de la redención ...
Usando Redemption en una máquina de 64 bits
fuente
Una opción es utilizar Outlook. Tenemos una aplicación de administrador de correo que accede a un servidor de intercambio y utiliza Outlook como interfaz. Está sucio pero funciona.
Código de ejemplo:
fuente