#c_sharp #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); } } Прошу оказать помощь в решении проблемы
Ответы
Ответ 1
Последуйте официальному примеру: сделайте 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); } }
Комментариев нет:
Отправить комментарий