1

C# と Visual Studio 2008 を使用して、この小さな MS Outlook 2003 VSTO アドインを作成しました。これは、送信される各メール アイテムの本文に「添付」という単語があるかどうかを確認し、見つかった場合は添付ファイルの数を確認することを目的としています。その数がゼロの場合は、ユーザーに本当にメッセージを送信するつもりかどうかを尋ねます。これは、同じことを行う Gmail Labs 機能のように機能するはずです。

奇妙なことに、これは機能するのですが、初めて実行すると、メール アイテム ウィンドウが約 45 秒間ハングしたように一時停止します。それを過ぎると、Outlook を開いている残りの時間は非常に高速に実行されます。ただし、Outlook を閉じると、次に Outlook を再度開いてメッセージを送信したときに、再び待機することになります。

アイデアはありますか?

私のアドインのコードは次のとおりです。

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

これは Outlook アドインに初めて挑戦するので、コードを改善するための提案も歓迎します。

更新:私はこれを 5 年の Dell ラップトップ、2 GB の RAM、およびどの Intel CPU かわかりませんで実行しています。トレースを追加してデバッグするというアイデアが気に入っています。コードをステップ実行する方法を見つけて、最も時間がかかっている場所を確認する必要があります。ありがとうございます!

4

1 に答える 1

0

OK、本当に恥ずかしいです。私が見た遅延は、OutlookがExchangeサーバーと同期しているだけでした。テスト中は家にいて、OutlookはまだHTTP経由で接続していました。今日、オフィスでは高速に動作しているので、HTTPはありません。とにかく返信ありがとうございます。

:-)

于 2010-02-01T15:04:02.957 に答える