Question

J'ai écrit ce petit MS Outlook 2003 VSTO Add-In en utilisant C # et Visual Studio 2008. Il est destiné à vérifier chaque élément de courrier étant envoyé pour le mot « attacher » dans le corps et se trouve, puis vérifiez le numéro des pièces jointes. Si ce nombre est égal à zéro, puis demander à l'utilisateur s'ils veulent vraiment dire pour envoyer le message. Il est censé fonctionner comme les laboratoires Gmail caractéristique qui fait la même chose.

La chose étrange est que cela fonctionne, mais la première fois que je le lance, je reçois une pause, comme la fenêtre de l'élément de courrier est accroché pendant environ 45 secondes. Une fois qu'il obtient passé, il court très vite pour le reste du temps je ouvrez Outlook. Si je fermez Outlook si, la prochaine fois que je le réouvrir et envoyer un message, je vais avoir cette attente à nouveau.

Toutes les idées, les peuples?

Voici le code pour mon Add-In:

namespace OutlookAttacher
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        void Application_ItemSend(object Item, ref bool Cancel)
        {
            if (Item is Microsoft.Office.Interop.Outlook.MailItem)
            {
                Microsoft.Office.Interop.Outlook.MailItem currentItem = Item as Microsoft.Office.Interop.Outlook.MailItem;
                Cancel = true;

                if (currentItem.Body.Contains("attach"))
                {
                    if (currentItem.Attachments.Count > 0)
                    {
                        Cancel = false;
                        //MessageBox.Show("This message will be sent now.");
                        currentItem.Send();
                    }
                    else
                    {
                        DialogResult ans = MessageBox.Show("This message has no attachments. Are you sure you want to send it?", "OutlookAttacher", MessageBoxButtons.YesNo);
                        if (ans.Equals(DialogResult.Yes))
                        {
                            Cancel = false;
                            //MessageBox.Show("This message will be sent now.");
                            currentItem.Send();
                        }
                    }
                }
                else
                {
                    Cancel = false;
                    //MessageBox.Show("This message will be sent now.");
                    currentItem.Send();
                }
            }
        }
    }
}

Toutes les suggestions pour améliorer le code sont les bienvenus aussi bien, puisque c'est mon premier coup de couteau à un complément Outlook.

Mise à jour: Je courais ce sur un ordinateur portable Dell 5 ans, 2 Go de Ram et je-ne-sais-qui CPU Intel. J'aime l'idée d'ajouter une trace / déboguer. Je vais devoir comprendre comment parcourir le code afin que je puisse voir où il pourrait prendre le plus long temps. Merci à tous!

Était-ce utile?

La solution

OK, je suis vraiment gêné. Le retard que je voyais était juste d'Outlook avec mon synchronisation serveur Exchange. J'étais à la maison quand je testais et Outlook se connectait encore via HTTP. Je le vois travailler vite aujourd'hui, au bureau, donc pas HTTP. Merci pour les réponses de toute façon.

: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top