循环遍历“已发送邮件”文件夹中的 Outlook 邮件项目

2023-12-25

我们正在尝试访问发送的邮件文件夹中Outlook 2007(使用 Exchange)但测试TypeOf(i) Is Outlook.MailItem在下面的代码片段中始终返回 False。

我们知道我们有正确的文件夹,因为测试items.Count返回正确的邮件数量。

收件箱消息很好。如果我们将文件夹从olFolderSentMail to olFolderInbox的测试TypeOf(i) Is Outlook.MailItem通过了,它很高兴向我们展示这个主题。

Dim app As Outlook.Application = Nothing
Dim ns As Outlook.NameSpace = Nothing
Dim siFolder As Outlook.Folder = Nothing
Dim items As Outlook.Items = Nothing

app = New Outlook.Application()
ns = app.Session


siFolder = CType(ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail), Outlook.Folder)

items = siFolder.Items

MsgBox(items.Count)

For Each i In items

    If TypeOf (i) Is Outlook.MailItem Then
        Dim mailitem As Outlook.MailItem
        mailitem = CType(i, Outlook.MailItem)
        MsgBox(mailitem.Subject)
    Else
        MsgBox("not a mailitem")
    End If
Next

Update

@Rob 下面的回答,是的,肯定有帮助。但我还是很困惑。 @Rob 的代码所做的最重要的事情是测试.MessageClass = "IPM.Note"。如果我包括这一点,那么稍后的测试TypeOf x Is MailItem成功了。如果我将 @Rob 的测试替换为.MessageClass = "IPM.Note" with If True Then那么相同的代码仍然执行,但稍后的 Is MailItem 测试失败。就好像只是测试.MessageClass自动将对象解析为 MailItem。

此外,已发送的项目不包含任何会议请求,因此无论如何测试似乎都是不必要的。


这应该会让你继续...

....

Dim oSent As Outlook.MAPIFolder = oNS.GetFolderFromID(gSentEntryID, gSentStoreID)


 Dim oItems As Outlook.Items = oSent.Items

 For i as Integer = 1 To oItems.Count
   'Test to make sure item is a mail item and not a meeting request.
    If oItems.Item(i).MessageClass = "IPM.Note" Then

        If TypeOf oItems.Item(i) Is Microsoft.Office.Interop.Outlook.MailItem Then

             .....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环遍历“已发送邮件”文件夹中的 Outlook 邮件项目 的相关文章

随机推荐