В настоящее время я выполняю миграцию надстройки VSTO, написанной на VB, на C # для внешнего вида.
Общая идея состоит в том, чтобы регистрировать каждую отдельную информацию электронной почты в моей собственной базе данных. Я провел тщательный поиск, и кажется, что события NewMail / NewMailEX (из объекта приложения) являются наилучшими вариантами для его обработки.
Однако оба события не будут срабатывать для электронных писем, полученных, когда клиент Outlook не работает. У меня возникают проблемы при попытке обработать все письма, которые загружаются при запуске с сервера Exchange, поэтому я подумал, что событие «Добавление элемента» из коллекции элементов может решить эту проблему.
Я знаю, что длятот факт, что это может быть решено в событии «добавление элемента», потому что мы на самом деле решаем эту проблему в коде 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
Вот мой ошибочный код C #:
//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);
}
}
}