1

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

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

通过订阅ItemEvents_10_Event.Send事件可以很容易地捕获发送项目的时间。

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

  1. 我的应用程序打开了新的MailItem.
  2. 用户单击关闭按钮。
  3. ItemEvents_10_Event.Close被解雇
  4. 控制权返回到 Outlook,然后显示 Outlook 的“是否要保存更改(是/否/取消)”对话框。
  5. 用户按下取消。(我没有收到通知)
  6. 然后,用户可以做任何他们想做的事情,包括发送电子邮件或再次关闭它。

有没有办法:

  • 订阅一个在项目关闭而不是关闭时通知我的事件(最好的)
  • 或者,知道用户在上述场景中何时按下取消?(一个黑客,但它会做)

如果我可以区分电子邮件是关闭并丢弃还是另存为草稿,那将是一个奖励。

4

1 回答 1

6

使用检查器关闭事件:

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 发送事件。如果它已触发,则“关闭”,否则,用户关闭窗口而不发送电子邮件。

于 2016-11-29T09:10:49.723 回答