Could we help you? Please click the banners. We are young and desperately need the money
Wer schon einmal versucht hat, seine liebevoll gepflegten Apple-Mail-Postfächer nach Outlook unter Windows zu retten, weiß: Das klingt leichter, als es ist. Nach ein paar Stunden Export, Import und Nervenverlust steht man vor einer PST-Datei, die aussieht, als hätte jemand Eimer Unterordner über die Festplatte geschüttet.
Mit dem Tool Kernel for MBOX to PST (kostenpflichtig unter Windows) lassen sich Apple-Mail-Ordner zwar problemlos in Outlook lesbare PST-Dateien konvertieren, aber das Ergebnis sieht typischerweise so aus:
Projekt-XYZ.mbox
└── mbox
├── Nachrichten…
└── Unterordner…
Jeder eigentliche Unterordner hat also noch einmal einen „.mbox“-Ordner darunter – und das gleich hunderte Male. Bei 20 Projekten? Nervig. Bei 200? Katastrophe.
Bevor man irgendetwas automatisch löschen kann, muss Outlook überhaupt wissen, was wo ist. Das geht direkt in Outlook per VBA – in zwei Schritten:
Ein kleines Makro kann alle Ordnernamen korrigieren, die auf „.mbox“ enden:
Sub RenameMboxFolders()
Dim ns As Outlook.NameSpace
Dim store As Outlook.store
Dim rootFolder As Outlook.Folder
Set ns = Application.GetNamespace("MAPI")
' PST-Datei mit Namen "MAIL EXPORT" finden
For Each store In ns.Stores
If UCase(store.DisplayName) = "PST" Then
Set rootFolder = store.GetRootFolder
Debug.Print "Starte Umbenennung in:", store.DisplayName
RenameFoldersRecursively rootFolder
End If
Next store
MsgBox "Umbenennung aller '.mbox'-Ordner abgeschlossen.", vbInformation
End Sub
Private Sub RenameFoldersRecursively(ByVal parentFolder As Outlook.Folder)
Dim subFolder As Outlook.Folder
Dim subFolders As Outlook.Folders
Dim i As Long
Dim oldName As String, newName As String
Set subFolders = parentFolder.Folders
' Rückwärts laufen, damit die Sammlung stabil bleibt
For i = subFolders.Count To 1 Step -1
Set subFolder = subFolders(i)
oldName = subFolder.Name
' Prüfen, ob Name auf ".mbox" endet
If LCase(Right(oldName, 5)) = ".mbox" Then
newName = Left(oldName, Len(oldName) - 5)
Debug.Print "Umbenennen: " & oldName & " ? " & newName
On Error Resume Next
subFolder.Name = newName
On Error GoTo 0
End If
' Rekursiv tiefer gehen
RenameFoldersRecursively subFolder
Next i
End Sub
Ergebnis: Alle Ordnernamen heißen wieder „Projekt XY“ statt „Projekt XY.mbox“. Outlook sieht wieder halbwegs normal aus.
PST im Code muss exakt so geschrieben sein, wie die Datendatei in Outlook bei dir heißt.Viele dieser Unterordner heißen schlicht „mbox“ und enthalten die eigentlichen Mails. Ein weiteres Makro verschiebt deren Inhalt automatisch nach oben:
Sub MoveAllMboxEmails_TopLevel()
Dim ns As Outlook.Namespace
Dim store As Outlook.Store
Dim rootFolder As Outlook.Folder
Dim topFolder As Outlook.Folder
Set ns = Application.GetNamespace("MAPI")
' PST-Datei finden (Name ggf. anpassen!)
For Each store In ns.Stores
If UCase(store.DisplayName) = "PST" Then
Set rootFolder = store.GetRootFolder
Debug.Print "Starte Durchlauf in:", store.DisplayName
' Alle Hauptordner unterhalb der Datendatei verarbeiten
For Each topFolder In rootFolder.Folders
Debug.Print ">> Bearbeite Hauptordner: " & topFolder.Name
ProcessFolder_MoveOnly topFolder
Next topFolder
MsgBox "Verschiebung aller 'mbox'-Unterordner unterhalb der Outlook-Datendatei abgeschlossen.", vbInformation
End If
Next store
End Sub
Private Sub ProcessFolder_MoveOnly(ByVal parentFolder As Outlook.Folder)
Dim subFolder As Outlook.Folder
Dim subFolders As Outlook.Folders
Dim i As Long
Set subFolders = parentFolder.Folders
' Rückwärts iterieren, um stabile Verarbeitung zu gewährleisten
For i = subFolders.Count To 1 Step -1
Set subFolder = subFolders(i)
' Wenn Ordner genau "mbox" heißt
If LCase(subFolder.Name) = "mbox" Then
Debug.Print "Bearbeite: "; subFolder.FolderPath
MoveEmailsOnly subFolder, parentFolder
Else
' Rekursiv tiefer gehen
ProcessFolder_MoveOnly subFolder
End If
Next i
End Sub
Private Sub MoveEmailsOnly(ByVal mboxFolder As Outlook.Folder, ByVal targetFolder As Outlook.Folder)
Dim i As Long
Dim itm As Object
Dim movedCount As Long
On Error Resume Next
' Rückwärts über Items iterieren, um Stabilität zu sichern
For i = mboxFolder.Items.Count To 1 Step -1
Set itm = mboxFolder.Items(i)
If Not itm Is Nothing Then
itm.Move targetFolder
movedCount = movedCount + 1
End If
Next i
On Error GoTo 0
Debug.Print " " & movedCount & " E-Mails verschoben von " & mboxFolder.FolderPath & " → " & targetFolder.FolderPath
End Sub
Ergebnis: Alle E-Mails aus den „mbox“-Zwischenordnern landen direkt in ihrem übergeordneten Ordner. Die „mbox“-Ordner selbst sind jetzt leer – und bereit für die endgültige Säuberung.
Jetzt sind zwar alle Inhalte oben, aber die leeren „mbox“-Ordner bleiben übrig – und Outlook weigert sich, sie zu löschen. Selbst VBA oder das Tool MFCMAPI kommen hier an ihre Grenzen. Diese Dinger sind Pseudo-Ordner – sichtbar, aber technisch kein echtes MAPI-Objekt.
Hier kommt die Erlösung: Redemption greift direkt auf PST-Dateien zu – ohne Outlook, ohne MAPI-Cache, kein Theater.
C:\Tools\Redemption)
regsvr32 "C:\Tools\Redemption\Redemption64.dll"
Wichtig: Achte darauf, dass du im Skript den Pfad zu deiner PST-Datei korrekt einträgst.
Wenn deine Datei z. B. C:\Users\Af\Desktop\MailExport.pst heißt, muss genau dieser Pfad in der Zeile
$pstPath = "..." stehen. Tippfehler oder falsche Dateinamen führen dazu, dass das Skript gar nichts tut – also lieber einmal mehr prüfen.
# Löscht alle Ordner mit dem Namen "mbox" aus einer PST-Datei (direkter Zugriff)
$pstPath = "C:\Users\\Desktop\Final.pst" # Pfad anpassen!
$session = New-Object -ComObject Redemption.RDOSession
$session.LogonPstStore($pstPath)
$store = $session.Stores.DefaultStore
$root = $store.IPMRootFolder
$deletedCount = 0
function Delete-MboxRecursive {
param($folder)
foreach ($sub in @($folder.Folders)) {
if ($sub.Name -eq "mbox") {
Write-Host "Lösche:" $sub.FullPath
try {
$sub.Delete()
$script:deletedCount++
} catch {
Write-Warning "Fehler bei: $($sub.FullPath)"
}
} else {
Delete-MboxRecursive $sub
}
}
}
Write-Host "Starte Durchlauf..."
Delete-MboxRecursive $root
Write-Host "`nFertig. $deletedCount 'mbox'-Ordner gelöscht."
$session.Logoff()
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
cd $env:USERPROFILE\Desktop
.\Delete-MboxFolders.ps1
PowerShell arbeitet sich durch die gesamte PST. Im Fenster fliegen Zeilen vorbei wie:
Lösche: \\Outlook-Datendatei\Projekte\2024\Test\mbox
Lösche: \\Outlook-Datendatei\Archiv\Mailingliste\mbox
Fertig. 777 'mbox'-Ordner gelöscht.
Beim Öffnen in Outlook: Alles sauber, keine sinnlosen Zwischenordner mehr. Nur noch deine echten Mailordner.
Was als simpler Mail-Umzug begann, endete als digitaler Hindernislauf durch Ordnerhölle, VBA-Workarounds, MAPI-Fallen und PowerShell-Befreiung.
Am Ende bleibt:
– Kernel for MBOX to PST → bringt die Mails nach Outlook.
– Redemption → bringt endgültig Ruhe in die Ordnerstruktur.
🧠 Kurz gesagt: Nicht alles, was Outlook zeigt, lässt sich auch löschen – aber mit der richtigen Mischung aus Geduld, Kaffee und PowerShell schon.
Tags: #Outlook #PST #MBOX #PowerShell #Redemption #Migration #AppleMail #Windows