Ordnertypen nach PST-Import von IMAP-Server falsch
Migration zu Exchange Online oder einem OnPremise-Exchange: nervtötend. Besonders der Weg, die PSTs in einem Outlook zu exportieren und wieder zu importieren. Typische Fehlerquelle: beim Import wird ein Ordner vom Typ IPF.Imap
angelegt, obwohl IPF.Note
benötigt wird. In Folge dessen scheinen Ordner leer, unten links im Outlook der Hinweis „Filter angewendet“. Also auf jedem Client in jedem Ordner den Filter anpassen – oder mit VBS den Ordner anpassen.
Vorbereitende Maßnahmen
Damit wir VBS-Makros nutzen können, müssen wir ein Outlook, auf dem wir importieren, erst mal anpassen. Unter Datei > Optionen > Menüband
anpassen setzen wir die Checkbox „Entwicklertools“.
Und unter Trust Center > Einstellungen für das Trust Center > Makroeinstellungen
aktivieren wir die „Benachrichtigungen für alle Makros
„
In Outlook selber finden wir den aktivierten Reiter „Entwicklertools“. In den wechseln wir und wählen „Visual Basic“. Im neuen Fenster klicken wir links auf „Projekt1 (VbaProject.OTM)“ und wählen „Einfügen“ > „Modul“. Folgenden Code kopieren wir in das neue Fenster:
Option Explicit
Dim SubFolder As MAPIFolder
Sub ChangeFolderClassAllSubFolders()
Dim i As Long
Dim iNameSpace As NameSpace
Dim myOlApp As Outlook.Application
Dim ChosenFolder As Object
Dim Folders As New Collection
Dim EntryID As New Collection
Dim StoreID As New Collection
Set myOlApp = Outlook.Application
Set iNameSpace = myOlApp.GetNamespace("MAPI")
Set ChosenFolder = iNameSpace.PickFolder
If ChosenFolder Is Nothing Then
GoTo ExitSub:
End If
Call GetFolder(Folders, EntryID, StoreID, ChosenFolder)
ChangeFolderContainer
For i = 1 To Folders.Count
Set SubFolder = myOlApp.Session.GetFolderFromID(EntryID(i), StoreID(i))
On Error Resume Next
ChangeFolderContainer
On Error GoTo 0
Next i
ExitSub:
End Sub
Private Sub ChangeFolderContainer()
Dim oFolder As Outlook.Folder
Dim oPA As Outlook.PropertyAccessor
Dim PropName, Value, folderType As String
PropName = "http://schemas.microsoft.com/mapi/proptag/0x3613001E"
Value = "IPF.Note"
On Error Resume Next
Set oFolder = SubFolder 'Application.ActiveExplorer.CurrentFolder
Set oPA = oFolder.PropertyAccessor
folderType = oPA.GetProperty(PropName)
Debug.Print SubFolder.Name & " " & (folderType)
If folderType = "IPF.Imap" Then
oPA.SetProperty PropName, Value
Debug.Print " Changed: " & SubFolder.Name & " " & Value
End If
Set oFolder = Nothing
Set oPA = Nothing
End Sub
Sub GetFolder(Folders As Collection, EntryID As Collection, StoreID As Collection, Fld As MAPIFolder)
Dim SubFolder As MAPIFolder
Folders.Add Fld.FolderPath
EntryID.Add Fld.EntryID
StoreID.Add Fld.StoreID
For Each SubFolder In Fld.Folders
GetFolder Folders, EntryID, StoreID, SubFolder
Next SubFolder
ExitSub:
Set SubFolder = Nothing
End Sub
Das ganze sieht dann ungefähr so aus:
Wir speichern links oben, und schließen das Fenster. Und damit sind wir in der Lage, mit unserem Outlook Postfächer zu patchen, um die Ordnertypen zu ändern.
Anpassen der Ordnertypen
Das Anpassen der Ordnertypen ist von nun an ein Kinderspiel. Wir wechseln im Reiter „Entwicklertools“ auf „Makros“ und wählen das gerade frisch erstellte „Projekt1.ChangeFolderClassAllSubfolders“ aus:
Es öffnet sich ein neues Fenster, welches nach einem Ordner fragt. Hier können wir alles zusammenklappen und ein gesamtes Postfach nehmen, mit „OK“ bestätigen. Das Outlook hängt für ein paar Sekunden (bis hin zu Minuten…) – und im Anschluss sind alle Ordner korrekt, alle Emails ohne Entfernenung des Filters sichtbar und alle Kunden glücklich.
Kleine Randnotiz für mich: einmal kurz den Ordner wechseln, damit Outlook den geänderten Ordnertyp mitbekommt. Sonst kann ich fluchen und rumprobieren, wie ich will.
Credits
Das Script wurde nicht durch mich geschrieben und veröffentlicht. Ich habe es einem englischsprachigem Artikel entnommen und minimal angepasst (STRG+F11 funktionierte bei mir nicht, daher über den Reiter „Entwicklerkonsole“). Der ursprüngliche Artikel findet sich hier: