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

63 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
- [x] Methode 1: `pilerexport`-Wrapper ruft das mailpiler-eigene Export-Tool auf, importiert die EML-Dateien
- [x] Methode 2: Direkt liest `.m`-Dateien aus dem mailpiler Store-Verzeichnis, entschlüsselt (AES-256-CBC) und dekomprimiert (zlib)
- [x] Automatische Methodenwahl (`--method auto`): pilerexport → direct
- [x] Fortschrittsanzeige (importiert / übersprungen / Fehler)
- [x] `--dry-run` Modus
- [x] JSON-Ausgabe für Skripting
- [x] Datums-Filter (`--date-from`, `--date-to`) für pilerexport-Methode
## Aufruf
```bash
# 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 |