Outlook.ItemsEvents_ItemAddEventHandler (items_ItemAdd), вызывающий все папки - PullRequest
1 голос
/ 15 марта 2019

В зависимости от каких-либо условий я пытаюсь скопировать новое письмо (только во входящие) в другую папку.Папка находится на том же уровне, что и другие папки по умолчанию, такие как Входящие, Исходящие, Черновики.Ниже приведен мой код:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Debug.WriteLine(ThisAddIn.isAddInOn);

    outlookNameSpace = this.Application.GetNamespace("MAPI");
    inbox = outlookNameSpace.GetDefaultFolder(
                Microsoft.Office.Interop.Outlook.
                OlDefaultFolders.olFolderInbox);

    items = inbox.Items;
    items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
}

Ниже приведен код для items_ItemAdd:

void items_ItemAdd(object Item)
{
    Outlook.MailItem mail = (Outlook.MailItem)Item;
    Debug.WriteLine("mail");
    Debug.WriteLine(mail == null);

    if (mail!= null)
        {#code to move mail to particular folder}

Я не написал полный код функции.Потому что эта функция не моя проблема.Моя проблема items_ItemAdd вызывается несколько раз.Например:

  1. Когда придет новое электронное письмо
  2. Когда электронное письмо будет перемещено в другую папку.

Я не хочу EventHandlerчтобы вызвать на приведенном выше втором примере.И когда он вызывается во второй раз, функция items_ItemAdd получает и очищает почтовый объект.Таким образом, я получаю следующее исключение:

Исключение:

'System.Runtime.InteropServices.COMException' in OutlookAddIn2.dll
System.Runtime.InteropServices.COMException (0xBDD40107): The operation failed.
   at Microsoft.Office.Interop.Outlook._MailItem.get_Body()
   at OutlookAddIn2.ThisAddIn.items_ItemAdd(Object Item)

Это

inbox = outlookNameSpace.GetDefaultFolder(
    Microsoft.Office.Interop.Outlook.
    OlDefaultFolders.olFolderInbox);

, указывающее на все папки?

...