Pregunta

He escrito este pequeño MS Outlook 2003 VSTO complemento utilizando C # y Visual Studio 2008. Está destinado a comprobar cada elemento de correo que se envía por la palabra "conectar" en el cuerpo y si lo encuentra, a continuación, comprobar el número de de los archivos adjuntos. Si ese número es cero, entonces preguntar al usuario si realmente significan para enviar el mensaje. Se supone que el trabajo como la característica de Gmail Labs, que hace lo mismo.

Lo curioso es que funciona, pero la primera vez que corro, me sale una pausa, como la ventana elemento de correo se cuelga durante unos 45 segundos. Una vez que se consigue más allá de eso, se corre muy rápido para el resto del tiempo que tengo abierta Outlook. Si cierro de Outlook sin embargo, a continuación, la próxima vez que vuelva a abrirlo y enviar un mensaje, voy a tener esta espera de nuevo.

Todas las ideas, los pueblos?

Este es el código para mi complemento:

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

¿Alguna sugerencia para mejorar el código son bienvenidos, así, ya que este es mi primer intento de un complemento de Outlook.

Actualización: Estoy funcionando esto en un ordenador portátil de Dell 5 años, 2 GB de RAM y yo-no-sé-lo que la CPU de Intel. Me gusta la idea de añadir un rastro / depurarlo. Voy a tener que ir a encontrar la manera de recorrer el código para que pueda ver dónde podría estar tomando el tiempo más largo. Gracias usted!

¿Fue útil?

Solución

OK, estoy muy avergonzado. El retraso que estaba viendo era sólo la sincronización de Outlook con mi servidor de Exchange. Estaba en casa cuando me estaba poniendo a prueba y Outlook todavía estaba conectando a través de HTTP. Estoy viendo que funcione rápido hoy en día, en la oficina, por lo que no HTTP. Gracias por las respuestas de todos modos.

: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top