Initial Email-Forwarder scaffold

This commit is contained in:
DonVoo 2026-07-05 17:58:25 +02:00
commit 91e52aecd0
22 changed files with 1007 additions and 0 deletions

47
Projektbeschreibung.md Normal file
View file

@ -0,0 +1,47 @@
# Email-Forwarder
Kleines Go-Single-Binary für **Postfach-Umzüge zwischen Hosts**. Holt Mails aus
Quell-Konten (IMAP, POP3 nur als Notnagel) und spielt sie **1:1 in Ziel-Konten
auf dem neuen Host** ein Ordnerstruktur, Flags und Original-Datum bleiben
erhalten. Gleichzeitig wird jede Mail lokal als **mbox** (Cold Backup)
weggeschrieben. Bedienung komplett im Browser im **Outlook-2013-Look**; die
lokalen mbox-Postfächer lassen sich dort auch betrachten und bei Bedarf einzeln
weiterleiten.
## Wozu
Reiner Host-Umzug. Beispiel dr-gold:
| Quelle (Intersolute, IMAP) | Ziel (All-Inkl, IMAP) | Fall |
|----------------------------|------------------------------------|-------------------|
| `hans-peter@dr-gold.de` | `archiv-hans-peter@dr-gold.com` | Ex-Mitarbeiter |
| `jane-doe@dr-gold.de` | `temp-jane-doe@dr-gold.com` | aktiv, Übergang |
Zieladresse ist **frei gemappt** (eine Zeile pro Konto). Nach dem Umzug wird die
Domain portiert; für das Tool ist das egal es arbeitet nur mit dem Mapping,
das zum Umzugszeitpunkt gilt.
## Die harten Regeln (nicht verhandelbar)
1. **Umzug = IMAP `APPEND`, niemals SMTP.** Nur `APPEND` erhält Ordner, Flags
(gelesen/beantwortet) und `INTERNALDATE`. SMTP würde alles als neu/ungelesen
mit falschem Datum zustellen und die Ordner platt machen.
2. **SMTP nur fürs manuelle Weiterleiten** einzelner Mails aus dem Viewer
sauber getrennt vom Umzug (`09-smtp.go`).
3. **Lokales Format = mbox** (eine Datei pro Ordner). Kein PST in Go nicht
lean schreibbar. mbox öffnet eM Client / Thunderbird direkt.
4. **Idempotenz über Message-ID.** Zweiter Lauf kopiert nur das Delta → erlaubt
`--watch` als Cutover-Delta-Sync bis zur Portierung.
5. **Secrets bleiben lokal.** `config.json` und die DB (mit den Postfach-
Passwörtern) sind ge-`.gitignore`-t. Erst bei Go-Live rotieren + einlagern.
6. **Alt-Provider-tauglich.** Muss mit **unverschlüsseltem** IMAP/POP3 (Klartext
143/110, STARTTLS, kaputte Zerts) klarkommen. Ordnernamen mit **Sonderzeichen**
(modified-UTF-7) sauber übertragen. **Standardordner** (Posteingang/Gesendet/
Entwürfe/Spam/Papierkorb/Archiv/Postausgang) werden per Rolle zusammengeführt,
nicht wegen Namensunterschied gedoppelt. Details: `backend/11-folders.go`.
## Bedienung
- **Web (Default):** `./emailforwarder` → Browser auf `127.0.0.1:8087`.
- **CLI (Cronjob/Cutover):** `./emailforwarder --run all` (einmalig) oder
`./emailforwarder --run dr-gold --watch` (Delta-Schleife).