Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Outlook邮件项目实际关闭时发生的事件_.net_Events_Outlook_Interop - Fatal编程技术网

.net Outlook邮件项目实际关闭时发生的事件

.net Outlook邮件项目实际关闭时发生的事件,.net,events,outlook,interop,.net,Events,Outlook,Interop,我有一个.NET应用程序,它使用Microsoft.Office.Interop.OutlookInterop程序集 应用程序打开一个新的OutlookMailItem,然后希望记录电子邮件是否已发送(通过用户单击“发送”)的日志条目,或者知道电子邮件是否已在未发送的情况下关闭(保存为草稿或丢弃) 通过订阅事件,可以很容易地捕获项目的发送时间 但是,为了在项目关闭时捕获,我只能找到事件。但是,此事件在项目为closing时激发,而不是在项目为closed时激发。更糟糕的是,在我收到事件后,用户仍

我有一个.NET应用程序,它使用Microsoft.Office.Interop.OutlookInterop程序集

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

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

但是,为了在项目关闭时捕获,我只能找到事件。但是,此事件在项目为closing时激发,而不是在项目为closed时激发。更糟糕的是,在我收到事件后,用户仍然有机会取消操作。发生的情况是:

  • 我的应用程序打开新的
    邮件项目
  • 用户单击关闭按钮
  • ItemEvents\u 10\u事件。关闭
    被触发
  • 控件返回Outlook,Outlook将显示Outlook的“是否保存更改(是/否/取消)”对话框
  • 用户按下“取消”。(我没有接到通知)
  • 然后用户可以做任何他们想做的事情,包括发送电子邮件或再次关闭它
  • 有没有办法:

    • 订阅一个事件,当项目处于closed状态而未关闭时通知我?(最佳)
    • 或者,知道在上述场景中用户何时按下取消键吗?(一个黑客,但它会做)

    如果我可以区分电子邮件是否关闭和丢弃,与另存为草稿的电子邮件不同,则会获得奖金。

    使用inspector close事件:

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

    使用inspector关闭事件:

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

    检查草稿文件夹和已发送邮件文件夹如何?它将消除捕捉事件的需要。我认为每个唯一的项目都有一些可以跟踪的UUID。@BurhanKhalid这是一个不错的选择,如果用户有多个,我想我必须检查所有草稿文件夹和已发送项目文件夹。我怎么知道用户何时决定关闭并丢弃邮件?如果邮件被丢弃,它将不会出现在草稿或已发送的邮件中;您甚至在“已删除邮件”文件夹中都找不到它。@BurhanKhalid,这样我就可以轮询检查器是否仍处于打开状态,如果没有,则它将被丢弃。听起来像是个黑客,但谢谢。如果没有人有更好的选择,我会选择这个。检查草稿文件夹和已发送邮件文件夹怎么样?它将消除捕捉事件的需要。我认为每个唯一的项目都有一些可以跟踪的UUID。@BurhanKhalid这是一个不错的选择,如果用户有多个,我想我必须检查所有草稿文件夹和已发送项目文件夹。我怎么知道用户何时决定关闭并丢弃邮件?如果邮件被丢弃,它将不会出现在草稿或已发送的邮件中;您甚至在“已删除邮件”文件夹中都找不到它。@BurhanKhalid,这样我就可以轮询检查器是否仍处于打开状态,如果没有,则它将被丢弃。听起来像是个骇客,但谢谢你。如果没有人有更好的选择,我会选择这个。