locked
Outlook Addin: intercepter l'évènement NewMail sur un Recipient RRS feed

  • Question

  • Bonjour,

     

    dans le cadre du développement d'un Addin Outlook avec VSTO 2005 SE, je voudrais attacher l'évènement NewMail à un Recipient qui se trouve etre l'Inbox d'un autre compte Exchange que celui par défaut (il s'agit une "additional mailbox" ajoutée dans les propriétés du compte Exchange par défaut).

     

    Voici le bout de code que j'ai développé, mais qui n'intercepte pas l'arrivée de nouveaux mails dans ce recipient:

    Code Snippet
                 Outlook.Recipient recipient = this.Application.ActiveExplorer().Session.CreateRecipient(recipientName);
                recipient.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(Application_NewMail);

     

    Par contre, si j'attache l'évènement sur

    Code Snippet
    this.Application.NewMail

     

    , là j'intercepte bien l'arrivée des nouveaux mails mais sur le compte principal (ce que je ne veux pas).

     

    Quelqu'un pourrait-il me dire si ce que je veux faire est possible, et si oui comment!  

     

    Merci d'avance pour votre aide,

     

    Jean-Marc

     

    mercredi 16 mai 2007 09:25

Réponses

  • Allez, deuxième essai, j'espère qu'il sera le bon.

     

    En utilisant l'événement NewMailEx, on récupère un identifiant qui permet de retrouver le ou les mails réceptionnés. Reste à déterminer les Recipients pour voir s'ils correspondent à celui qui nous intéresse.

     

    J'ai donc l'abonnement au démarrage :

     

    Code Snippet

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

    {

    this.Application.NewMailEx += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx);

    }

     

    Puis je récupère ma collection d'identifiants (séparés par une virgule) que je découpe pour récupérer les mails un par un. Pour chacun, je boucle dans les destinataires et je vérifie s'il match celui qui m'intéresse (à noter que je teste sur l'adresse, ça pourrait être son nom) :

     

    Code Snippet

    void Application_NewMailEx(string EntryIDCollection)

    {

          string recipient = "moi@monadresse.com";

          string[] entries = EntryIDCollection.Split(',');

          for(int i = 0; i < entries.Length; i++)

          {

                object mi = this.Application.Session.GetItemFromID(entries[i], null);

                if (mi is Outlook.MailItem)

                {

                      Outlook.MailItem mail = (Outlook.MailItem)mi;

                      foreach (Outlook.Recipient rec in mail.Recipients)

                      {

                            if (rec.Address == recipient) MessageBox.Show("Ok !");

                      }

                }

          }

    }

     

    J'espère que cette solution est la bonne.

    mardi 22 mai 2007 08:36

Toutes les réponses

  • Bonjour

     

    Je préviens de suite, je ne suis pas expert en VSTO, mais j'ai p-e une solution qui consiste à vérifier les nouveaux mails reçus dans une mailbox particulière.

     

    Voici le bout de code :

     

    Code Snippet

    Outlook.Store myStore = this.Application.Session.Stores["Mailbox"];

    myStore.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(Application_NewMail);

     

    Il faudra changer "Mailbox" par le nom du dossier désiré. Vous pouvez faire une boucle pour afficher chacun des "stores" afin de trouver le bon nom :

     

    Code Snippet

    StringBuilder sb = new StringBuilder();

    foreach (Outlook.Store store in this.Application.Session.Stores)

    {

         sb.AppendLine(store.DisplayName);

    }

    MessageBox.Show(sb.ToString());

     

     

    J'espère que je n'ai pas répondu à côté Smile

     

    lundi 21 mai 2007 13:01
  • Bon, j'ai répondu à côté Stick out tongue

     

    Ca intercepte la réception de tous les mails, quelle que soit la mailbox...

    mardi 22 mai 2007 06:32
  • Allez, deuxième essai, j'espère qu'il sera le bon.

     

    En utilisant l'événement NewMailEx, on récupère un identifiant qui permet de retrouver le ou les mails réceptionnés. Reste à déterminer les Recipients pour voir s'ils correspondent à celui qui nous intéresse.

     

    J'ai donc l'abonnement au démarrage :

     

    Code Snippet

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

    {

    this.Application.NewMailEx += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx);

    }

     

    Puis je récupère ma collection d'identifiants (séparés par une virgule) que je découpe pour récupérer les mails un par un. Pour chacun, je boucle dans les destinataires et je vérifie s'il match celui qui m'intéresse (à noter que je teste sur l'adresse, ça pourrait être son nom) :

     

    Code Snippet

    void Application_NewMailEx(string EntryIDCollection)

    {

          string recipient = "moi@monadresse.com";

          string[] entries = EntryIDCollection.Split(',');

          for(int i = 0; i < entries.Length; i++)

          {

                object mi = this.Application.Session.GetItemFromID(entries[i], null);

                if (mi is Outlook.MailItem)

                {

                      Outlook.MailItem mail = (Outlook.MailItem)mi;

                      foreach (Outlook.Recipient rec in mail.Recipients)

                      {

                            if (rec.Address == recipient) MessageBox.Show("Ok !");

                      }

                }

          }

    }

     

    J'espère que cette solution est la bonne.

    mardi 22 mai 2007 08:36
  • Merci Gat pour ces réponses! Le seul "hic" qui dans cette dernière solution c'est que l'attachement de l'évènement se fait au niveau de l'application courante. J'ai déjà testé cela, mais cela n'intercepte pas les nouveaux messages qui arrivent dans la mailbox additionnelle (en l'occurence celle qui m'intéresse pour mon AddIn).

    mardi 22 mai 2007 19:05
  • Ah ?

     

    J'ai une boîte supplémentaire qui correspond à un compte en IMAP et ça fonctionne dessus. J'ai Outlook 2007, ça change p-e quelque chose. La boîte additionnelle correspond à un compte Exchange ajouté à votre Outlook ?

    jeudi 24 mai 2007 08:12
  • Je suis sous Outlook 2003 (pas le choix d'upgrader à 2007), et la boite additionnelle correspond à un compte exchange...
    jeudi 24 mai 2007 08:49
  • Bonjour Arni06,

    As tu trouvé une solution à ton problème ? Car j'aimerai faire la même chose que toi, sauf que NewMailEx ne détecte que les nouveaux mails de la boite principale.
    J'ai aussi Outlook2003 avec 2 boites exchange. L'une est ma boite principale, l'autre est une boite générique sur laquelle j'ai une délégation.

    Merci pour votre aide.
    mardi 1 décembre 2009 13:29