Thunderbird Mailstore

Wie werden eigentlich die Mails bei Mailprogrammen gespeichert?

Bei Microsoft-Outlook befinden sich die Mails in Dateien des Typs .ost (IMAP) und .pst (POP). Diese Dateien können ohne Hilfsmitteln nicht weiter zerlegt werden.

Beim Mozilla-Thunderbird werden die Mails nicht in einer einzigen Datei verpackt. Vielmehr wird die Ordnerstruktur der IMAP-Ordner im Dateisystem abgebildet.

Ordnerstruktur des Mailstore

Der Wurzelordner ist hier: C:\\Users\\<Benutzer>\\AppData\\Roaming\\Thunderbird\\Profiles\\c7e6lqi6.default-release
wobei C:\\Users\\<Benutzer>\\AppData\\Roaming\\ der vordefinierten Variablen %AppData% entspricht und "c7e6lqi6" ein zufälliger Wert ist. In diesem Ordner befinden sich alle Ordner, die für Thunderbord bedeutend sind. Hier soll es nur um einen IMAP-Client gehen. Dessen Wurzelordner heißt ImapMail. In diesem Wurzelordner gibt es nach der Einrichtung des Kontos eine .msf-Datei (“Mail Summary File”), die den Namen des IMAP-Servers hat, bei ClubComputer ist das i4.ccc.at.msf und einen Ordner i4.ccc.at.

Im Ordner i4.ccc.at befindet sich die Datei INBOX.msf. Sobald eine Mail im Ordner INBOX eingelangt ist, entsteht eine Datei INBOX (ohne Erweiterung), die diese und alle weiteren Mails in diesem Ordner enthält.

ImapMail        Ordner    i4.ccc.at.msf  i4.ccc.at.at  Ordner    INBOX       enthält alle Mails im Posteingang, der Mailstore    INBOX.msf   Strukturdatei

Solange der Posteingang keine weiteren Ordner enthält, bleibt es bei dieser Struktur. Wenn eine Mailbox mit diesem Posteingang 100 MB an Daten enthält, befinden sich überwiegend in der Datei INBOX, auch alle Beilagen und Bilder.

IMAP-Ordner

Für eine bessere Auffindbarkeit der Mails, kann man beliebig viele Unterordner anlegen und Mails dorthin verschieben. Auch verschachtelte Unterordner sind möglich.

Wenn man in der INBOX einen weiteren Ordner, zum Beispiel “Uni” anlegt, legt Thunderbird im Ordner INBOX zuerst einen Ordner INBOX.SBD (SuBDirectory) und darin eine Datei Uni.msf an. Wichtig: solange keine Mails in diesem Ordner sind, gibt es auch keinen Mailstore. Mit der ersten Mail in diesem Ordner entsteht auch die Mailstore-Datei Uni.

    INBOX.sbd    Ordner      
      Uni        Mailstore des IMAP-Verzeichnisses Uni
      Uni.msf    Strukturdatei

Reparatur eines IMAP-Ordners

Es kommt vor, dass die Ordnung in der Strukturdatei durcheinander kommt und der Ordner nicht mehr ansprechbar ist und keine Mails angezeigt werden. In einem solchen Fall kann man die Reparaturfunktion über das Kontextmenü anwenden:

IMAP-Ordner in Thunderbird mit der rechten Maustaste anklicken und "Eigenschaften" auswählen und dort den Button "Reparieren".

IMAP-Ordner löschen

Diese gesamte Struktur im Ordner ImapMail ist ein Abbild der Mails am Server. Man kann diese Ordner am eigenen Rechner löschen. Tut man es, baut Thunderbird diese Struktur automatisch wieder aus der Mailstruktur am Server wieder auf. Natürlich nimmt dieser Wiederaufbau einige Zeit in Anspruch, wenn es sich um eine große Mailbox handelt.

IMAP-Ordner sichern

Alle diese lokalen Dateien im Ordner ImapMail sind nur Kopien. Um alle Mails einer Mailbox zu sichern, gibt es wahrscheinlich Hilfsprogramme, man kann aber auch einfach ein ZIP-Archiv des Ordners ImapMail oder eines seiner Unterordner erstellen.

Eine solche Sicherung kann man nicht einfach in ein anderes IMAP-Konto hineinkopieren, weil diese Struktur von Thunderbird sofort gelöscht werden würde, denn der Master ist immer die Struktur der Daten am Server; verändert man etwas am Client, das am Server nicht vorhanden ist, werden diese Daten am Client gelöscht.

Aber man kann eine solche Sicherung über einen Umweg in ein anderes Konto übertragen und zwar, indem man diese Datei zuerst im Ordner Thunderbird\\Mail\\Local Folders entpackt. Dadurch werden sie in Thunderbird im Ordner Local Folders angezeigt und können von dort in die gewünschte Mailbox übertragen werden. Je nach ursprünglicher Größe der Mailbox kann das auch viele Stunden oder Tage in Anspruch nehmen.

Eine Hürde

Diese Local Folder verhalten sich nun geringfügig anders als die IMAP-Folder. Und zwar zeigen sie einen Ordner, der keine Mails enthält nicht an, auch dann wenn er weitere Unterordner enthält. Das ist eine Eigenschaft, die diese Übertragung unvollständig machen können.

Tipp 1: Schau\’ Dir vor einem solcher Sicherung aller IMAP-Ordner alle Unterordner an und kontrolliere, ob sich im Unterordner auch zumindest eine Mail befindet. Wenn der Unterordner leer ist, kopiert man eine einzelne Mail dort hinein, damit wird ein Mailstore für diesen IMAP-Ordner angelegt und dann wird dieser Ordner auch in den Local Folders angezeigt.

Tipp 2: Tipp1 funktioniert, solange man Zugriff zum ursprünglichen Server hat. Wenn man aber bereits ein Backup angelegt hat und danach keine Verbindung mehr zur ursprünglichen Mailbox besteht, dann fehlen in den Lokalen Ordnern alle leeren Mailstore-Dateien und damit werden diese Ordner und deren Unterordner in den Lokalen Ordnern nicht angezeigt.

Bei kleinen Mailboxen kann man die fehlenden leeren Mailstore-Dateien händisch anlegen. Bei einer großen Mailbox mit vielen verschachtelten IMAP-Ordner ist das mühsam und fehleranfällig. Ein Programm kann dabei hilfreich sein.

Anlegen fehlender Mailstores

Mit PowerShell ist das Anlegen dieser fehlenden Dateien sehr einfach.

# Thunderbird 
# ===========
# Anlegen der Mailstoredateien in leeren IMAP-Ordnern# Das Verzeichnis $dir muss zuerst aus der Konfiguration der Mailbox ermittelt werden# Thunderbird -> Extras -> Konteneinstellungen -> Lokale Ordner -> Lokaler Ordner
Clear-Host
$dir = "C:\\Users\\EIZO\\AppData\\Roaming\\Thunderbird\\Profiles\\c7e6lqi6.default-release\\Mail\\Local Folders\\INBOX-2.sbd"
$count_dir = 0

function Thunderbird_Create_Recursive {
	$files = $args[0]
	foreach ($file in Get-ChildItem -Force $files) 	{
		if ($file.Mode -like "d*") # directory
		{
			Write-Host $global:count_dir $file.Name
 			$global:count_dir++
			# if ($count_dir -ge 10) { break }
			Thunderbird_Create_Recursive $file.FullName
		}
		else # file
		{
			# .msf Mail summary file
			if ($file.Extension -eq ".msf")
			{
				$temp = $file.Name.Replace(".msf","")
                                $path = $file.directory.FullName+"\\"+$temp
				$Mailstore_exists = Test-Path $path
				if ($Mailstore_exists)
				{
					# Write-Host $file.Name": Mailstore exists"
				}
				else
				{
					Write-Host $file.Name": Mailstore does not exist"
					New-Item -ItemType file -Path $path > null
				}
			}
		}
	}
}
Thunderbird_Create_Recursive $dir$Text = "Finished creating Mailstore-Null-Files in "+$count_dir+" direcories"Write-Host $Text