C # Outlook обрабатывает ReportItems, как это произошло? - PullRequest
0 голосов
/ 30 мая 2019

Я делаю плагин Outlook в C #, который собирает некоторую информацию о работоспособности системы и регистрирует ее и отправляет на несколько адресов электронной почты наших администраторов и инструментов автоматического анализа.

В основном это работает хорошо, но если какой-то адрес становится недостижимым по какой-либо причине, пользователи раздражаются из-за ReportItems (отчеты о недоставке), заполняющих их экземпляры Outlook.Я могу придумать несколько способов справиться с этой ситуацией, но я не знаю, как реализовать любой из них.Не могли бы вы помочь мне?

Возможные решения:

  1. Проверьте, доступен ли адрес, перед отправкой электронной почты.Но мне нужно сделать это с помощью функций Outlook, поскольку некоторые адреса могут быть доступны только нашему Exchange-серверу и недоступны для клиентов.Как вы думаете?

  2. Добавьте некоторое свойство в созданный MailItems, чтобы Exchange Server не отправлял ReportItems, если MailItem не был доставлен.Но кажется, что MailItem объект не имеет таких свойств, может быть, есть MAPI, который я мог бы установить с помощью PropertyAccessor или что-то еще.Как вы думаете?

  3. Перехватывайте ReportItems, когда они подключаются к моему плагину Outlook, и удаляйте их до того, как это раздражает пользователей.Но я пробовал Application.NewMailEx событие, и оно вообще не вызывается на ReportItems.Я пробовал InboxFolder.ItemAdd событие, и оно вызывается только для 40-50% от ReportItems.Я не очень понимаю причину этого, может быть, я здесь что-то не так делаю.Как вы думаете?

PS: Я понимаю, что вся архитектура этой штуки немного некрасива, но команда менеджеров настаивает, что так и должно быть, поэтому я 'Я хотел бы попросить вас ответить на вопрос как есть.Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Гарантированные способы, описанные Эриком, слишком сложны для вас.Я не думаю, что вам нужно платить столько усилий и реализовывать их, чтобы просто обрабатывать элементы отчета.Кроме того, они требуют подключения к Интернету и не применяются к учетным записям, не относящимся к Exchange.Забудьте о них!

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

Но я пробовал событие Application.NewMailEx, и оно вообще не вызывается для ReportItems.

Это странно!Какой код у вас есть в обработчике событий NewMailEx?

Также вы можете попытаться обработать событие NewMail класса RDOSession (см. Погашение). Это неуправляемая оболочка для Extended MAPI, котораяпредоставляет уведомление NewMail, которое запускается для всех видов предметов.См. События уведомлений MAPI для получения дополнительной информации.

В следующих сериях статей описаны возможные способы обработки входящих сообщений:

0 голосов
/ 04 июня 2019
  1. AFAIK Не существует надежного способа определить, существует ли какое-либо данное письмо перед отправкой на этот адрес. Потому что спамеры.
  2. Вы не можете контролировать отчеты о недоставке со стороны клиента (или объектной модели Outlook) - этим может управлять только почтовый сервер, на котором находится адрес, на который вы отправляете.
  3. Событие ItemAdd, как известно, ненадежно. Помимо периодического сканирования папок до и после, единственным гарантированным способом эффективной обработки изменений в папке являются только почтовые ящики Exchange - см. Redemption RDOFolderSynchronizer . Другой вариант - использовать веб-службы Exchange ( подписка на уведомления и, возможно, транспортные агенты ).
...