Posts taggés DotNet

Créer un plugin Outlook 2010

0

Introduction

Dans le cadre de l’extension d’une application de partage de fichiers pour l’un de nos clients, celui-ci voulait utiliser son service de partage au travers d’Outlook 2010.

Concrètement, lors de l’envoi d’un email avec une pièce jointe si celle-ci dépasse une certaine taille alors elle sera envoyée à  travers de partage l’application (grâce à un Web Service précédemment créer)  plutôt que par email.

Nous allons découvrir dans cet article comment surcharger l’envoi d’un email sur Outlook 2010 pour faire des actions personnalisées et comment créer un fichier d’installation.

Ce dont nous avons besoin

  • Visual Studio 2010
  • Office 2010

Implémentation

  1. 1.    Création de la solution

Lancer Visual Studio 2010 et créer un projet de type « Complément Outlook 2010 » :

 

  1. 2.     Composition de la solution

Une fois la solution créée, nous retrouvons les éléments suivants dans l’explorateur de solutions :

 

Le fichier qui va nous intéresser est « ThisAddIn.cs ».

Celui-ci va contenir le code dont nous avons pour intercepter et modifier l’envoi d’un email.

A la création, nous pouvons voir 2 méthodes :

  • ThisAddIn_Startup
  • ThisAddIn_Shutdown

 

La méthode ThisAddIn_Startup est appelée au lancement d’Outlook, elle correspond au chargement de notre AddIn.

La méthode ThisAddIn_Shutdown est appelée à la fermeture d’Outlook, elle correspond au déchargement de notre AddIn.

 

  1. 3.    Préparation du code

Ajout des références :

using Microsoft.Office.Interop.Outlook;

 

Ajout des variables et constantes :

public Application OutlookApplication;

public Inspectors OutlookInspectors;

public Inspector OutlookInspector;

public MailItem OutlookMailItem;

 

Modifier la méthode ThisAddIn_Startup afin d’initialiser nos variables et s’abonner aux différents événements  et ajouter le code suivant :

private void ThisAddIn_Startup(object sender, System.EventArgs e)

{

       // Instanciation de l’application

OutlookApplication = Application as Application;

// Récupération des « inspectors »

OutlookInspectors = OutlookApplication.Inspectors;

// Abonnement à l’événement d’inspection

OutlookInspectors.NewInspector += new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(OutlookInspectors_NewInspector);

// Abonnement à l’événement d’envoi d’email

OutlookApplication.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(OutlookApplication_ItemSend);

}

 

Créer ensuite les 2 événements suivants :

void OutlookInspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)

{

}

void OutlookApplication_ItemSend(object Item, ref bool Cancel)

{

}

Le 1er événement se charge d’inspecter les différentes actions faites par l’utilisateur.

Le 2nd  nous permet d’intercepter l’envoi d’un email (bouton “Envoyer”) et de faire des actions spécifiques.

 

  1. 4.    Interception et modification de l’email

Pour intercepter notre email, nous allons utiliser l’événement « OutlookInspectors_NewInspector » vu dans le paragraphe précédent, vérifier que l’on manipule un objet de type « MailItem » et l’affecter dans notre variable « OutlookMailItem ».  Cette variable nous permettra de manipuler l’email lors de l’envoi.

Pour cela, ajouter le code suivant dans l’événement :

void OutlookInspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)

{

// Récupération de "l'inspector"

OutlookInspector = (Inspector)Inspector;

// Test sur le type, ici "MailItem" nous intéresse

if (Inspector.CurrentItem is MailItem)

{

     // Récupération de l'objet dans la variable "OutlookMailItem"

     OutlookMailItem = (MailItem)Inspector.CurrentItem;

}

}

 

Nous allons maintenant modifier l’événement « OutlookApplication_ItemSend » et afficher le contenu de celui-ci dans une boite de dialogue.

void OutlookApplication_ItemSend(object Item, ref bool Cancel)

{

try

       {

            System.Windows.Forms.MessageBox.Show("Contenu de l'email : " + OutlookMailItem.Body);

       }

       catch (System.Exception ex)

       {

            System.Windows.Forms.MessageBox.Show(ex.Message);

    // On annule l’envoi

            Cancel = true;

       }

}

 

Voici le résultat obtenu :

Nous allons maintenant modifier le contenu de l’email envoyé :

void OutlookApplication_ItemSend(object Item, ref bool Cancel)

{

try

       {

           // Modification du contenu de l'email

           string sBody = "---\r\n";

           sBody += "Ce mail a été modifié automatiquement !";

           // Ajout de notre texte à la suite du mail.

           OutlookMailItem.Body += sBody;

}

catch (System.Exception ex)

{

            System.Windows.Forms.MessageBox.Show(ex.Message);

    // On annule l’envoi

            Cancel = true;

}

}

 

Le mail reçu a bien été modifié :

 

  1. 5.    Création d’un fichier d’installation

Créer sous Visual Studio un nouveau projet de type « Projet d’installation ».

 

Dans l’explorateur de solutions, faire un clic droit sur le nouveau projet, puis ajouter « sortie de projet ».

 

Sélectionnez « Sortie principale ».

 

Après l’ajout, dans la liste des dépendances détectées, exclure les dépendances suivantes :

  • Microsoft.Office.Tools.Common.dll
  • Microsoft.Office.Tools.dll
  • Microsoft.Office.Tools.Outlook.dll
  • Microsoft.Office.Tools.v4.0.Framework.dll
  • Microsoft.VisualStudio.Tools.Applications.Runtime.dll
  • Stdole.dll

Vos dépendances devraient ressembler à ça :

 

Se rendre dans l’éditeur du système de fichier et ajouter les 2 fichiers suivants depuis le répertoire « bin\release » du projet :

  • MonAddinOutlook.dll.manifest
  • MonAddinOutlook.vsto

 

Se rendre dans l’éditeur de registre et ajouter les clés pour avoir la même arborescence et la configuration suivante :

 

Modifier ensuite les différentes options du Setup afin de renseigner les informations sur le nom de l’application, le créateur, les options de mise à jour, …

Compiler l’installateur et lancer l’installation.

Pour vérifier que votre AddIn est bien installé, lancer le gestionnaire de compléments COM et vérifier qu’il figure bien dans la liste.

 

  1. 6.    Pour aller plus loin…

Il est bien sûr possible d’aller encore plus loin en imaginant toute sorte « d’application » ou contrôles par rapport à l’email (par exemple l’ajout ou la suppression de pièces jointes, ajout de destinataire, …).

N’hésitez pas à consulter l’aide MSDN sur les fonctionnalités d’Outlook : http://msdn.microsoft.com/en-us/library/bb610835(v=office.14).aspx

 

Créer des Jobs en .NET (Partie 3/3)

0

Tâche de fond d’un site web

La tâche de fond d’un site permet de lancer une tâche qui s’exécute en parallèle de l’exécution d’un site.

Attention cependant, la tâche de fond ne s’exécutera pas si le pool de l’application est en veille (par défaut après 20 minutes d’inactivité sur le pool).

Comment mettre en place une tâche de fond récurrente ?

Pour exécuter une tâche de fond classique, il suffit d’utiliser les Thread ou les backgroundWorkers.

Pour exécuter une tâche récurrente, nous allons nous appuyer sur la classe « ThreadCron » ci-jointe.

 

Il faut donc ajouter cette classe dans le répertoire App_Code de votre projet Web.

Nous allons maintenant déclarer notre tâche récurrente afin qu’elle commence à se lancer au lancement de l’application.

Pour cela, dans le fichier « global.asax » de votre site, ajouter le code suivant :

 

void Application_Start(object sender, EventArgs e)
    {
        // Code qui s'exécute au démarrage de l'application
        // tâche de fond qui s’exécute toutes les 3600 secondes
        ThreadCron oMaTache = new ThreadCron(TacheAExecuter, null, 3600);
    }

    // tâche à exécuter
    private void TacheAExecuter (Object state)
    {
        // code à executer à completer ici
    }

La fonction « TacheAExecuter » s’exécutera selon la période indiquée (dans l’exemple ci-dessus toutes les heures).