Files
archivmail/features/PROJ-19-import-piler.md
T
sysops 7c29ee88bd docs: vollständige README, PROJ-2 Web-Upload, PROJ-19 Mailpiler-Migration
README.md:
- Vollständige Dokumentation aller implementierten Funktionen
- Konfigurationsreferenz, Installation, Systemd, REST-API-Übersicht
- In-Progress-Features klar gekennzeichnet

PROJ-2 (EML/MBOX Web-Upload):
- POST /api/admin/upload – Multipart-Upload mit Hintergrund-Job
- GET /api/admin/upload/{jobID}/progress – Polling
- Admin-Tab "Import" mit Drag-and-Drop, Fortschrittsbalken, Abschlussbericht

PROJ-19 (Mailpiler Migration):
- archivmail import-piler mit Methoden: pilerexport | direct | auto
- Direct: AES-256-CBC + zlib mit defensiven Fallbacks
- pilerexport: Wrapper um mailpilers Export-Tool

Status-Updates: PROJ-3, PROJ-4, PROJ-6, PROJ-7, PROJ-10, PROJ-11 → Deployed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 09:23:34 +01:00

2.4 KiB
Raw Blame History

PROJ-19: Mailpiler → archivmail Migrationstool

Status: Deployed

Created: 2026-03-17 Last Updated: 2026-03-17

Dependencies

  • Requires: PROJ-5 (Speicherung & Indexierung)
  • Requires: PROJ-15 (CLI Import)

User Stories

  • Als Admin möchte ich alle E-Mails aus einem bestehenden mailpiler-Archiv nach archivmail migrieren, damit ich die Plattform wechseln kann ohne E-Mails zu verlieren.
  • Als Admin möchte ich den Fortschritt der Migration in Echtzeit sehen.
  • Als Admin möchte ich Duplikate automatisch überspringen, damit bei Teil-Migrationen oder Wiederholungsläufen keine Daten doppelt archiviert werden.

Acceptance Criteria

  • Methode 1: pilerexport-Wrapper ruft das mailpiler-eigene Export-Tool auf, importiert die EML-Dateien
  • Methode 2: Direkt liest .m-Dateien aus dem mailpiler Store-Verzeichnis, entschlüsselt (AES-256-CBC) und dekomprimiert (zlib)
  • Automatische Methodenwahl (--method auto): pilerexport → direct
  • Fortschrittsanzeige (importiert / übersprungen / Fehler)
  • --dry-run Modus
  • JSON-Ausgabe für Skripting
  • Datums-Filter (--date-from, --date-to) für pilerexport-Methode

Aufruf

# Auf dem mailpiler-Server (pilerexport-Methode, empfohlen):
archivmail import-piler \
  --config /etc/archivmail/config.yml \
  --method pilerexport

# Mit Datumsfilter:
archivmail import-piler \
  --config /etc/archivmail/config.yml \
  --date-from 2020-01-01 \
  --date-to 2024-12-31

# Direkte Methode (kein mailpiler nötig, kein MySQL nötig):
archivmail import-piler \
  --config /etc/archivmail/config.yml \
  --method direct \
  --store-dir /var/piler/store \
  --key-file /var/piler/store/piler.key

# Nur Simulation (kein Speichern):
archivmail import-piler --dry-run

# JSON-Ausgabe für Skripte:
archivmail import-piler --json

Technische Details

Aspekt Detail
pilerexport-Ausgabe EML-Dateien im temp-Verzeichnis, jede .eml = eine E-Mail
mailpiler-Dateiformat {storedir}/**/{piler_id}.m AES-256-CBC verschlüsselt, zlib komprimiert
Entschlüsselung Erste 16 Bytes = IV, Rest = CBC-Ciphertext, Key aus piler.key (32 Bytes)
Dekomprimierung zlib (ohne AES falls kein Key vorhanden)
Duplikat-Erkennung Storage.Save() + IsIndexed() identische Inhalts-Hashes werden übersprungen
Keine ext. Abhängigkeiten Nur Go stdlib (compress/zlib, crypto/aes) + vorhandene archivmail-Pakete