// Package imap implementiert ING-01: das IMAP-Server-Grundgerüst // (TCP-Listener, Command-Parser, Session-Zustandsmaschine, Grundbefehle // CAPABILITY/LOGIN/SELECT/FETCH/LOGOUT). Bewusste Neuimplementierung nach // NEXARCH-Techstack, kein 1:1-Übernehmen von archivmail (siehe "Bekannte // Fehler vermeiden": Header-/Zeilen-Injection durch Stringkonkatenation // ohne CRLF-Prüfung — alle Antworten laufen ausschließlich über // writeLine/writeTagged, die eingebettete CR/LF im Text ersetzen, siehe // response.go). // // Authentifizierung (Authenticator) und Postfachzugriff (MailboxStore) // sind schmale Schnittstellen — echte Anbindung an Benutzerverwaltung/ // Nachrichtenspeicher ist Sache späterer Ingestion-Tickets (IMP-01 u. a., // siehe "Nicht Bestandteil dieser Kachel" im Ticket). Dieses Paket kennt // weder Core-IAM noch mail/internal/storage. package imap import "context" // Authenticator prüft Zugangsdaten für LOGIN. type Authenticator interface { Authenticate(ctx context.Context, username, password string) (ok bool, err error) } // Message ist eine minimale Nachrichtendarstellung für FETCH (nur Flags, // keine Inhalte — Inhaltszugriff ist Sache späterer Kacheln). type Message struct { SequenceNumber uint32 Flags []string } // MailboxStore liefert Postfachzustand für SELECT/FETCH. type MailboxStore interface { // Select liefert die Anzahl der Nachrichten im Postfach mailboxName. // ok=false, wenn das Postfach nicht existiert. Select(ctx context.Context, mailboxName string) (exists int, ok bool, err error) // Fetch liefert die Nachrichten im aktuell gewählten Postfach, deren // Sequenznummer in seqNumbers enthalten ist. Fetch(ctx context.Context, mailboxName string, seqNumbers []uint32) ([]Message, error) }