2012-03-13 4 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

응용 프로그램은 기본 사서함의 새 메일에만 가입합니다. 추가 사서함에는 작동하지 않았습니다. –

+0

@ShnerkaZoid - 정확합니다. - 'NewEmailEx'는 기본 편지함에서만 작동합니다 (위의 편집 참조). – SliverNinja

+0

그것은 일했다! 고맙습니다! –

관련 문제