Mise en oeuvre de l’API Exchange sur un compte Office 365

Introduction

Exchange Web Services (EWS) est une API multiplateforme qui permet aux applications d’accéder aux boites (emails, réunions, calendriers, contacts…) et de les gérer à partir d’Exchange Online dans le cadre Office 365 ou On Premise dans le cadre d’Exchange Server. De plus, cette API permet de stocker ou récupérer des données sur un compte Exchange, offrant une grande souplesse dans la gestion et la manipulation des éléments de messagerie Exchange pour un utilisateur, un groupe d’utilisateurs ou une organisation entière.

Architecture

Les applications EWS peuvent accéder aux éléments d’une boîte en envoyant au serveur Exchange (online ou on premise) une requête dans un message XML basé sur le protocole SOAP. Le message SOAP est incorporé dans un message HTTP lors d’un échange application/serveur Exchange. Capture

Prérequis

  • Un ordinateur exécutant Microsoft Exchange Server 2007 SP1 (ou version ultérieure) ou un accès à Exchange Hosted Services.
  • Framework .Net 3.5 (ou version ultérieure)
  • Assembly de l’API : Microsoft.Exchange.WebServices.dll
  • Visual studio 2008 (ou version ultérieure) avec les composants C#

Connexion au serveur Exchange

Pour établir une connexion à EWS, il faut créer un objet ExchangeService et se connecter au serveur d’accès client Exchange (CAS) en utilisant un compte avec un accès suffisant. Pour se connecter il est nécessaire de renseigner le nom du compte ainsi que son mot de passe. Une fois la connexion établie, toutes actions réalisées sur les éléments Exchange sont accessibles depuis l’objet ExchangeService.

ExchangeService _exchangeService = new ExchangeService(ExchangeVersion.Exchange2013)
{
    Credentials = new WebCredentials("userName", "password")
};

_exchangeService.AutodiscoverUrl("userName@domain.com", RedirectionUrlValidationCallback);

private bool RedirectionUrlValidationCallback(string redirectionUrl)
{
    Uri redirectionUri = new Uri(redirectionUrl);
    return redirectionUri.Scheme == "https";
}

Exchange Autodiscover

Le service Autodiscover d’Exchange fournit à l’application cliente un moyen facile pour configurer automatiquement une connexion avec une entrée utilisateur minimale : adresse de messagerie et mot de passe. Ce service est généralement utilisé pour trouver automatiquement l’URL d’un point de terminaison EWS.

Gérer des éléments Email

La gestion Email nécessite un objet ExchangeService connecté, et il y a six actions principales possibles avec un Email :

  • Création
  • Envoi
  • Transmission
  • Réponse
  • Suppression
  • Sauvegarde

Chacune de ces actions sont implémentées en utilisant un objet EmailMessage.

Création et envoi d’un email

Pour cette fonction, le principe est de créer un objet EmailMessage, remplir les champs, puis envoyer le courriel (avec sauvegarde du message dans le dossier « Eléments envoyés »). Le code C# ci-dessous montre comment créer l’objet EmailMessage et envoyer un email.

EmailMessage message = new EmailMessage(_service)
{
    Subject = "SubjectText",
    Body = "BodyText"
};

message.ToRecipients.Add("user@mcnext.com");
message.SendAndSaveCopy(WellKnownFolderName.SentItems);

Transmission d’un email

Cette fonction s’applique à un objet EmailMessage existant, soit un message reçu et acquis depuis le serveur Exchange, soit un objet préalablement créé. Pour cet exemple, nous utiliserons l’objet EmailMessage précédemment créé. Le code C # ci-dessous montre comment transmettre un message électronique.

string messageBodyPrefix = "This message was forwarded by using the EWS Managed API";
EmailAddress[] addresses = new EmailAddress[1];
addresses[0] = new EmailAddress("user1@netsoft-usa.com");
message.Forward(messageBodyPrefix, addresses);

Répondre à un email

Tout comme la transmission d’un message, la réponse à un message s’applique à un objet EmailMessage existant. Une fois de plus, pour l’exemple nous prendrons l’objet précédemment créé pour appeler la méthode de réponse.

string myReply = "This is the message body of the email reply.";
bool replyToAll = true;
message.Reply(myReply, replyToAll);

Suppression d’un email

Cette fonction s’applique à un objet EmailMessage existant. La méthode dispose de 3 modes de suppression :

  • SoftDelete : L’élément ou le dossier sera déplacé vers la corbeille. Articles et dossiers dans la corbeille peuvent être récupérés.
  • HardDelete : L’élément ou le dossier seront supprimés définitivement
  • MoveToDeletedItems : L’élément ou le dossier seront déplacés vers le dossier « Deleted Items » de la boîte aux lettres.

Dans l’exemple suivant, nous utiliserons le mode de suppression, MoveToDeletedItems.

message.Delete(DeleteMode.MoveToDeletedItems);

Récupération de messages depuis Exchange

Les actions présentées précédemment peuvent être appliquées à une collection d’objets EmailMessage obtenue depuis le serveur Exchange. Pour cela, il faut spécifier le dossier cible et le nombre d’éléments souhaité. L’exemple suivant illustre comment récupérer les mails depuis la boite de reception.

FindItemsResults results = _service.FindItems(WellKnownFolderName.Inbox,
                                                    new ItemView(int.MaxValue));
foreach (EmailMessage msg in results)
{
   // traitement sur chaque message
}

Gérer des éléments Contacts

Comme pour les emails, la gestion des contacts nécessite un objet ExchangeService connecté.

Récupération des contacts depuis Exchange

Pour récupérer les éléments de contact à partir d’Exchange, il faut spécifier le dossier Contacts en utilisant l’énumération WellKnownFolderName et le nombre de contacts à récupérer à partir d’Exchange. Le code C# ci-dessous montre comment récupérer les éléments de contact à partir d’Exchange. Dans ce cas on récupère tous les contacts d’Exchange (spécifier une valeur plus petite réduit le nombre d’articles retournés par le serveur).

FindItemsResults results = _service.FindItems(WellKnownFolderName.Contacts,
                                 new ItemView(int.MaxValue));
foreach (Contact ctc in results)
{
    // traitement sur chaque contact
}

Créer un contact

Le principe est le même que pour les emails, on crée un objet Contact, on remplit les champs puis on sauvegarde le contact.

Contact _contact = new Contact(_service);
_contact.DisplayName = "John Doe";
_contact.EmailAddresses[EmailAddressKey.EmailAddress1] = "johndoe@domain.com";
_contact.Save(WellKnownFolderName.Contacts);

Supprimer un contact

Cette fonction s’applique à un objet Contact existant. La méthode dispose de 3 modes de suppression :

  • SoftDelete : L’élément ou le dossier sera déplacé vers la corbeille. Articles et dossiers dans la corbeille peuvent être récupérés.
  • HardDelete : L’élément ou le dossier seront supprimés définitivement.
  • MoveToDeletedItems : L’élément ou le dossier seront déplacés vers le dossier « Deleted Items » de la boîte aux lettres.

Dans l’exemple suivant, nous utiliserons le mode de suppression, MoveToDeletedItems.

_contact.Delete(DeleteMode.MoveToDeletedItems);

Aller plus loin

Les actions présentées précédemment sont un échantillon des fonctionnalités disponibles dans un contexte Exchange. Il est possible par exemple de :

  • Naviguer entre les différents dossiers de la boite de messagerie et les manipuler
  • Manipuler le calendrier, créer et gérer des réunions ou RDV
  • Manipuler des pièces jointes
  • Gérer des conversations
  • Créer et gérer des alertes ou notifications

Un recueil d’exemples très complet est disponible via le lien suivant et présente une grande partie des fonctionnalités proposées par le service Exchange : https://code.msdn.microsoft.com/office/Exchange-2013-101-Code-3c38582c

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s