J'ai besoin de la capacité de surveiller et de lire le courrier électronique d'une boîte aux lettres particulière sur un serveur MS Exchange (interne à mon entreprise). Je dois également être capable de lire l'adresse e-mail de l'expéditeur, l'objet, le corps du message et de télécharger une pièce jointe, le cas échéant.
Quelle est la meilleure façon de procéder en utilisant C # (ou VB.NET)?
c#
email
exchange-server
mapi
vajarov
la source
la source
Réponses:
C'est le bordel. MAPI ou CDO via une DLL d'interopérabilité .NET n'est officiellement pas pris en charge par Microsoft - cela semble fonctionner correctement, mais il existe des problèmes de fuites de mémoire en raison de leurs modèles de mémoire différents. Vous pouvez utiliser CDOEX, mais cela ne fonctionne que sur le serveur Exchange lui-même, pas à distance; inutile. Vous pouvez interopérer avec Outlook, mais vous venez de créer une dépendance à Outlook; exagéré. Enfin, vous pouvez utiliser la prise en charge de WebDAV d'Exchange 2003 , mais WebDAV est compliqué, .NET a une prise en charge intégrée médiocre et (pour ajouter l'insulte à la blessure) Exchange 2007 abandonne presque complètement la prise en charge de WebDAV.
Qu'est-ce qu'un gars à faire? J'ai fini par utiliser le composant IMAP d'AfterLogic pour communiquer avec mon serveur Exchange 2003 via IMAP, et cela a très bien fonctionné. (Je recherche normalement des bibliothèques gratuites ou open-source, mais j'ai trouvé que toutes les bibliothèques .NET voulaient - en particulier en ce qui concerne certaines des bizarreries de l'implémentation IMAP de 2003 - et celle-ci était assez bon marché et fonctionnait sur la première essayez. Je sais qu'il y en a d'autres là-bas.)
Cependant, si votre organisation utilise Exchange 2007, vous avez de la chance. Exchange 2007 est fourni avec une interface de service Web basée sur SOAP qui offre enfin une manière unifiée et indépendante de la langue d'interagir avec le serveur Exchange. Si vous pouvez faire de 2007+ une exigence, c'est certainement la voie à suivre. (Malheureusement pour moi, mon entreprise a une politique "mais 2003 n'est pas rompu".)
Si vous avez besoin de relier à la fois Exchange 2003 et 2007, IMAP ou POP3 est certainement la voie à suivre.
la source
Hum,
Je suis peut-être un peu trop tard ici, mais n'est-ce pas le but d'EWS?
https://msdn.microsoft.com/en-us/library/dd633710(EXCHG.80).aspx
Prend environ 6 lignes de code pour obtenir le courrier d'une boîte aux lettres:
la source
service.autodiscoverurl
, je devrai entrer leservice.credentials
, ai-je raison?L'API actuellement préférée (Exchange 2013 et 2016) est EWS . Il est purement basé sur HTTP et peut être consulté à partir de n'importe quel langage, mais il existe des bibliothèques spécifiques .Net et Java .
Vous pouvez utiliser EWSEditor pour jouer avec l'API.
MAPI étendu . Il s'agit de l'API native utilisée par Outlook. Il finit par utiliser le
MSEMS
fournisseur Exchange MAPI, qui peut parler à Exchange en utilisant RPC (Exchange 2013 ne le prend plus en charge) ou RPC-sur-HTTP (Exchange 2007 ou plus récent) ou MAPI-sur-HTTP (Exchange 2013 et plus récent).L'API elle-même n'est accessible qu'à partir de C ++ ou Delphi non managé . Vous pouvez également utiliser Redemption (n'importe quel langage) - sa famille d'objets RDO est un wrapper MAPI étendu. Pour utiliser Extended MAPI, vous devez installer Outlook ou la version autonome (Exchange) de MAPI (sur support étendu, et il ne prend pas en charge les fichiers Unicode PST et MSG et ne peut pas accéder à Exchange 2016). Le MAPI étendu peut être utilisé dans un service.
Vous pouvez jouer avec l'API en utilisant OutlookSpy ou MFCMAPI .
Modèle d'objet Outlook - pas spécifique à Exchange, mais il permet d'accéder à toutes les données disponibles dans Outlook sur la machine sur laquelle le code s'exécute. Ne peut pas être utilisé dans un service.
Exchange Active Sync . Microsoft n'investit plus de ressources significatives dans ce protocole.
Outlook avait l'habitude d'installer la bibliothèque CDO 1.21 (il encapsule le MAPI étendu), mais il était obsolète par Microsoft et ne reçoit plus de mises à jour.
Il y avait autrefois un wrapper .Net MAPI tiers appelé MAPI33, mais il n'est plus développé ou pris en charge.
WebDAV - obsolète.
Objets de données collaboratifs pour Exchange (CDOEX) - obsolète.
Fournisseur Exchange OLE DB (EXOLEDB) - obsolète.
la source
Voici un vieux code que j'avais pour faire WebDAV. Je pense qu'il a été écrit contre Exchange 2003, mais je ne m'en souviens plus. N'hésitez pas à l'emprunter si c'est utile ...
Et modèle.
la source
J'ai utilisé du code publié sur CodeProject.com . Si vous souhaitez utiliser POP3, c'est l'une des meilleures solutions que j'ai trouvées.
la source
Si votre serveur Exchange est configuré pour prendre en charge POP ou IMAP, c'est une solution simple.
Une autre option est l'accès WebDAV. il y a une bibliothèque disponible pour cela. Cela pourrait être votre meilleure option.
Je pense qu'il existe des options utilisant des objets COM pour accéder à Exchange, mais je ne sais pas à quel point c'est facile.
Tout dépend de ce à quoi votre administrateur est prêt à vous donner accès, je suppose.
la source
Vous devriez pouvoir utiliser MAPI pour accéder à la boîte aux lettres et obtenir les informations dont vous avez besoin. Malheureusement, la seule bibliothèque .NET MAPI (MAPI33) que je connaisse ne semble pas être maintenue. C'était un excellent moyen d'accéder à MAPI via .NET, mais je ne peux pas parler de son efficacité maintenant. Il y a plus d'informations sur l'endroit où vous pouvez l'obtenir ici: Emplacement de téléchargement pour MAPI33.dll?
la source
J'ai une solution qui fonctionne à la fin en utilisant Redemption, jetez un œil à ces questions ...
Utiliser la rédemption ...
Utilisation de Redemption sur une machine 64 bits
la source
Une option consiste à utiliser Outlook. Nous avons une application de gestion de courrier qui accède à un serveur d'échange et utilise Outlook comme interface. C'est sale mais ça marche.
Exemple de code:
la source