Domanda

Ho scritto questa piccola MS Outlook 2003 VSTO Add-In utilizzando C # e Visual Studio 2008. Esso è destinato a controllare ogni elemento di posta viene inviato per la parola "attaccare" nel corpo e se trovato, quindi controllare il numero di allegati. Se tale numero è pari a zero, per poi chiedere all'utente se davvero intendono per inviare il messaggio. Si suppone che il lavoro come la funzione di Gmail Labs, che fa la stessa cosa.

La cosa strana è che funziona, ma la prima volta che eseguo, ottengo una pausa, come la finestra elemento di posta è appeso per circa 45 secondi. Una volta che si ottiene oltre che, corre molto veloce per il resto del tempo che ho aperto Outlook. Se chiudo Outlook però, quindi la prossima volta che ri-aprirlo e inviare un messaggio, avrò di nuovo questa attesa.

Tutte le idee, i popoli?

Ecco il codice per il mio componente aggiuntivo:

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();
                }
            }
        }
    }
}

Qualche suggerimento per migliorare il codice sono i benvenuti, così, dal momento che questo è il mio primo tentativo di un Outlook Add-In.

Aggiornamento: Sto facendo funzionare questo su un 5 anni di laptop Dell, 2 GB di RAM e I-non-so-che Intel CPU. Mi piace l'idea di aggiungere una traccia / debug. Dovrò andare a capire come eseguire il codice in modo da poter vedere dove si potrebbe prendere più tempo. Grazie Y'all!

È stato utile?

Soluzione

OK, sono davvero imbarazzato. Il ritardo che stavo vedendo era solo sincronizzazione di Outlook con il mio assistente di scambio. Ero a casa quando stavo testando e Outlook era ancora la connessione via HTTP. Sto vedendo il lavoro veloce di oggi, in ufficio, in modo che nessun HTTP. Grazie per le risposte comunque.

: -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top