Имеется плагин в 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);
}
}
Комментариев нет:
Отправить комментарий