Outlook邮件项实际关闭时的事件

时间:2013-02-17 08:47:32

标签: .net events outlook interop

我有一个使用Microsoft.Office.Interop.Outlook互操作程序集的.NET应用程序。

应用程序打开一个新的Outlook MailItem,然后想要记录一个日志条目如果发送了电子邮件(通过用户点击发送),或者知道是否它在没有发送的情况下关闭(保存为草稿或丢弃)。

通过订阅ItemEvents_10_Event.Send事件,可以轻松完成项目发送时的捕获。

但是,为了捕获项目关闭时,我只能找到ItemEvents_10_Event.Close事件。但是,当项目为 时,此事件会触发,而当项目为 ed 时,会触发。更糟糕的是,用户在收到活动后仍有机会取消操作。会发生什么:

  1. 我的应用程序会打开新的MailItem
  2. 用户点击关闭按钮。
  3. ItemEvents_10_Event.Close被解雇
  4. 控制返回到Outlook,其中然后显示Outlook的“您要保存更改(是/否/取消)”对话框。
  5. 用户按下取消。 (我没有收到通知)
  6. 然后用户可以随心所欲,包括发送电子邮件或再次关闭电子邮件。
  7. 有没有办法:

    • 订阅某个活动,该活动会在项目结束时通知我 ed ,而非关闭? (最佳)
    • 或者,在上述场景中知道用户何时按下取消? (一个黑客但它会做)

    如果我能够区分电子邮件已关闭并被丢弃 vs 保存为草稿,则可获得奖励。

1 个答案:

答案 0 :(得分:4)

使用检查员关闭事件:

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发送事件。如果已经解雇,那么"关闭"否则,用户关闭窗口而不发送电子邮件。