.net VSTO展望:区分手动发送和自动发送

qyswt5oh  于 2023-04-13  发布在  .NET
关注(0)|答案(2)|浏览(104)

是否有任何方法可以识别ItemSend事件是由于从撰写窗口发送邮件而触发的,还是由于Outlook本身执行的自动发送(例如,当发送发件箱中的邮件时)而触发的?

ukdjmx9f

ukdjmx9f1#

不使用Application.ItemSend事件,而使用MailItem.Send事件。您可以捕获Application.Inspectors.NewInspector事件以挂钩到新的Inspector,然后在Inspector.CurrentItem上设置事件处理程序。请记住,可以打开多个检查器。当检查器关闭时,您需要取消订阅事件(Inspector.Close事件)。您可以对内联项目(Explorer.InlineResponse/InlineResponseClose事件)执行相同的操作。
请记住,Application.ItemSend事件在用户或以编程方式发送消息时触发,当异步消息提交完成一段时间后将项目从发件箱文件夹中移出时,它不会触发。
你可以看到在OutlookSpy中哪些事件被触发以及何时被触发(我是它的作者)-例如,单击Application按钮,转到Events选项卡并查看事件被触发。

dtcbnfnu

dtcbnfnu2#

不,ItemSend事件不提供此类信息。此外,您可能会发现Outlook项目的Send事件的工作方式相同,当用户为项目选择Send操作时,或为项目调用Send方法时,它会被激发,该项目是父对象的示例。为了处理项目级事件,您可以Implement a wrapper for inspectors and track item-level events in each inspector。因此,您将知道何时触发事件(如果之前打开了任何检查器)。
发件箱中的消息发送时)
这两个事件(ItemSendSend)都是在项目提交时和移动到发件箱文件夹之前触发的。但您可以尝试检查项目的父文件夹,但这不能给予您任何明确的答案。
如果您真的需要知道用户何时单击了Send按钮,您可以考虑使用Windows API技术(如子类化)在Outlook中单击“发送”按钮。同样的机制可用于处理Outlook中的键盘快捷键。

相关问题