2012-03-13 95 views
2

我正在尝试为Outlook 2007中的共享邮箱创建一个弹出邮件提醒。 以下代码不起作用。为什么?共享邮箱Outlook 2007的新邮件提醒

private Microsoft.Office.Interop.Outlook._Explorers Explorers; 
private Microsoft.Office.Interop.Outlook.NameSpace outlookNamespace; 
private Microsoft.Office.Interop.Outlook.MAPIFolder mFolder; 
private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Explorers = this.Application.Explorers;   
    outlookNamespace = this.Application.GetNamespace("MAPI");   
    mFolder = outlookNamespace.Folders["Mailbox -AdditionalMailBox"].Folders["Inbox"]; 
    mFolder.Application.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx); 
} 
private void Application_NewMailEx(string EntryID) 
{ 
    MessageBox.Show("New MailReceived!"); 
} 

回答

0

为了使您的事件处理程序的生存垃圾收集 - 您需要确保包含您的事件对象将其添加为一个私有成员变量维持生命。尝试添加Application私人类变量,您的事件订阅应该可以正常工作。有关更多详情,请参阅related SO post

private Microsoft.Office.Interop.Outlook.Application application; 
private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    application = this.Application; 
    Explorers = application.Explorers;   
    // ...   
    application.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx); 
} 

你发现的另一个问题是,NewMailEx只火了你的主邮箱 - 而不是次要邮箱为confirmed in this forum post。您将需要依靠Folder.Items事件ItemAdd

private Outlook.Items mFolderItems; 
private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    // ... 
    mFolderItems = mFolder.Items; // avoid GC for ItemAdd event 
    mFolderItems.ItemAdd += new ItemsEvents_ItemAddEventHandler(mFolder_ItemAdd); 
    // ... 
}   
private void mFolder_ItemAdd(object addedItem) 
{ 
    Outlook.MailItem newItem = addedItem as Outlook.MailItem; 
} 
+0

应用程序仅在主邮箱中订阅新邮件。它不适用于额外的邮箱。 – 2012-03-13 14:04:01

+0

@ShnerkaZoid - 你是对的 - 'NewEmailEx'只适用于主邮箱,请参阅上面的编辑。 – SliverNinja 2012-03-13 14:26:25

+0

它的工作!谢谢! – 2012-03-14 08:45:41

相关问题