Outlook.ItemsEvents Получить mailItem при добавлении к отправленным письмам - PullRequest
0 голосов
/ 31 мая 2018

У меня есть надстройка Outlook с двумя лентами (для чтения и составления писем).

Я создал событие для получения электронного письма, когда оно отправляется отправленным элементам после его отправки.

Это мой ThisAddIn.cs

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    OutlookApplication = Application as Outlook.Application;
    OutlookInspectors = OutlookApplication.Inspectors;
    OutlookInspectors.NewInspector +=
        new Outlook.InspectorsEvents_NewInspectorEventHandler(OutlookInspectors_NewInspector);

    var sentBoxItems =
        this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items;
    sentBoxItems.ItemAdd +=
        new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemsAdd);
}

private void Items_ItemsAdd(object Item)
{
    if (Item != null)
        Helpers.SaveMailSent((Outlook.MailItem)Item); // Here do stuff to save mail
}

Я пытался получить событие, когда нажата кнопка «Отправить», но mailItem обнуляется.

Теперь яя пытаюсь получить сообщение, когда новое сообщение отправлено и оно отправлено в отправленную папку.

Проблема заключается в том, что событие не запускается каждый раз при отправке письма (иногда оно выполняется, но иногда нет)

1 Ответ

0 голосов
/ 31 мая 2018

Прежде всего, вам нужно сохранить исходный объект живым, т.е. предотвратить его разрушение или освобождение.Чтобы реализовать это, вы должны объявить исходный объект на уровне класса:

 private Outlook.Items sentBoxItems = null;

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    OutlookApplication = Application as Outlook.Application;
    OutlookInspectors = OutlookApplication.Inspectors;

    sentBoxItems =
        this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items;
    sentBoxItems.ItemAdd +=
        new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemsAdd);
}

private void Items_ItemsAdd(object Item)
{
    if (Item != null)
        Helpers.SaveMailSent((Outlook.MailItem)Item); // Here do stuff to save mail
}

Также обратите внимание на следующие факты:

  1. Свойство DeleteAfterSubmit класса MailItem позволяет установить логическое значение, которое равно True, если копия почтового сообщения не сохраняется после отправки, и False, если копия сохраняется в папке «Отправленные».Таким образом, отправленный элемент никогда не будет добавлен в папку «Отправленные».
  2. Событие ItemAdd не вызывается, если в папку добавляется несколько элементов (обычно более шестнадцати).Это известная проблема в OOM.
...