Проверять отправленную почту, когда Outlook не полностью загружен - PullRequest
1 голос
/ 05 февраля 2020

У меня сейчас проблема с проверкой, отправлено ли электронное письмо или нет. До сих пор я пробовал эти три метода подписки на такое событие:

  • application.ItemSend += ApplicationOnItemSend;
  • application.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderOutbox).Items.ItemAdd += ItemsOnItemAdd;
  • application.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail).Items.ItemAdd += ItemsOnItemAdd2;

Все три из них прекрасно работают, когда Outlook полностью открыт, моя проблема возникает, когда вы открываете файл msg с Outlook, который не открывается в фоновом режиме. В этих случаях все, что вы видите, это окно «новое сообщение», и когда вы отправляете почту оттуда, ни одно из этих событий не запускается. Даже если установлен флажок, что письма должны отправляться как можно скорее при наличии сетевого подключения, почта помещается в папку «Исходящие», и при следующем полном запуске Outlook есть одна почта, которая была помещена в папку «Исходящие», но не отправлена ​​полностью. Даже на компьютерах моих коллег без установленного надстройки для Outlook и того же набора параметров (как и должно быть в стандарте) существует та же проблема, что и почта, которая просто помещается в папку «Исходящие».
Я также проверил Я пытаюсь подписаться на эти события, и ни один из моих обработчиков событий не содержит кода, который блокирует фоновые потоки (например, когда я использую MessageBox.Show() для целей отладки). Так что нет никакой видимой причины, по которой мой код мешает отправке почты.
Точка, в которой я подписываюсь на эти события, также, похоже, не имеет значения. Обычно я подписываюсь при запуске надстройки, но этот метод не вызывается при открытии файла msg. Поэтому я перенес подписку на событие загрузки ленты. Событие load печатает мои отладочные сообщения, указывающие на то, что метод был вызван, но события ItemSend / ItemAdd по-прежнему не запускаются после нажатия кнопки «отправить».
Все это только из-за того, что Outlook работает со сбоями или есть способ, которым я мог бы проверить наличие почта отправляется из окна "новое сообщение"?

1 Ответ

0 голосов
/ 05 февраля 2020

Во-первых, последние два четных обработчика не будут работать - объект, вызывающий событие, должен оставаться в живых. В вашем случае вы устанавливаете обработчики событий на неявную переменную, которая будет освобождена, купите сборщик мусора при следующем запуске через несколько секунд. Коллекция Items, вызывающая события, должна храниться в отдельной переменной gloab l (на уровне класса).

Во-вторых, не трогайте сообщения в папке «Исходящие» - это прерывает отправку.

...