Может ли outlook.ItemsEvents_ItemAddEventHandler (CallBack) работать для нескольких почтовых аккаунтов? - PullRequest
0 голосов
/ 21 декабря 2018

Как добавить прослушиватель в Все или Несколько учетных записей почты?Или прослушать всю входящую почту, прежде чем она будет помещена в папку или подпапку?

Я не могу создать outlook.ItemsEvents_ItemAddEventHandler (CallBack) функция обратного вызова для нескольких учетных записей.

        Outlook.Application outlookApp;
        Outlook.MAPIFolder deleterFolder = null;
        Outlook.Items mailItems = null;
        Outlook.MAPIFolder inboxFolder = null;
        Outlook.Items items;

        private void Phishing_Load(object sender, RibbonUIEventArgs e)
        {   
            outlookApp = new Outlook.Application();

            inboxFolder = outlookApp.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            deleterFolder = outlookApp.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderJunk);
            mailItems = inboxFolder.Items;//.Restrict("[Unread]=true");
            mailItems.Sort("[ReceivedTime]", true);
            items = inboxFolder.Items;
            items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(CallFunction);
        }
 private void CallFunction(object data)
         {
       Console.Write(" Call Function");
        }

1 Ответ

0 голосов
/ 21 декабря 2018

Создайте класс-оболочку, который содержит указатель на объект Items (для поддержания его работоспособности) и имеет обработчик для события ItemAdd.В вашем коде вы можете иметь список этих объектов-оболочек.Создайте новый экземпляр этого класса и добавьте его в список для каждой папки, которую вы хотите отслеживать.

В верхней части моей головы:

public class ItemsWrapper
{
  private Items _items;
  private MAPIFolder _folder;
  public ItemsWrapper(MAPIFolder folder)
  {
    _folder = folder;
    _items = folder.Items;
    _items.ItemAdd += Item_Add;
  }
  private Items_Add(object item)
  {
    MessageBox.Show($"New item in folder '{folder.Name}' ");
  }
}

...
//global/class variable that will hold the wrappers
List<ItemsWrapper> allWrappers = new List<ItemsWrapper>();
foreach (MAPIFolder folder in FoldersThatYouWantToProcess)
{
  ItemsWrapper wrapper = new ItemsWrapper(folder);
  allWrappers.Add(wrapper);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...