我正在尝试为Outlook2007中的共享邮箱创建弹出邮件警报。以下代码不起作用。为什么?
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!");
}发布于 2012-03-13 21:49:59
为了让您的事件处理程序在垃圾回收中幸存下来-您需要通过将包含您的事件的对象添加为私有成员变量来确保它们保持活动状态。尝试添加一个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;
}https://stackoverflow.com/questions/9683894
复制相似问题