Pergunta

Eu escrevi este pequeno suplemento VSTO do MS Outlook 2003 usando o C# e o Visual Studio 2008. Ele destina-se a verificar cada item de correio que está sendo enviado para a palavra "Anexar" no corpo e, se encontrado, verifique o número de anexos. Se esse número for zero, pergunte ao usuário se eles realmente pretendem enviar a mensagem. Deveria funcionar como o recurso Gmail Labs, que faz a mesma coisa.

O estranho é que ele funciona, mas a primeira vez que o corro, recebo uma pausa, como a janela do item de correio é pendurado por cerca de 45 segundos. Uma vez que passa por isso, ele funciona muito rápido pelo resto do tempo em que o Outlook aberto. Se eu fechar o Outlook, porém, na próxima vez que a reabrir e enviar uma mensagem, terei essa espera novamente.

Alguma ideia, povos?

Aqui está o código do meu suplemento:

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

Quaisquer sugestões para melhorar o código também são bem-vindas, pois esta é minha primeira facada em um suplemento do Outlook.

Atualizar: Estou executando isso em um laptop Dell de 5 anos, 2 GB de RAM e Intel CPU. Gosto da ideia de adicionar um rastreio / depurar. Terei que descobrir como passar pelo código para que eu possa ver onde ele pode estar demorando mais tempo. Obrigado Y'All!

Foi útil?

Solução

Ok, estou realmente envergonhado. O atraso que eu estava vendo foi apenas o Outlook sincronizando com o meu servidor Exchange. Eu estava em casa quando estava testando e o Outlook ainda estava se conectando via HTTP. Estou vendo isso funcionar rápido hoje, no escritório, então não http. Obrigado pelas respostas de qualquer maneira.

:-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top