none
Outlook 2003: auf spezielle MapiFolder zugreifen RRS feed

  • Frage

  • Hallo,

    ich hoffe, hier nun im richtige Forum zu sein mit meinem Problem:

    Da ich hin und wieder größere Datenmengen nach Outlook kopiere, hatte ich mir eine Makro geschrieben, das alle Elemente von bestimmten Ordnern löscht, insbesondere der gelöschten Objekte.

    Nachdem ich bisher nur mit POP3/SMTP-Mail zu tun hatte, ist jetzt ein IMAP-Konto hinzugekommen und damit auch ein eigener Bereich mit eigenen Postfächern, Kontakten etc. Auf den MapiFolder mit den gelöschten Objekten meines "Hauptpostfachs" kann ich über den Mapi-Namespace mit der Funktion GetDefaultfolder(olFolderDeletedItems) zugreifen. Wie aber komme ich an die gelöschten Objekte meines IMAP-Kontos?

    GetDefaultfolder funktioniert nur am Mapi-Namespace - und den hat man schließlich nur einmal. Ich habe auch alle MapiFolder rekursiv durchlaufen und nach signifikanten Merkmalen gesucht. Leider gehört olFolderDeleteItems auch nicht zu den OlItemTypes, über die man immerhin an Kontaktordner u.ä. kommt.

    Derzeit behelfe ich mir, indem ich den Ordner über den Namen suche. Sinnigerweise heißt das Äquivalent zu den gelöschten Objekten dort 'Gelöschte Elemente'. Ich denke, es sollte eine bessere Möglichkeit geben.

    Grüße aus Köln am Rhein

    Klaus Trapp


    Grüße aus Köln Klaus Trapp www.trappdata.de
    Dienstag, 23. November 2010 11:03

Alle Antworten

  • Hallo KlausTrapp,

    Ich konnte auch durch den Namen auf einem beliebigen Ordner aus der Folder Liste von Outlook 2007 zugreifen.

    Wie ich in dem folgenden Artikel über Outlook 2003 lese, man kann auch durch Application.GetNameSpace("MAPI").GetDefaultFolder(3) auf den Ordner „Deleted Items“ zugreifen

    Der Wert 3 ist für Outlook.OlDefaultFolders.olFolderDeletedItems.

    Reference a folder [Outlook 2003 Forms Help]

    [VB.NET | Visual Studio 2008 | Verweis auf: {C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Outlook.dll}]

     

    Imports Microsoft.Office.Interop
    
    Public Class Form1
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
        Dim Filter As String = "Test"
    
        Dim objOL As Outlook.Application = New Outlook.Application
        Dim objNS As Outlook.NameSpace = objOL.GetNamespace("MAPI")
        Dim inbox As Outlook.MAPIFolder = objNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox)
    
        Dim items As Microsoft.Office.Interop.Outlook.Items = inbox.Items
        inbox.Items.Add(Outlook.OlItemType.olMailItem)
        Dim ItemCol As IList(Of Outlook.MailItem) = New List(Of Outlook.MailItem)()
    
        For i As Integer = 1 To inbox.Items.Count
          Dim rItem As Outlook.MailItem
          rItem = TryCast(inbox.Items(DirectCast(i, Object)), Outlook.MailItem)
    
          If rItem IsNot Nothing Then
            ItemCol.Add(rItem)
          End If
        Next
    
        Dim DestFolder As Microsoft.Office.Interop.Outlook.MAPIFolder
        '//DestFolder = IterateFolder(inbox.Parent)
        '//DestFolder = objNS.GetDefaultFolder(3)
        DestFolder = objNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems)
    
        For Each mail As Microsoft.Office.Interop.Outlook.MailItem In ItemCol
    
          If mail.Subject <> Nothing Then '//Mail mit leerem Subjekt 
            If mail.Subject.ToUpper().Contains(Filter.ToUpper()) Then
              ListBox1.Items.Add(mail.Subject)
              '//mail.Move(objNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderJunk))
              mail.Move(DestFolder)
            End If
          End If
    
        Next
    
    
      End Sub
    
      Public Shared Function IterateFolder(ByVal oFldr As Microsoft.Office.Interop.Outlook.MAPIFolder) As Microsoft.Office.Interop.Outlook.MAPIFolder
    
        For intL As Integer = 1 To oFldr.Folders.Count
    
          '//If oFldr.Folders(intL).Name = "Test" Then
          If oFldr.Folders(intL).Name = "Deleted Items" Then
            Return oFldr.Folders(intL)
            Exit For
          End If
    
        Next
    
      End Function
    End Class
    

    Grüße,

    Robert

    Dienstag, 23. November 2010 13:24
    Moderator
  • Hallo Robert,

    GetDefaultFolder(olFolderDeletedItems) [oder 3] funktioniert ja leider nur am Namespace-Objekt, also nur einmal und somit nicht an meinem zusätzlichen Hotmail-Konto.

    "Deleted Items" entspricht ja meinem Suchbegriff "Gelöschte Elemente" bzw. "Gelöschte Objekte" im klassischen VB - ist immerhin international einsetzbar.


    Grüße aus Köln am Rhein Klaus Trapp www.trappdata.de
    Mittwoch, 24. November 2010 09:17