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

VB.NET连接Outlook及访问文件夹求助:为非邮件项添加创建日期

VB.NET 连接Outlook及获取文件夹示例

第一步:解决Outlook命名空间引用问题

  • 打开Visual Studio,右键你的VB.NET项目 → 「添加」→「引用」
  • 切换到「COM」标签页,找到Microsoft Outlook xx.x Object Library(xx.x对应你安装的Outlook版本,比如2019对应16.0)
  • 勾选后点击「确定」,即可在代码中正常使用Outlook命名空间

第二步:基础连接与文件夹遍历示例代码

Imports Outlook = Microsoft.Office.Interop.Outlook

Module OutlookFolderDemo
    Sub Main()
        ' 初始化Outlook应用实例
        Dim outlookApp As New Outlook.Application()
        ' 获取MAPI命名空间(Outlook核心数据容器)
        Dim mapiNs As Outlook.NameSpace = outlookApp.GetNamespace("MAPI")

        ' 触发Outlook登录(未运行时弹出登录框,已运行则复用当前会话)
        mapiNs.Logon()

        Try
            ' 获取当前邮箱的根文件夹(包含所有默认/自定义文件夹)
            Dim rootFolder As Outlook.Folder = mapiNs.Folders(1)

            Console.WriteLine("所有文件夹列表:")
            ' 递归遍历所有层级文件夹
            TraverseAllFolders(rootFolder)

        Catch ex As Exception
            Console.WriteLine($"执行错误:{ex.Message}")
        Finally
            ' 释放COM资源,避免Outlook后台进程残留
            mapiNs.Logoff()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mapiNs)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(outlookApp)
            mapiNs = Nothing
            outlookApp = Nothing
        End Try

        Console.ReadLine()
    End Sub

    ' 递归遍历文件夹的辅助方法
    Private Sub TraverseAllFolders(targetFolder As Outlook.Folder)
        ' 输出当前文件夹名称
        Console.WriteLine($"- {targetFolder.Name}")

        ' 遍历当前文件夹的所有子文件夹
        For Each subFolder As Outlook.Folder In targetFolder.Folders
            TraverseAllFolders(subFolder)
        Next
    End Sub
End Module

后续处理非邮件项的思路

掌握基础结构后,要给非邮件项添加创建日期,可按以下逻辑扩展:

  1. 在遍历文件夹时,新增对文件夹内项目的遍历逻辑
  2. 通过Item.Class属性判断项目类型(排除olMail类型,即邮件项)
  3. 读取系统自带的CreationTime属性(只读),若需添加自定义字段,可通过UserProperties创建自定义属性并赋值

示例扩展片段:

' 在TraverseAllFolders方法中添加项目遍历逻辑
For Each item As Outlook.Object In targetFolder.Items
    ' 筛选非邮件项
    If item.Class <> Outlook.OlObjectClass.olMail Then
        Dim baseItem As Outlook._Item = DirectCast(item, Outlook._Item)
        Console.WriteLine($"项目:{baseItem.Subject} | 系统创建时间:{baseItem.CreationTime}")

        ' 添加自定义创建日期字段
        Dim customCreateDate As Outlook.UserProperty = baseItem.UserProperties.Add("自定义创建日期", Outlook.OlUserPropertyType.olDateTime)
        customCreateDate.Value = baseItem.CreationTime
        baseItem.Save()
    End If
Next

注意事项

  • 运行前确保Outlook已安装且可正常登录
  • 必须手动释放COM对象,否则Outlook会在后台残留进程
  • 若遇权限提示,需在Outlook信任中心设置允许程序访问Outlook数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:15:54