Loupe

Utiliser les Web Services et APIs d’Exchange dans une application .NET

Comme beaucoup de produits Microsoft, Exchange (dans sa version 2013 ou dans sa version Office 365) dispose d’un ensemble de Web Services que vous pouvez utiliser pour développer vos propres applications.

Ainsi, vous êtes en mesure de récupérer la liste des contacts, la liste des emails, modifier les informations (signature, etc.) de l’utilisateur, etc. et tout cela de manière très simple en utilisant des Web Services REST pour lesquels vous pouvez récupérer la liste ici: https://msdn.microsoft.com/en-us/library/office/jj900166(v=exchg.150).aspx

Mais bien mieux que de manipuler des requêtes SOAP, vous pouvez utiliser le SDK mis à disposition par Microsoft et disponible sous forme de package Nuget:

image

Une fois le SDK installé, la première étape consiste à se connecter au serveur Exchange. Pour cela, vous pouvez vous appuyer sur les fonctionnalités “d’autodiscover” d’Exchange à savoir la possibilité, à partir de l’adresse email, de récupérer l’adresse du Web Service correspondant à votre organisation:

var service = new ExchangeService();

service.Credentials = new WebCredentials("tlebrun@infinitesquare.com", "MySuperSecretPassword");

service.AutodiscoverUrl("tlebrun@infinitesquare.com", url =>
{
    return true;
});

La connexion étant maintenant mise en place, il ne vous reste plus qu’à utiliser les APIs du SDK pour effectuer les opérations qui vous intéressent. Ainsi, le code suivant vous permet d’envoyer un email, de manière automatisée:

public static void SendEmailMessage(ExchangeService service)
{
    var email = new EmailMessage(service);
    email.ToRecipients.Add("tlebrun@infinitesquare.com");
    email.Subject = "Demo Utilisation Web Services Exchange";
    email.Body = "<h1>It's working dude!</h1>";
    email.Body.BodyType = BodyType.HTML;

    email.Send();
}

Un tour dans la messagerie permet de vérifier que l’email envoyé/reçu est bien présent et dans le bon format:

image

Bien sûr, vous pouvez aller plus loin en faisant des recherches, par exemple, sur le contenu de votre inbox. Le code ci-dessous se charge de récupérer l’ensemble des éléments de l’inbox et d’afficher le titre des éléments. Notez que nous parlons ici d’élément (et non pas d’emails) car, dans le cas où vous recevez une invitation/un RM, vous avez bien un item présent dans votre inbox mais il ne s’agira pas d’un email (au sens “développement” du terme):

public static void GetInboxItems(ExchangeService service)
{
    var inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
    var items = service.FindItems(inbox.Id, string.Empty, new ItemView(inbox.TotalCount));
    foreach (var item in items)
    {
        Console.WriteLine(item.Subject);
    }
}

L’exécution de ce bloc de code permet bien de visualiser les titres des éléments présents dans l’inbox:

image

Mais, comme indiqué en introduction, vous pouvez aller plus loin que la récupération des éléments de l’inbox ou la manipulation des items du calendrier: vous êtes également en mesure d’accéder aux paramètres de configuration (pour éventuellement les modifier). Ainsi, le code suivant vous permet d’accéder aux signatures que vous avez définies (au format texte et HTML):

public static void GetSignature(ExchangeService service)
{
    var rootFolder = Folder.Bind(service, WellKnownFolderName.Root);
    var userConfiguration = UserConfiguration.Bind(service, "OWA.UserOptions", rootFolder.ParentFolderId, UserConfigurationProperties.All);
    
    if (userConfiguration.Dictionary.ContainsKey("signaturehtml"))
    {
        Console.WriteLine("Signature HTML:");
        Console.WriteLine(userConfiguration.Dictionary["signaturehtml"]);
    }

    if (userConfiguration.Dictionary.ContainsKey("signaturetext"))
    {
        Console.WriteLine("Signature Texte:");
        Console.WriteLine(userConfiguration.Dictionary["signaturetext"]);
    }
}

Lors de l’exécution, on constate bien que le code HTML et le texte des signatures s’affiche à l’écran:

image

La partie “Debug” peut être la plus compliquée car il n’y a pas/peu d’informations qui remonte des appels à l’API, dans le code. Pour changer cela, vous pouvez activer les traces et spécifier à quel niveau vous souhaitez les positionner:

service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;

Cela vous permettra de disposer d’un ensemble d’informations tout au long de vos appels aux APIs:

image image image

 

N’oubliez pas de jeter un oeil sur la documentation (https://msdn.microsoft.com/en-us/library/office/jj900166(v=exchg.150).aspx), elle est constituée de pas mal de bouts de code/exemples qui vous feront gagner du temps!

 

Happy coding! Smile

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus