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

View file

@ -0,0 +1,34 @@
# Codex-Prompt — Durchstich
Kopiervorlage für Codex. Erst `Codex-Briefing.md` + `Projektbeschreibung.md`
lesen, dann NUR den Durchstich bauen (nicht mehr).
---
Baue den **Durchstich** des Email-Forwarder (Go-Single-Binary, Hausstil steht als
Stub-Gerüst). Ziel: **ein Konto, nur den Posteingang, sauber und wiederholbar
umziehen.** Lies zuerst `Codex-Briefing.md` und `Projektbeschreibung.md`; die 6
harten Regeln sind bindend.
Umfang des Durchstichs:
1. `02-database.go`: SQLite-Schema anlegen (accounts, folder_map, copied, jobs),
plus `GetAccount`, `ListAccounts`, `SaveAccount`, `AlreadyCopied`, `MarkCopied`.
2. `04-imap-source.go`: `OpenIMAPSource` für IMAP mit allen drei Security-Modi
(`tls`/`starttls`/`none`) und `SrcInsecure`. `Folders()` (mit SPECIAL-USE +
Delim) und `Fetch("INBOX")` (`UID FETCH BODY[] FLAGS INTERNALDATE`, streamend).
3. `05-imap-target.go`: `OpenIMAPTarget` (gleiche Security-Logik), `Folders()`,
`Delim()`, `EnsureFolder`, `Append` mit Flags + INTERNALDATE.
4. `06-mbox.go`: `MboxWriter` + `Append` (korrektes "From "-Trennen, >From-Quoting).
5. `07-migrate.go`: `migrateAccount` für nur "INBOX": pro Mail Message-ID gegen
`copied` prüfen; sonst `Append` (IMAP) **und** mbox schreiben, dann `MarkCopied`.
`RunMigration(name, false)` ruft es für ein Konto auf.
6. `main.go --run <konto>` muss durchlaufen.
Bewusst NOCH NICHT: Web-CRUD, Viewer, Weiterleiten, alle Ordner rekursiv,
Rollen-Mapping (11-folders.go), `--watch`, POP3. Nur INBOX, nur CLI.
**Abnahme:** Konto per SQL/Seed eintragen (Klartext-IMAP-Quelle testen!),
`./emailforwarder --run test` zweimal laufen lassen → beim zweiten Mal werden
0 Mails kopiert (Idempotenz), Ziel-INBOX und lokale mbox enthalten dieselben
Mails mit erhaltenen Flags und Original-Datum.