feat(core): the e-mail server after Java, measured against Java

SMTP on port 25 stores mails for the domain's accounts as Java reads
them anew and tells a local sender of unknown recipients; POP3 on port
110 hands them out. The mailboxes are in the snapshot and go back into
the project. EmailRun plays four stories over the network; MailCases
feeds Java's workers without one (26 cases, de and en). 18 cases name
Java bugs that the core does not take.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 18:58:26 +00:00
co-authored by Claude Opus 5.5
parent 8438b42018
commit 015635926f
26 changed files with 45188 additions and 14 deletions
+41
View File
@@ -684,3 +684,44 @@ Gemessen (01.10.2026):
Regel „TCP 80 verwerfen“ über die erlaubende geschoben, und das SYN des
Browsers bleibt an der Firewall hängen. Javas Router-Server lauschte auch
hier in einem Lauf nie (`run.sh` wiederholt).
## E-Mail-Server (F3.3a)
`EmailRun` lässt Javas einfachen Client (`ClientBaustein`) auf `mail-lan`
rohe SMTP- und POP3-Befehle an einen E-Mail-Server schicken (Domain
`filius.de`, Konten aus `/mailserver/konten.txt`: anna mit zwei Mails, bob
ohne). Aufgezeichnet werden die Frames, die Fensterzeilen von Server und
Client und am Ende die Konten (jede Mail als `Email.toString`, neu,
gelöscht). `MailCases` füttert Javas `SMTPMitarbeiter` und
`POP3Mitarbeiter` ohne Netz über einen Socket, der nur mitschreibt, mit den
Fällen aus `packages/core/test/email-server.cases.txt`, auf Deutsch und auf
Englisch. Die Netz-Abläufe bleiben bei dem, was Java richtig macht; Javas
Fehler zeigen die Fälle.
Gemessen (01.10.2026):
* Der Server startet POP3 (Port 110) vor SMTP (Port 25); POP3s Socket nimmt
die erste TCP-Startnummer. Die SMTP-Antworten sind übersetzt („220
Willkommen bei“), die POP3-Antworten englisch. SMTP schreibt seine
Fensterzeile nach dem Senden, POP3 davor.
* Eine angenommene Mail speichert Java so, wie es ihren Text neu liest
(`new Email(email.toString())`): Zeilenenden ohne `\r`, kein Bcc.
* SMTP-Fehler: Nach einer Mail beantwortet der Server den nächsten Befehl mit
503 und behält Absender, Empfänger und Text (die zweite Mail ging auch an
die erste Empfängerin, mit dem ersten Text); unbekannte oder verfrühte
Befehle bleiben ohne Antwort; ein `quit` im Mailtext beendet die
Verbindung; die Domain wird genau verglichen (`FILIUS.DE` ist fremd); ein
leerer Absender mit unbekanntem Empfänger und ein Empfänger ohne `@`
werfen im Mitarbeiter, die Verbindung endet; eine unbekannte Kopfzeile
beendet den Kopf (der Betreff wird Text), ohne Leerzeile fehlt die erste
Zeile; eine Benachrichtigung an eine Mail ohne From hat `To: null`.
* Die Benachrichtigung über unbekannte Empfänger trägt Javas Datum im
Gebietsschema der JVM (hier `10/1/26, 6:30 PM`) und die Adresse des
Servers.
* POP3 zählt Mails ab 0. Fehler: eine Mail lässt sich nur einmal abrufen;
`LIST` ohne Mails gibt `-ERR`, `LIST 0` listet alle; vor der Anmeldung
kommen leere Antworten; eine fehlende Mail kommt als leere `+OK`-Mail,
`DELE` darauf leer; ein fehlendes oder falsches Argument wirft, die
Verbindung endet; nach `DELE` nummeriert `LIST` neu, `RETR` nicht.
* Die Größe in `STAT` und `LIST` ist Javas eigene: die Länge von Text,
Absender, Betreff, Empfängerliste (`[a, b]`) und Datum.