Надстройка Outlook VSTO - обработка MailItem до выполнения правил OLK - PullRequest
0 голосов
/ 21 апреля 2020

В моем дополнении к OLK 2016 я определил

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(ThisApplication_NewMail);
}

В ThisApplication_NewMail у меня есть некоторый код, который выполняет некоторую категоризацию с этим письмом, когда оно приходит, в зависимости от отправителя и тому подобных вещей. Это работает просто отлично. Однако в OLK я также определил некоторые правила типа «переместить электронную почту» (почта перемещается в папку, вложенную в папку «Входящие», а не вне почтового ящика), которые иногда применяются к сообщениям, которые должны быть классифицированы моим надстройкой. , Точки останова на входе метода не происходит, что указывает на то, что определенные вручную правила обрабатывают почту перед моим кодом (из-за отсутствия более информированного технического объяснения).

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

Один из способов обойти это - просто перечислить все папки в папке «Входящие» и запускать мои IF-файлы там, однако, это может привести к снижению производительности, так как нужно обработать много непрочитанных писем.

У любого есть лучшее представление о том, как добиться моего сценарий? Достаточно указателей, не обязательно запрашивая код.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Прежде всего, событие NewMail не дает вам контекста того, какое письмо получено. Он запускается при получении одного или нескольких новых сообщений электронной почты в папке «Входящие». Если вы хотите обрабатывать элементы, поступающие в папку «Входящие», рассмотрите возможность использования события ItemAdd в коллекции элементов в папке «Входящие». Событие ItemAdd передает ссылку на каждый элемент, добавляемый в папку.

Кроме того, я бы предложил попробовать событие NewMailEx , которое вызывается один раз для каждого полученного элемента, который обрабатывается Microsoft Outlook. Событие NewMailEx происходит, когда новое сообщение поступает в папку «Входящие» и до обработки правила клиента. Вы можете использовать идентификатор записи, возвращенный в массиве EntryIDCollection, чтобы вызвать метод NameSpace.GetItemFromID и обработать элемент. Используйте этот метод с осторожностью, чтобы минимизировать влияние на производительность Outlook. Однако, в зависимости от настроек на клиентском компьютере, после поступления нового сообщения в папку «Входящие» такие процессы, как фильтрация нежелательной почты и правила клиента, которые перемещают новое сообщение из папки «Входящие» в другую папку, могут происходить асинхронно. Не следует полагать, что после возникновения этих событий вы всегда получите увеличение количества элементов в папке «Входящие» на один элемент.

0 голосов
/ 21 апреля 2020

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

Попробуйте настроить Items.ItemAdd обработчики событий для папки «Входящие», нежелательной почты и всех папок, которые правила указывают на.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...