Mail-Dateien importieren und exportieren
Manche Mail muss aufbewahrt werden, obwohl das Postfach, aus dem sie stammt, nicht mehr existiert: ein ehemaliger Mitarbeiter, eine aufgegebene Domain, ein alter Mailserver. Der Import übernimmt solche Mail aus Dateien in Restow, wo sie sich wie jede Sicherung durchsuchen, ansehen und wiederherstellen lässt. Der Export geht den umgekehrten Weg: Er schreibt Mail, die Restow hält, als Dateien heraus, die Sie weitergeben oder in einem anderen Programm öffnen können.
Was sich importieren lässt
Abschnitt betitelt „Was sich importieren lässt“| Quelle | Was gelesen wird |
|---|---|
| EML | Einzelne Dateien, Ordner mit Dateien oder ein ZIP davon. |
| MSG (Outlook) | Einzelne Dateien, Ordner oder ein ZIP. Nur Mail-Nachrichten: Kontakte, Termine und Aufgaben in MSG-Form werden als „keine Mail“ gemeldet und nicht importiert. |
| MBOX | Thunderbird (auch .sbd-Ordner), Apple Mail (X.mbox/mbox), Dovecot- und Postfix-Exporte, Google Takeout. Zeilenenden CRLF und LF funktionieren, die mboxrd-Maskierung wird zurückgenommen. |
| ZIP | Die Ordnerstruktur im ZIP wird zur Ordnerstruktur des Postfachs. Darin dürfen EML-, MSG- und MBOX-Dateien liegen. |
| MailStore | Ein Export als EML- oder MSG-Ordnerbaum (der Ordner oder ein ZIP davon). |
Restow erkennt, was eine Datei ist, am Inhalt (die ersten 64 KiB), nie an der Endung. Importiert wird nur Mail.
Das interne Archivformat von MailStore kann Restow nicht lesen. Wählen Sie in MailStore „E-Mails exportieren“ ins Dateisystem (EML oder MSG) und importieren Sie dann diesen Ordner oder ein ZIP davon.
Was nicht unterstützt wird
Abschnitt betitelt „Was nicht unterstützt wird“- PST- und OST-Dateien. Sie werden am Inhalt erkannt und mit einer klaren Meldung abgelehnt, nie geparst. Der Import von PST und OST ist für eine spätere Version geplant. Exportieren Sie das Postfach bis dahin aus Outlook als MSG- oder EML-Dateien (Nachrichten in einen Ordner ziehen) oder wandeln Sie es mit einem Konverter nach MBOX und importieren Sie das Ergebnis.
- PST-Export und MSG-Export. Beide sind geplant. Es gibt noch keinen MSG-Schreiber mit geklärter, tragbarer Lizenz, deshalb bietet der Export-Dialog kein MSG an, und PST ist als geplant gekennzeichnet. Ein EML-Export enthält dieselben Nachrichten in der Originalform: Outlook öffnet EML-Dateien per Drag and Drop, und MBOX lässt sich mit gängigen Werkzeugen importieren.
- Kalender und Kontakte. Importiert und exportiert wird nur Mail.
- Andere Container.
gz,7z,rar,tarund Apple-.emlx-Dateien werden erkannt und als nicht unterstützt gemeldet, aber nicht geöffnet. Reste von Betriebssystemen (.DS_Store,Thumbs.db,desktop.ini,__MACOSX, Thunderbird-.msf) stehen als „keine Mail“ im Bericht, nie als Fehler.
Was ein Import erzeugt
Abschnitt betitelt „Was ein Import erzeugt“Ein Import legt ein importiertes Postfach an oder erweitert es. Es liegt unter einer Quelle je Mandant mit dem Namen Importierte Mail-Dateien, die weder Server noch Zugangsdaten hat: Von dort wird nie etwas gesichert, es gibt also keine Verbindung einzurichten oder zu testen. Das Postfach taucht in keinem Backup-Zeitplan auf und erscheint nie als ungeschützt oder überfällig.
- Dasselbe Format wie ein IMAP-Backup. Jede Nachricht wird als eigene EML im verschlüsselten Chunk-Store abgelegt, mit erhaltener Ordnerstruktur. Deshalb funktionieren Restore-Explorer, Vorschau, Druckansicht, Download und IMAP-Restore für importierte Mail ohne Sonderwege, und das Postfach trägt dort das Kennzeichen „Importiert“.
- Byte-genau, außer bei MSG. EML und MBOX werden genau so gespeichert, wie sie in der Datei stehen. Eine MSG-Datei enthält keine RFC-5322-Nachricht, daher rekonstruiert Restow aus den gespeicherten Eigenschaften eine EML: Kopfzeilen (wenn Outlook sie mitgespeichert hat), Text, HTML, Anhänge und eingebettete Nachrichten. Der Bericht zählt diese Nachrichten als „aus MSG neu aufgebaut“.
- Jeder Import fügt einen Snapshot hinzu. Ein neuer Snapshot enthält alles aus dem vorigen plus die neuen Nachrichten. Nichts wird entfernt, sodass Sie ein Altpostfach aus mehreren Dateien nacheinander aufbauen können.
- Eine einzelne
a.emlodera.msgohne Verzeichnis landet im OrdnerImported. - Verzeichnisse werden zu Ordnern (
dir/sub/a.emlnachdir/sub). Leere Verzeichnisse bleiben als leere Ordner erhalten. - Eine MBOX-Datei
x.mboxoder eine DateiInboxohne Endung (erkannt am Inhalt) wird zum Ordnerxbzw.Inbox. Thunderbird-VerzeichnisseInbox.sbd/werden zu Unterordnern vonInbox. Apple MailX.mbox/mboxwird zuX. - In einem ZIP geben die Pfade die Ordner vor. Einträge ohne Verzeichnis kommen in einen Ordner mit dem Namen der ZIP-Datei.
Die Dateien hineinbringen
Abschnitt betitelt „Die Dateien hineinbringen“Öffnen Sie Quellen → Quelle hinzufügen → Mail-Dateien importieren. Es gibt zwei Wege.
Upload im Browser
Abschnitt betitelt „Upload im Browser“- Stückweise und wiederaufnehmbar. Die Datei wird in Stücken gesendet (standardmäßig 8 MiB), drei gleichzeitig, jedes mit eigener SHA-256-Prüfsumme. Bricht das Netz ab oder wird der Tab geschlossen, gehen nur die gerade laufenden Stücke verloren. Wählen Sie dieselbe Datei erneut (erkannt an Name und Größe), werden nur die fehlenden Stücke gesendet.
- Ab dem ersten Byte versiegelt. Jedes Stück wird in dem Moment, in dem es ankommt, mit dem Mandantenschlüssel verschlüsselt (AES-256-GCM) und als eigenes Objekt im primären Speicherziel des Mandanten abgelegt. Der Worker liest die Datei später aus diesen Stücken. Es entsteht keine Klartextkopie der Datei auf einer Platte, und nie liegt eine ganze Datei im Speicher, höchstens ein Stück oder eine einzelne Nachricht.
- Grenzen.
IMPORT_MAX_FILE_BYTES(standardmäßig 10 GiB je Datei), höchstens 20 offene Uploads je Mandant, und ein unfertiger oder ungenutzter Upload verfällt nach 48 Stunden (IMPORT_UPLOAD_TTL_HOURS). Abbrechen löscht die Stücke sofort. Ordner lassen sich nicht hochladen: Packen Sie einen Ordner vorher in ein ZIP. - Aufräumen. Die Stücke werden direkt nach dem Import, beim Abbruch und bei Ablauf entfernt. Der Retention-Lauf räumt eventuelle Reste ab.
Import-Ordner auf dem Server
Abschnitt betitelt „Import-Ordner auf dem Server“Für sehr große Archive, die Sie nicht durch den Browser senden möchten, legen Sie die Dateien auf dem Restow-Server ab.
RESTOW_IMPORT_DIRist ein Verzeichnis auf dem Host. Der Release-Stack bindet es schreibgeschützt unter/var/lib/restow/importin den Containernapiundworkerein.- Jeder Mandant hat darin seinen eigenen Unterordner,
<RESTOW_IMPORT_DIR>/<Mandanten-Slug>/, auch eine Installation mit nur einem Mandanten. Der Slug steht in den Mandanteneinstellungen, die Import-Seite zeigt den vollständigen Pfad an. Den Unterordner legen Sie selbst an, und das Verzeichnis muss für den Benutzer lesbar sein, als der die Container laufen. - Legen Sie dort Dateien oder ganze Ordnerbäume ab (zum Beispiel einen MailStore-Export) und wählen Sie sie in der Oberfläche aus.
- Restow beschreibt diesen Ordner nie und leert ihn nie. Pfade werden gegen Ausbrüche geprüft (
.., Symlinks nach außen, Sonderdateien), und sowohl die API als auch der Worker prüfen, dass ein Pfad unterhalb des eigenen Unterordners des Mandanten liegt. So kann ein Mandant nichts sehen oder importieren, was ein anderer dort abgelegt hat.
Der Import-Job
Abschnitt betitelt „Der Import-Job“Wählen Sie Quelle, Dateien und Ziel (ein neues importiertes Postfach mit einem Namen oder ein vorhandenes) und starten Sie den Import mit Import starten. Der Import läuft im Hintergrund, Sie können die Seite verlassen und ihn unter Importe verfolgen.
- Fortschritt. Gelesene Bytes von der Gesamtgröße (mit Prozent und Restzeit), Zähler für Nachrichten, Duplikate, übersprungene und fehlgeschlagene Elemente sowie die aktuelle Phase.
- Checkpoints. Nach jeder fertigen Datei und alle 500 Nachrichten (oder 256 MiB) speichert der Job einen Checkpoint. Ein neu gestarteter Worker liest ab dort weiter und nie eine Nachricht doppelt. Ändert sich die Dateiliste, beginnt der Snapshot von vorn.
- Duplikate. Eine Nachricht mit derselben Message-ID und demselben SHA-256 im selben Ordner ist ein Duplikat: Sie wird nicht noch einmal gespeichert, aber gezählt und mit Fundstelle aufgelistet. Dieselbe Nachricht in einem anderen Ordner bleibt erhalten, weil die Ordnerzuordnung eine Information ist, und teilt sich über die Deduplizierung die gespeicherten Chunks. Frühere Importe in dasselbe Postfach zählen mit: Dieselbe Datei zweimal zu importieren ergibt beim zweiten Mal „nichts Neues“ und keinen Snapshot.
- Fehler werden aufgelistet. Unlesbare oder beschädigte Elemente (eine kaputte MSG oder EML, ein abgeschnittenes ZIP, eine Nachricht über dem Größenlimit, ein verschlüsseltes oder verschachteltes ZIP) stehen mit Grund im Bericht und sind jeweils in Ihrer Sprache erklärt, siehe Fehlererklärungen. Harmloses (Dateien, die keine Mail sind, leere Dateien, Duplikate) steht als übersprungen mit Fundstelle im Bericht. Nichts fällt stillschweigend weg.
- Bericht. Nachrichten, Ordner, Anhänge, Duplikate, übersprungen, fehlgeschlagen und Bytes (gespeichert und gelesen). Je Datei: das Format, der SHA-256 der Quelldatei, die Zähler und das Ergebnis (importiert, teilweise importiert, fehlgeschlagen, nicht importiert). Darunter die Liste der Elemente, Fehler zuerst, höchstens 1.000, der Rest wird gezählt, und feste Hinweise wie „Kalender und Kontakte werden nicht importiert“ und „aus MSG neu aufgebaut“. Der Bericht lässt sich als JSON herunterladen.
- Nichts lesbar, nichts gespeichert. Findet ein Lauf nicht eine einzige lesbare Nachricht, entsteht kein leerer Snapshot. Der Job schlägt ohne Wiederholung fehl, und der Bericht mit allen Gründen bleibt einsehbar.
Einen Import zu starten und Dateien hochzuladen erfordert mindestens die Rolle Administrator, einen laufenden Import abzubrechen die Rolle Techniker. Siehe Team und Rollen.
Zusätzlich archivieren (optional)
Abschnitt betitelt „Zusätzlich archivieren (optional)“Setzen Sie den Haken bei zusätzlich ins Archiv übernehmen, wird jede neu importierte Nachricht auch ein Archivobjekt: mit den Original-Bytes (dieselben Chunks wie im Snapshot), einem Platz in der Hash-Kette, den Aufbewahrungsregeln des Archivs und der Volltextsuche über Betreff, Text und Adressen. Siehe Archivierung.
- Die Aufbewahrungsfrist beginnt mit dem Importdatum, nicht mit dem Datum der Mail. Eine alte Mail, die heute importiert wird, ist ab heute unveränderbar und wird ab heute gezählt. Das Sendedatum der Mail bleibt erhalten und wird in Suche und Anzeige bevorzugt.
- Die Unveränderbarkeit gilt ab der Aufnahme, genau wie bei Mail, die der Graph-Sync erfasst.
- Die Aufnahme ist idempotent: Was schon archiviert ist (gleicher Hash für dasselbe Postfach), wird nicht doppelt angelegt, und ein wiederholter Job setzt fort.
Wiederherstellen aus einem importierten Postfach
Abschnitt betitelt „Wiederherstellen aus einem importierten Postfach“Ein importiertes Postfach erscheint im Restore-Explorer wie jedes andere: Ordnerbaum, Suche, Vorschau, Druckansicht und Download. Sie können es in ein bestehendes IMAP-Konto wiederherstellen (per Append mit Flags und Datum, mit Message-ID-Prüfung) oder in ein Microsoft-365-Postfach, wo die Ordnerstruktur unter einem neuen Wiederherstellungsordner landet. Vorhandene Elemente werden nie ersetzt. „Ins Original zurückspielen“ gibt es nicht, weil ein importiertes Postfach kein Original hat.
Starten Sie einen Export im Restore-Explorer (Exportieren …) oder im Archiv, für ein ganzes Postfach, einen Ordner, eine Auswahl oder alle Treffer eines Suchfilters. Quellen sind:
- eine Sicherung (ein Microsoft-365-Postfach oder ein IMAP-Konto),
- ein importiertes Postfach,
- das Archiv, als Auswahl oder Suchfilter.
| Format | Was Sie erhalten |
|---|---|
| EML in einer ZIP-Datei | Eine .eml je Nachricht mit der Ordnerstruktur (leere Ordner bleiben), dazu MANIFEST.csv (Eintrag, SHA-256, Größe, Message-ID, Datum, Absender, Empfänger, Betreff, Status) und SHA256SUMS. Die Bytes sind die gespeicherten Originale. |
| MBOX (mboxrd) | Ein einzelner Ordner wird eine .mbox-Datei. Mehrere Ordner werden eine ZIP-Datei mit einer .mbox je Ordner, dazu Manifest und Prüfsummen. Eine Nachricht ohne abschließenden Zeilenumbruch bekommt einen. |
SHA256SUMS hat das Format, das sha256sum liest. Entpacken Sie die ZIP-Datei und prüfen Sie jede Nachricht und das Manifest:
sha256sum -c SHA256SUMSExportiert wird nur Mail. Kalenderelemente und Kontakte werden gezählt und im Bericht genannt, aber nicht exportiert. Nachrichten, die Microsoft Graph nur in Teilen geliefert hat, haben keine Originaldatei und stehen als nicht exportierbar im Bericht.
Ablauf. Ein Worker-Job baut die Datei und schreibt sie verschlüsselt, in denselben versiegelten Stücken wie beim Upload, in das Speicherziel des Mandanten. Im Speicher liegen höchstens eine Nachricht und ein Stück. Beim Streamen wird der SHA-256 jeder Nachricht gegen das Manifest geprüft: Ein beschädigter Chunk bricht den Export ab, statt eine still fehlerhafte Datei zu liefern. Die fertige Datei lässt sich 24 Stunden herunterladen (EXPORT_TTL_HOURS), danach löscht der Retention-Lauf sie. Der SHA-256 der fertigen Datei steht in der Oberfläche und im Audit-Eintrag.
Audit. Die Anfrage und jeder Download stehen im Audit-Log als export.requested und export.downloaded, ein Abbruch als export.cancelled. Bei fremden Daten trägt der Eintrag Ihre Begründung und in wessen Auftrag es geschah. Siehe Audit-Log. Einen Export anzufordern und herunterzuladen erfordert mindestens die Rolle Techniker.
Sicherheit und Grenzen
Abschnitt betitelt „Sicherheit und Grenzen“- Erkennung nach Inhalt. Einer Datei wird nie wegen ihres Namens vertraut.
- ZIP-Schutz. Höchstens 2 Mio. Einträge, 256 GiB entpackt und ein Kompressionsfaktor von 1.000. Verschlüsselte und verschachtelte Archive werden gemeldet und nicht geöffnet. Einträge werden nie auf eine Platte geschrieben, und Namen werden bereinigt (
.., absolute Pfade, Backslashes). - Eine Nachricht nach der anderen. Eine einzelne Nachricht (eine EML, eine MSG, eine Nachricht einer MBOX) wird in den Speicher gelesen, begrenzt durch
IMPORT_MAX_MESSAGE_BYTES(256 MiB). Größere werden gemeldet. - Alles wird protokolliert:
import.upload.created,import.upload.completed,import.upload.cancelled,import.requested,import.cancelledund die drei Export-Ereignisse oben. - Speicherbedarf. Das Staging braucht die Größe der Dateien bis zum Ende des Imports, danach liegen die Nachrichten dedupliziert im Chunk-Store. Exporte belegen Platz bis zu ihrem Ablauf.
Bekannte Grenzen
Abschnitt betitelt „Bekannte Grenzen“- Ein importiertes Postfach lässt sich in 0.1.0 nicht löschen, ebenso wenig die Quelle Importierte Mail-Dateien, solange sie Snapshots, Archivobjekte oder Legal Holds hält. Ältere Snapshots räumt die Backup-Retention, der neueste bleibt.
- MSG. Ein Körper, der nur als RTF (oder RTF-verpacktes HTML) vorliegt, wird nicht dekodiert, Restow nimmt dann den Text-Körper. Anhänge, die nur auf eine Datei verweisen, entfallen. Ein eingebettetes Element, das keine Mail ist, bleibt ein
.msg-Anhang. Die Kopfzeilen kommen, wenn vorhanden, unverändert aus den Transportkopfzeilen der MSG, ein nachträglich in Outlook geänderter Betreff steht dort also nicht. Der MSG-Leser läuft unter einer Zeitgrenze und meldet einen Treffer als unlesbar. - MBOX. Die Variante mboxrd wird zurückgenommen (ein führendes
>vorFrom-Zeilen). Bei mboxo-Dateien, die>Fromschon im Original enthielten, lässt sich beides nicht unterscheiden.\DeletedausX-Statuswird nicht übernommen, die Nachricht wird importiert. - UTF-16-kodierte EML-Dateien werden nicht als EML erkannt.
- Metadaten (Betreff, Absender, Volltext) liest ein Mail-Parser, das dauert bei sehr großen Nachrichten entsprechend länger. Der Import speichert die Bytes unabhängig davon unverändert.
- Ein Wechsel des primären Speicherziels kopiert Staging- und Export-Dateien nicht mit, weil sie temporär sind. Ein unfertiger Upload muss danach wiederholt werden.
Konfiguration
Abschnitt betitelt „Konfiguration“Setzen Sie diese Werte in der .env (siehe Umgebungsvariablen). Ein leerer Wert verwendet den Standard.
| Variable | Bedeutung | Standard |
|---|---|---|
RESTOW_IMPORT_DIR |
Host-Verzeichnis, das schreibgeschützt unter /var/lib/restow/import in api und worker eingehängt wird. Jeder Mandant nutzt den Unterordner <Verzeichnis>/<Mandanten-Slug>/, den Sie selbst anlegen. |
./import neben der docker-compose.yml |
IMPORT_DIR |
Pfad innerhalb der Container. Ändern Sie ihn nur zusammen mit dem Mount. | /var/lib/restow/import |
IMPORT_MAX_FILE_BYTES |
Größte Datei, die der Upload annimmt, in Bytes. | 10 GiB |
IMPORT_UPLOAD_TTL_HOURS |
Wie lange ein unfertiger oder ungenutzter Upload aufbewahrt wird. | 48 |
IMPORT_SEGMENT_BYTES |
Größe eines Upload-Stücks in Bytes (erlaubt 64 KiB bis 32 MiB). | 8 MiB |
IMPORT_MAX_MESSAGE_BYTES |
Größte einzelne Nachricht, die in den Speicher gelesen wird. | 256 MiB |
EXPORT_TTL_HOURS |
Stunden, die ein fertiger Export herunterladbar bleibt, bevor seine Datei gelöscht wird. | 24 |
Geplant
Abschnitt betitelt „Geplant“PST- und OST-Import, PST-Export, MSG-Export (sobald ein Schreiber mit geklärter Lizenz existiert), Kalender und Kontakte aus MSG und PST, das Lesen des eigenen MailStore-Archivformats (falls es offen dokumentiert wird) und passwortgeschützte ZIP-Dateien. Siehe die Roadmap.