2013-02-17 58 views
0

我有一個使用Microsoft.Office.Interop.Outlook互操作程序集的.NET應用程序。Outlook郵件項目實際關閉時的事件

應用程序將打開一個新的Outlook MailItem,然後想記錄日誌條目如果電子郵件被髮送(通過用戶點擊發送),或知道它不發送關閉(或保存爲草稿或丟棄)。

通過訂閱ItemEvents_10_Event.Send事件,捕獲物品發送時可以輕鬆完成。

但是,爲了捕獲物品何時關閉,我只能找到ItemEvents_10_Event.Close事件。但是,此事件在項目關閉時觸發ing,而不是項目關閉時ed。更糟糕的是,用戶仍然有機會在之後取消動作。會發生什麼是:

  1. 我的應用程序打開新的MailItem
  2. 用戶單擊關閉按鈕。
  3. ItemEvents_10_Event.Close被解僱
  4. 控制權返回到Outlook,其中然後顯示Outlook的「您要保存更改(是/否/取消)」對話框。
  5. 用戶按下取消。 (我沒有收到通知)
  6. 用戶然後可以做他們想做的任何事情,包括髮送電子郵件或再次關閉它。

有沒有辦法要麼:

  • 訂閱這個事件,通知我,當該項目是CLOS ,不關閉? (最好)
  • 或者,知道用戶何時在上述場景中按Cancel? (一劈,但它會做)

獎金將是,如果我能區分如果電子郵件關閉和廢棄 VS保存爲草稿

+0

檢查草稿文件夾和發送的文件夾如何?這將消除捕捉事件的需要。我認爲每個獨特的項目都有一些可以跟蹤的UUID。 – 2013-02-17 08:51:53

+0

@BurhanKhalid這是一個不錯的選擇,我想我必須檢查*所有*草稿文件夾和發送的項目文件夾,如果用戶有多個。我怎麼能知道用戶何時決定關閉並放棄該消息? – 2013-02-17 08:54:28

+0

如果郵件被丟棄,它將不在草稿或已發送郵件中;你甚至不會在刪除的項目文件夾中找到它。 – 2013-02-17 08:57:36

回答

2

使用檢查關閉事件:

inspector = mailItem.GetInspector; 
((InspectorEvents_10_Event) inspector).Close += CloseEventHandler; 

void CloseEventHandler(){ 
    //execute only when email window is closed or closing 
    // without problem with confirmation dialog (yes/no/cancel) 
} 

要解決關閉關閉問題,您可以檢查的MailItem發送事件。如果已經觸發,則「關閉」,否則,用戶關閉窗口而不發送電子郵件。

+0

這對我有用 – nardnob 2017-03-30 18:49:57