You need to enable JavaScript to run this app. 如何使用VB.NET或C#读取Outlook阅读窗格中的收发件人?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VB.NET或C#读取Outlook阅读窗格中的收发件人?

Outlook 阅读窗格收发件人信息获取适配方案

失效原因说明

原有代码仅能在独立弹出的邮件窗口场景运行,核心问题是代码依赖的ActiveInspector对象,仅对应Outlook中独立打开的悬浮窗口实例。停靠在主界面的阅读窗格内展示的邮件,不会生成对应的Inspector对象,自然无法通过该路径读取收发件人数据。

通用适配实现逻辑

要同时覆盖独立窗口、停靠阅读窗格两种场景,按照固定优先级分支判断取值即可:

  • 优先判断是否存在激活的Inspector,匹配独立弹出邮件窗口的场景
  • 无激活Inspector时,从主界面对应的Explorer对象中读取当前选中的邮件项——该选中项就是阅读窗格实时展示的内容
  • 所有取值环节增加类型校验,避免选中日历、联系人、任务等非邮件项时触发类型转换异常

参考实现代码

C# 版本

// 初始化Outlook应用实例
var olApp = new Outlook.Application();
Outlook.MailItem currentMail = null;

// 分支1:处理独立弹出的邮件窗口
if (olApp.ActiveInspector() != null)
{
    if (olApp.ActiveInspector().CurrentItem is Outlook.MailItem standaloneMail)
    {
        currentMail = standaloneMail;
    }
}
// 分支2:处理阅读窗格展示的邮件
else if (olApp.ActiveExplorer() != null && olApp.ActiveExplorer().Selection.Count > 0)
{
    if (olApp.ActiveExplorer().Selection[1] is Outlook.MailItem explorerMail)
    {
        currentMail = explorerMail;
    }
}

// 读取目标收发件人信息
if (currentMail != null)
{
    var info = $"发件人:{currentMail.SenderName}\n收件人:{currentMail.To}\n抄送:{currentMail.CC}";
    MessageBox.Show(info);
}

VB.NET 版本

' 初始化Outlook应用实例
Dim olApp As Outlook.Application = CreateObject("Outlook.Application")
Dim currentMail As Outlook.MailItem = Nothing

' 分支1:处理独立弹出的邮件窗口
If olApp.ActiveInspector() IsNot Nothing Then
    If TypeOf olApp.ActiveInspector().CurrentItem Is Outlook.MailItem Then
        currentMail = CType(olApp.ActiveInspector().CurrentItem, Outlook.MailItem)
    End If
' 分支2:处理阅读窗格展示的邮件
ElseIf olApp.ActiveExplorer() IsNot Nothing AndAlso olApp.ActiveExplorer().Selection.Count > 0 Then
    If TypeOf olApp.ActiveExplorer().Selection(1) Is Outlook.MailItem Then
        currentMail = CType(olApp.ActiveExplorer().Selection(1), Outlook.MailItem)
    End If
End If

' 读取目标收发件人信息
If currentMail IsNot Nothing Then
    MsgBox($"发件人:{currentMail.SenderName}{vbCrLf}收件人:{currentMail.To}{vbCrLf}抄送:{currentMail.CC}")
End If

注意事项

  • 通过ActiveExplorer().Selection获取的选中项,与阅读窗格展示内容实时同步,不存在取值滞后问题
  • 若需要获取纯邮箱地址而非发件人显示名,可直接读取currentMail.SenderEmailAddress属性;需要区分收件人/抄送人/密送人时,可遍历currentMail.Recipients集合按类型筛选
  • 实际部署时需要对应项目引入Outlook的Interop程序集引用,避免COM对象释放不及时导致Outlook进程残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 18:36:09