读取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
相关产品推荐
相关产品推荐

