Страницы

Поиск по вопросам

четверг, 29 ноября 2018 г.

Уведомление о новом письме в Outlook

Имеется плагин в outlook для уведомления и новом письме в дополнительном ящике. Но проблема в том что когда приходит новое письмо и Outlook находится в свёрнутом состоянии то уведомлении не отображается
Код ниже:
private void ThisAddIn_Startup(object sender, EventArgs e) {
var ns = Application.GetNamespace("MAPI"); const string recipientName = "mymail@mydomain.com";
var recip = ns.CreateRecipient(recipientName); recip.Resolve();
if (!recip.Resolved) return; var inboxFolder = ns.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderInbox); inboxFolder.Items.ItemAdd += InboxFolderItemAdded;
}
private static void InboxFolderItemAdded(object item) { if (item is Outlook.MailItem) { MessageBox.Show("Новое сообщение", "new message", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
Прошу оказать помощь в решении проблемы


Ответ

Последуйте официальному примеру: сделайте Items полем. Проблема в том, что подписка действует до тех пор, пока объект жив. А после выхода из метода ThisAddIn_Startup() переменная inboxFolder и, соответственно, поле Items становится доступным для сборки мусора. Также имейте в виду, что согласно документации на это событие, оно не триггерится, если приходит сразу много сообщений (насколько много -- не уточняется :)).
Outlook.Items _items;
private void ThisAddIn_Startup(object sender, EventArgs e) {
var ns = Application.GetNamespace("MAPI"); const string recipientName = "mymail@mydomain.com";
var recip = ns.CreateRecipient(recipientName); recip.Resolve();
if (!recip.Resolved) return; var inboxFolder = ns.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderInbox); _items = inboxFolder.Items; _items.ItemAdd += InboxFolderItemAdded;
}
private static void InboxFolderItemAdded(object item) { if (item is Outlook.MailItem) { MessageBox.Show("Новое сообщение", "new message", MessageBoxButtons.OK, MessageBoxIcon.Information); } }

Комментариев нет:

Отправить комментарий