Outlook 2007 アドインを作成しています。私がやっていることは次のとおりです。
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Outlook.Folder root;
//creates Spam folder if it dosen't exist
if (!SpamFolderExist())
{
CreateSpamFolder();
}
root = (Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder();
//set BeforeItemMove event for spam and inbox folders
spamFolder = (Outlook.Folder)root.Folders["Spam"];
inboxFolder = (Outlook.Folder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
spamFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromSpam);
inboxFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromInbox);
//set new mail event
this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(OnNewMail);
}
問題は、BeforeItemMoveFromInbox メソッドと BeforeItemMoveFromSpam メソッドに何も記述していない場合でも、アプリケーションの動作がおかしくなることです。いくつかのメールを移動した後、特定のメールに対してそれ以上移動アクションを実行しません。メールがブロックされているようで、移動できません。他の移動アクションを実行すると、他のメールがブロックされ、以前にブロックされたメールを移動できます。メールがブロックされた後は、移動できないメールが常に少なくとも 1 つあるという考えです。つまり、移動アクションの一部がランダムに失敗します。メールをフォルダから別のフォルダに移動する以外に何もしていないこと、およびエラーメッセージが表示されないことを言わなければなりません。また、メソッドの最後で、BeforeItemMove イベント ハンドラのキャンセル パラメータを false に設定しようとしましたが、同じ動作になりました。