feat(core): the e-mail program after Java, measured against Java
The program sends to its account's SMTP server, one connection for each recipient, and fetches its mails by POP3; the server now sends mails on to other domains by MX and returns notices to their senders. The program's folders are in the snapshot and go back into the project. EmailClientRun plays six stories with two servers; the mail oracles run in the language's locale, so Java's notice dates match the core's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -725,3 +725,42 @@ Gemessen (01.10.2026):
|
||||
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.
|
||||
|
||||
## E-Mail-Programm (F3.3b)
|
||||
|
||||
`EmailClientRun` lässt Javas E-Mail-Programm (`EmailAnwendung`) auf
|
||||
`mail-lan` mit zwei Servern arbeiten: `filius.de` auf .30 (die Konten von
|
||||
`EmailRun`), `andere.de` auf .31 (carla); der DNS-Server kennt die MX beider
|
||||
Domains, und beide Server fragen ihn. Das Konto ist annas; eine Mail entsteht
|
||||
wie im Fenster (Absender „Anna Muster <anna@filius.de>“, die Adressen der
|
||||
Felder) und geht an den SMTP-Server des Kontos, Abholen fragt den
|
||||
POP3-Server. Aufgezeichnet werden die Frames, was Programm und Server ihren
|
||||
Fenstern sagen, und am Ende Posteingang, Gesendete und die Konten beider
|
||||
Server. Alle Mail-Orakel laufen seitdem in einer JVM mit dem Gebietsschema
|
||||
der Sprache (`-Duser.language=de -Duser.country=DE`, für die englischen Fälle
|
||||
en_GB): die Benachrichtigung trägt das Datum aus `DateFormat`, dessen Länge
|
||||
jede spätere Sequenznummer verschiebt.
|
||||
|
||||
Gemessen (01.10.2026):
|
||||
|
||||
* Das Programm baut für jeden Empfänger (An, Cc, Bcc) eine eigene Verbindung
|
||||
zum SMTP-Server des Kontos auf, immer an Port 25 (der SMTP-Port des
|
||||
Kontos wird nicht gelesen). Ein Name als Server wird bei jeder Verbindung
|
||||
neu aufgelöst; die DNS-Anfrage geht noch vor dem FIN der letzten
|
||||
Verbindung, das SYN der neuen danach.
|
||||
* Der Server schickt Mails an fremde Domains in seinem eigenen Thread
|
||||
weiter: MX nachschlagen, dann ein neuer SMTP-Client je Weiterleitung. Ohne
|
||||
MX bekommt der Absender der eigenen Domain eine Benachrichtigung; ist der
|
||||
Absender fremd, schickt der Server sie mit leerem Absender (`MAIL FROM:
|
||||
<>`) an dessen Domain, nachgeschlagen im Mitarbeiter-Thread, der dafür
|
||||
wartet.
|
||||
* Abholen: `USER`, `PASS`, `STAT`, `LIST`, dann je Mail `RETR` und `DELE`,
|
||||
`QUIT`. Eine Antwort, die nicht passt, kommt als Ausnahme ins Fenster
|
||||
(`java.lang.Exception: -ERR user or password wrong`), ein
|
||||
Verbindungsfehler ebenso (`TimeOutException`).
|
||||
* Ohne Server schickt der Client nur ein SYN (bekannter Java-Fehler aus
|
||||
`TcpRun`); ein unbekannter Servername kommt als
|
||||
`VerbindungsException: Ziel konnte nicht bestimmt werden!`.
|
||||
* Wer von zwei fast gleichzeitig gebauten Sockets die nächste
|
||||
TCP-Startnummer zieht, entscheidet der Thread-Takt (Programm und
|
||||
Weiterleitung des Servers, wenige Millisekunden auseinander).
|
||||
|
||||
Reference in New Issue
Block a user