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

读取Outlook已发送邮件文件夹时遇System.InvalidCastException异常求助

解决Outlook已发送邮件文件夹读取时的InvalidCastException问题

已发送邮件文件夹里并非只有MailItem对象,还可能包含会议请求(MeetingItem)等其他类型的Outlook项,而TypeOf在处理COM包装的System.__ComObject时,无法准确识别对象的实际接口类型,导致类型转换失败。

可以通过以下两种方法解决:

方法一:使用TryCast安全转换

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Outlook 

Dim moApp As Outlook.Application
Dim moNS As Outlook.NameSpace

moApp = New Outlook.Application
moNS = moApp.GetNamespace("MAPI")

Dim oFolder As Outlook.MAPIFolder
oFolder = moNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail)

For Each i As Object In oFolder.Items
    ' 用TryCast尝试转换,失败返回Nothing
    Dim mailItem = TryCast(i, Outlook.MailItem)
    If mailItem IsNot Nothing Then
        MessageBox.Show("To: " & mailItem.To)
    End If
Next

方法二:检查对象的Class属性

通过Outlook项的Class属性判断类型,OlObjectClass.olMail对应邮件项:

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Outlook 

Dim moApp As Outlook.Application
Dim moNS As Outlook.NameSpace

moApp = New Outlook.Application
moNS = moApp.GetNamespace("MAPI")

Dim oFolder As Outlook.MAPIFolder
oFolder = moNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail)

For Each i As Object In oFolder.Items
    ' 先判断是否为邮件类对象
    If i.Class = Outlook.OlObjectClass.olMail Then
        Dim mailItem = DirectCast(i, Outlook.MailItem)
        MessageBox.Show("To: " & mailItem.To)
    End If
Next

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:01:03