Outlook插件开发:回复全部时检测Bcc触发警告
VB.NET Outlook插件:回复全部时Bcc警告实现方案
1. 捕获“回复全部”事件
要触发回复全部的处理逻辑,需订阅Outlook MailItem 的 ReplyAll 事件。通过监听Explorer的选中项变化,对当前选中的邮件绑定事件:
Imports Outlook = Microsoft.Office.Interop.Outlook Public Class ThisAddIn Private WithEvents currentMail As Outlook.MailItem Private Sub ThisAddIn_Startup() Handles Me.Startup AddHandler Application.ActiveExplorer.SelectionChange, AddressOf Explorer_SelectionChange End Sub Private Sub Explorer_SelectionChange() ' 清除之前绑定的事件,避免内存泄漏 If currentMail IsNot Nothing Then RemoveHandler currentMail.ReplyAll, AddressOf MailItem_ReplyAll currentMail = Nothing End If ' 获取当前选中的单封邮件 Dim selection As Outlook.Selection = Application.ActiveExplorer.Selection If selection.Count = 1 AndAlso TypeOf selection(1) Is Outlook.MailItem Then currentMail = CType(selection(1), Outlook.MailItem) AddHandler currentMail.ReplyAll, AddressOf MailItem_ReplyAll End If End Sub Private Sub MailItem_ReplyAll(ByVal Response As Object, ByRef Cancel As Boolean) ' 回复全部触发时执行检测逻辑 End Sub
2. 检测原邮件中用户是否在Bcc列表
在MailItem_ReplyAll事件中,直接操作原邮件对象currentMail(而非生成的回复草稿Response),遍历收件人集合判断当前用户是否在Bcc组:
Private Sub MailItem_ReplyAll(ByVal Response As Object, ByRef Cancel As Boolean) Dim currentUserEmail As String = Application.Session.CurrentUser.Address Dim isInBcc As Boolean = False ' 遍历原邮件的所有收件人 For Each recip As Outlook.Recipient In currentMail.Recipients If recip.Type = Outlook.OlMailRecipientType.olBCC Then ' 匹配邮箱地址(可按需调整为匹配显示名称) If recip.Address.Equals(currentUserEmail, StringComparison.OrdinalIgnoreCase) Then isInBcc = True Exit For End If End If Next If isInBcc Then ' 弹出警告提示 MsgBox("注意:你是原邮件的密送收件人,回复全部可能会暴露你的身份!", MsgBoxStyle.Exclamation) End If End Sub
额外提示
- 右键菜单、快捷键触发的回复全部操作,上述事件同样能捕获;
- 若需处理Exchange环境下的地址格式差异,可使用
recip.AddressEntry.GetExchangeUser().PrimarySmtpAddress获取标准SMTP地址; - 若要阻止默认回复全部行为,可将
Cancel参数设为True。
内容的提问来源于stack exchange,提问作者ThaiDorito
相关产品推荐
相关产品推荐

