В настоящее время я переношу добавление VSTO, написанное на VB, на C # для Outlook.
Общая идея состоит в том, чтобы регистрировать каждую информацию об электронной почте в моей собственной базе данных. Я тщательно искал, и кажется, что события NewMail/NewMailEX (из объекта приложения) - лучшие варианты для его обработки.
Однако оба события не будут срабатывать для сообщений электронной почты, полученных, когда клиент Outlook не работает. У меня возникли проблемы при попытке обработать все письма, загружаемые при запуске с сервера обмена, поэтому я подумал, что событие «Item-add» из коллекции элементов может решить эту проблему.
Я точно знаю, что это можно решить с помощью события "item-add", потому что мы фактически обрабатываем эту проблему в коде VB.
Однако при попытке подписаться на событие «добавление элемента» для каждой папки «Входящие» в Outlook ничего не происходит! Нет ни ошибки, ни исключения.
в нашем коде VB нам удалось подписаться на упомянутое событие с помощью этого кода:
outlookNameSpace = Me.Application.GetNamespace("MAPI")
inbox = outlookNameSpace.Stores(account).GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
Mailitem = inbox.Items
Private Sub Items_ItemAdd(ByVal item As Object) Handles Mailitem.ItemAdd
Вот мой неудачный код С#:
//looping to fetch all my inboxes
public static void InitialOutlookConfiguration(Outlook.Application myOutlookInstance)
{
Outlook.Accounts myAccounts = myOutlookInstance.GetNamespace("MAPI").Accounts;
foreach(Outlook.Account myAccount in myAccounts)
{
Outlook.MAPIFolder inbox = myAccount.DeliveryStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
string storeID = myAccount.DeliveryStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).StoreID;
myInboxes.Add(inbox, storeID);
foreach(Outlook.MAPIFolder inbox in myInboxes.Keys)
{
Outlook.Items myInboxItems = inbox.Items;
myInboxItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(OnNewItem);
}
}
}