Feat #5: Schreiben als E-Mail übernehmen #16

Merged
florian.wilde merged 1 commits from feat/5-schreiben-als-email into main 2026-08-23 09:19:00 +00:00
Owner

Was es tut

Im Schreiben-Editor gibt es den Umschalter Als Brief / Als E-Mail. Die E-Mail-Fassung wird aus dem — womöglich schon bearbeiteten — Brieftext abgeleitet: ohne Absenderblock, Anschrift und Datumszeile, mit Bestellungsabsatz. Betreff und Text einzeln kopierbar.

Die offene Entscheidung: beantwortet mit „beides"

Im Chat nachgefragt, Antwort: mailto und .eml.

„Im Mailprogramm öffnen" (mailto) für kurze Texte. Der Knopf verschwindet, sobald der kodierte Link 1800 Zeichen übersteigt — mailto übergibt den Text in der Adresszeile, deren Länge nirgends zugesichert ist. Ein stillschweigend halbierter Brief fällt erst beim Empfänger auf; ein fehlender Knopf sofort. Die Grenze wird nach der URL-Kodierung gerechnet: 900 Umlaute sind roh harmlos und kodiert weit drüber.

„Als E-Mail-Entwurf (.eml)" immer: RFC 5322 mit X-Unsent: 1 (öffnet als Entwurf), quoted-printable im Rumpf, RFC-2047-Kodierung für Umlaute im Betreff. Bewusst ohne From:-Kopf — ein erfundener Absender würde je nach Programm übernommen und die Mail ginge falsch hinaus.

Beide Knöpfe erscheinen nur mit E-Mail-Adresse (aus dem gewählten Kontakt übernommen oder von Hand eingetragen). Ohne Adresse bleibt das Kopieren — und ein Hinweis statt eines toten Knopfes.

Die Ablage kennt den Unterschied

Eine als E-Mail abgelegte Nachricht heißt in der Akte „E-Mail: …", und abgelegt wird die E-Mail-Fassung samt Empfängeradresse im Kopf der PDF — nicht der Brieftext. In der Akte soll stehen, was tatsächlich hinausging.

Eine Sicherung gegen stillen Verlust

emailFassung() schneidet den Briefkopf nur ab, wenn es die Anrede findet. Bei einem frei umgebauten Text wird nichts entfernt: Lieber ein Briefkopf zu viel in der Mail als stillschweigend verlorener Inhalt.

Geprüft

  • 20 Einheitstests: Ableitung ohne Verlust, mailto-Grenze nach Kodierung, .eml-Format samt Umlauten (RFC 2047 rückgerechnet), quoted-printable-Zeilengrenze.
  • Vier End-to-End-Tests auf beiden Geräteprofilen: Fassung ohne Briefkopf, .eml-Download, kein Mailknopf ohne Adresse, Ablage als gekennzeichnete E-Mail.
  • 590 Unit-Tests, 81 e2e, 0 Typfehler, Lint sauber, Produktionsbau steht.

Version auf 1.5.0 angehoben. Keine Migration nötig.

Closes #5

## Was es tut Im Schreiben-Editor gibt es den Umschalter **Als Brief / Als E-Mail**. Die E-Mail-Fassung wird aus dem — womöglich schon bearbeiteten — Brieftext abgeleitet: ohne Absenderblock, Anschrift und Datumszeile, **mit** Bestellungsabsatz. Betreff und Text einzeln kopierbar. ## Die offene Entscheidung: beantwortet mit „beides" Im Chat nachgefragt, Antwort: mailto **und** `.eml`. **„Im Mailprogramm öffnen" (mailto)** für kurze Texte. Der Knopf verschwindet, sobald der kodierte Link **1800 Zeichen** übersteigt — mailto übergibt den Text in der Adresszeile, deren Länge nirgends zugesichert ist. Ein stillschweigend halbierter Brief fällt erst beim Empfänger auf; ein fehlender Knopf sofort. Die Grenze wird **nach** der URL-Kodierung gerechnet: 900 Umlaute sind roh harmlos und kodiert weit drüber. **„Als E-Mail-Entwurf (.eml)"** immer: RFC 5322 mit `X-Unsent: 1` (öffnet als Entwurf), quoted-printable im Rumpf, RFC-2047-Kodierung für Umlaute im Betreff. Bewusst **ohne** `From:`-Kopf — ein erfundener Absender würde je nach Programm übernommen und die Mail ginge falsch hinaus. Beide Knöpfe erscheinen nur mit E-Mail-Adresse (aus dem gewählten Kontakt übernommen oder von Hand eingetragen). Ohne Adresse bleibt das Kopieren — und ein Hinweis statt eines toten Knopfes. ## Die Ablage kennt den Unterschied Eine als E-Mail abgelegte Nachricht heißt in der Akte **„E-Mail: …"**, und abgelegt wird die **E-Mail-Fassung** samt Empfängeradresse im Kopf der PDF — nicht der Brieftext. In der Akte soll stehen, was tatsächlich hinausging. ## Eine Sicherung gegen stillen Verlust `emailFassung()` schneidet den Briefkopf nur ab, wenn es die Anrede findet. Bei einem frei umgebauten Text wird **nichts** entfernt: Lieber ein Briefkopf zu viel in der Mail als stillschweigend verlorener Inhalt. ## Geprüft - **20 Einheitstests**: Ableitung ohne Verlust, mailto-Grenze nach Kodierung, .eml-Format samt Umlauten (RFC 2047 rückgerechnet), quoted-printable-Zeilengrenze. - **Vier End-to-End-Tests** auf beiden Geräteprofilen: Fassung ohne Briefkopf, .eml-Download, kein Mailknopf ohne Adresse, Ablage als gekennzeichnete E-Mail. - 590 Unit-Tests, 81 e2e, 0 Typfehler, Lint sauber, Produktionsbau steht. Version auf **1.5.0** angehoben. Keine Migration nötig. Closes #5
florian.wilde added 1 commit 2026-08-23 09:02:23 +00:00
Im Schreiben-Editor gibt es jetzt den Umschalter Brief/E-Mail. Die
E-Mail-Fassung wird aus dem - womoeglich bearbeiteten - Brieftext
abgeleitet: ohne Absenderblock, Anschrift und Datumszeile, aber mit dem
Bestellungsabsatz. Betreff und Text einzeln kopierbar.

Die offene Entscheidung aus dem Issue (mailto oder .eml) ist nach
Rueckfrage mit BEIDES beantwortet:

- mailto fuer kurze Texte. Der Knopf verschwindet, sobald der kodierte
  Link 1800 Zeichen uebersteigt - mailto uebergibt den Text in der
  Adresszeile, deren Laenge nirgends zugesichert ist, und ein halbierter
  Brief faellt erst beim Empfaenger auf. Die Grenze wird NACH der
  URL-Kodierung gerechnet; 900 Umlaute sind roh harmlos und kodiert
  weit drueber.
- .eml immer: RFC 5322 mit X-Unsent: 1, quoted-printable fuer den Rumpf,
  RFC-2047-Kodierung fuer Umlaute im Betreff. Bewusst ohne From-Kopf -
  ein erfundener Absender wuerde je nach Programm uebernommen.

Beide Knoepfe erscheinen nur mit E-Mail-Adresse (aus dem Kontakt
uebernommen oder von Hand). Ohne Adresse bleibt das Kopieren.

Die Ablage kennt den Unterschied: Eine E-Mail heisst in der Akte
"E-Mail: ...", und abgelegt wird die E-Mail-Fassung samt
Empfaengeradresse im Kopf der PDF - in der Akte soll stehen, was
tatsaechlich hinausging.

Sicherung in emailFassung(): Findet sich keine Anrede (frei umgebauter
Text), wird NICHTS entfernt. Lieber ein Briefkopf zu viel in der Mail
als stillschweigend verlorener Inhalt.

Geprueft: 20 Einheitstests, vier End-to-End-Tests auf beiden
Geraeteprofilen. 590 Unit-Tests, 81 e2e, null Typfehler.

Refs #5
florian.wilde merged commit 96a9bc4d63 into main 2026-08-23 09:19:00 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#16