You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSTO Outlook:如何区分ItemSend事件的手动与自动触发场景

区分Outlook ItemSend事件的手动发送与自动发送

可以通过以下两种核心方法来区分ItemSend事件的触发来源:

  • 检查激活的Inspector撰写窗口
    用户手动在撰写窗口发送邮件时,Outlook会存在一个激活的Inspector窗口,且该窗口的CurrentItem就是待发送的邮件对象。而Outlook自动发送场景(如发件箱积压邮件自动发送、延迟邮件到期发送)触发事件时,通常没有激活的Inspector窗口。

    示例VBA实现代码:

    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
        Dim activeInspector As Outlook.Inspector
        Set activeInspector = Application.ActiveInspector
        
        If Not activeInspector Is Nothing Then
            If activeInspector.CurrentItem Is Item Then
                ' 触发源:用户手动在撰写窗口发送
                Debug.Print "手动发送触发"
            Else
                ' 触发源:非撰写窗口的自动/程序发送
                Debug.Print "自动发送触发"
            End If
        Else
            ' 触发源:无激活窗口的自动发送
            Debug.Print "自动发送触发"
        End If
    End Sub
    
  • 结合Sent属性辅助判断
    自动发送的邮件在触发ItemSend事件时,Sent属性通常已被标记为True(Outlook准备发送时会预先设置该属性);而手动发送的邮件在事件触发阶段,Sent属性仍为False,直到发送完成后才会变更。这个方法建议和Inspector检查配合使用,避免特殊场景下的误判。

    代码片段示例:

    If TypeName(Item) = "MailItem" Then
        If Item.Sent = False Then
            ' 倾向于手动发送场景
        Else
            ' 倾向于自动发送场景
        End If
    End If
    

注意:通过VBA代码主动调用Item.Send()触发的事件,不属于上述两种场景,需根据业务需求单独处理。

内容的提问来源于stack exchange,提问作者Willy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:22:39