Цикл по почтовым элементам Outlook в папке «Отправленные» - PullRequest
1 голос
/ 18 февраля 2011

Мы пытаемся получить доступ к папке Отправленные в Outlook 2007 (с использованием Exchange) , но проверка для TypeOf(i) Is Outlook.MailItem в приведенном ниже фрагменте кода всегда возвращает значение False.

Мы знаем, что у нас правильная папка, потому что тест для items.Count возвращает правильное количество почтовых отправлений.

Входящие сообщения в порядке. Если мы изменим папку с olFolderSentMail на 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

Обновление

@ Ответ Роба ниже, да, определенно помог. Но я все еще озадачен. Важнейшая вещь, которую делает код Роба, это тестирование на .MessageClass = "IPM.Note". Если я включу это, то последующий тест для TypeOf x Is MailItem будет успешным. Если я заменю тест @ Роба для .MessageClass = "IPM.Note" на If True Then, то тот же код все еще выполняется, но более поздний тест для Is MailItem завершается неудачно. Это как если бы тестирование .MessageClass автоматически разрешало объект в MailItem.

Кроме того, отправленные элементы не содержат никаких приглашений на собрания, поэтому проверка в любом случае может показаться ненужной.

1 Ответ

2 голосов
/ 19 февраля 2011

Это должно помочь вам ...

....

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

             .....
...