// Package pop3 implementiert ING-02: den POP3-Server (RFC 1939) mit den // Zuständen Authorization/Transaction/Update und den Kernbefehlen // USER/PASS/STAT/LIST/RETR/DELE/QUIT. Bewusste Neuimplementierung nach // NEXARCH-Techstack, kein 1:1-Übernehmen von archivmail — gleiche // Konvention wie mail/internal/imap (ING-01): eigene, schmale // Authenticator/MailboxStore-Schnittstellen statt geteilter Typen über // Paketgrenzen hinweg, CRLF-sichere Antworten (response.go). package pop3 import "context" // Authenticator prüft Zugangsdaten für PASS. type Authenticator interface { Authenticate(ctx context.Context, username, password string) (ok bool, err error) } // Message ist eine Nachricht im Postfach (nur Nummer/Größe für STAT/ // LIST — Inhalt kommt separat über MailboxStore.Retrieve, damit LIST // nicht unnötig alle Nachrichteninhalte laden muss). type Message struct { Number int Size int64 } // MailboxStore liefert Postfachzustand für STAT/LIST/RETR/DELE. type MailboxStore interface { // List liefert alle (noch nicht gelöschten) Nachrichten des Postfachs // username. List(ctx context.Context, username string) ([]Message, error) // Retrieve liefert den vollständigen Inhalt einer Nachricht // (Akzeptanzkriterium 2: RETR liefert vollständige Nachrichten). Retrieve(ctx context.Context, username string, number int) ([]byte, error) // Delete löscht die angegebenen Nachrichtennummern ENDGÜLTIG — wird // AUSSCHLIESSLICH im Update-Zustand nach einem regulären QUIT // aufgerufen (Akzeptanzkriterium 2/Pflichtprüfung 3: DELE markiert // nur innerhalb der Sitzung, committet wird erst hier). Delete(ctx context.Context, username string, numbers []int) error }