Я пишу надстройку для 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, приложение ведет себя странно. После того как я переместил несколько писем, он просто не выполняет никаких действий по перемещению для определенной почты. Кажется, почта заблокирована, и я просто не могу ее переместить. После выполнения других действий по перемещению другие письма блокируются, и ранее заблокированное письмо можно было переместить. Идея состоит в том, что после того, как почта заблокирована, это всегда будет по крайней мере одно письмо, которое не может быть перемещено. Другими словами, случайно некоторые из движущихся действий терпят неудачу. Я должен сказать, что я не делаю ничего, кроме перемещения писем из одной папки в другую, и я не получаю сообщения об ошибке. Я также попытался установить для параметра отмены обработчиков событий BeforeItemMove значение false только в конце методов, но я получил то же поведение.