Schreiben als E-Mail übernehmen #5

Closed
opened 2026-08-22 23:27:40 +00:00 by florian.wilde · 3 comments
Owner

Problem

Vieles geht heute per E-Mail raus, nicht per Brief. Dafür brauche ich
Betreff und Text getrennt — im Fließtext des Briefes stecken sie zusammen,
und ich baue sie jedes Mal von Hand auseinander. Dabei fällt regelmäßig
etwas heraus, das in den Brief gehört hätte.

Was ich will

Beim erzeugten Schreiben zusätzlich zur Word-Ausgabe:

  • Betreff und Text getrennt, jeweils mit eigenem Kopierknopf
  • Ist beim Empfänger eine E-Mail-Adresse hinterlegt, ein Knopf, der das
    Mailprogramm mit Adresse, Betreff und Text als Entwurf öffnet
  • Nach dem Versand derselbe Weg „In die Akte legen" wie beim Brief,
    Kontaktart „E-Mail"

Akzeptanzkriterien

  • Betreff und Text sind einzeln kopierbar
  • Der Text ist auf E-Mail zugeschnitten: kein Absenderblock, keine
    Anschrift, keine Datumszeile — die gehören in den Brief, nicht in
    die Mail
  • Der Bestellungsabsatz bleibt drin; ohne ihn kommt die Auskunft nicht
  • Ohne hinterlegte Adresse erscheint der Mail-Knopf nicht, statt ins
    Leere zu führen
  • Ablegen erzeugt ein Ausgangsdokument wie beim Brief, erkennbar als
    E-Mail und nicht als Brief

Offene Entscheidung — bitte vor Beginn festlegen

mailto:-Link oder .eml-Datei?

  • mailto ist sofort da, verschluckt aber lange Texte je nach
    Mailprogramm und Betriebssystem. Für einen Brief mit Bestellungsabsatz
    ist das eine reale Grenze.
  • .eml öffnet zuverlässig einen Entwurf mit vollem Text, ist etwas mehr
    Arbeit und für manche Mailprogramme ungewohnt.

Meine Neigung: .eml, weil die Texte hier lang sind und ein abgeschnittener
Brief schlimmer ist als ein zusätzlicher Klick.

Abhängigkeit

Baut auf „Schreiben erzeugen: Word-Datei, Ablage in der Akte,
Wiedervorlage" auf.

Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula
nachtragen.

## Problem Vieles geht heute per E-Mail raus, nicht per Brief. Dafür brauche ich Betreff und Text getrennt — im Fließtext des Briefes stecken sie zusammen, und ich baue sie jedes Mal von Hand auseinander. Dabei fällt regelmäßig etwas heraus, das in den Brief gehört hätte. ## Was ich will Beim erzeugten Schreiben zusätzlich zur Word-Ausgabe: - **Betreff** und **Text** getrennt, jeweils mit eigenem Kopierknopf - Ist beim Empfänger eine E-Mail-Adresse hinterlegt, ein Knopf, der das Mailprogramm mit Adresse, Betreff und Text als Entwurf öffnet - Nach dem Versand derselbe Weg „In die Akte legen" wie beim Brief, Kontaktart „E-Mail" ## Akzeptanzkriterien - [ ] Betreff und Text sind einzeln kopierbar - [ ] Der Text ist auf E-Mail zugeschnitten: kein Absenderblock, keine Anschrift, keine Datumszeile — die gehören in den Brief, nicht in die Mail - [ ] Der Bestellungsabsatz bleibt drin; ohne ihn kommt die Auskunft nicht - [ ] Ohne hinterlegte Adresse erscheint der Mail-Knopf nicht, statt ins Leere zu führen - [ ] Ablegen erzeugt ein Ausgangsdokument wie beim Brief, erkennbar als E-Mail und nicht als Brief ## Offene Entscheidung — bitte vor Beginn festlegen `mailto:`-Link oder `.eml`-Datei? - **mailto** ist sofort da, verschluckt aber lange Texte je nach Mailprogramm und Betriebssystem. Für einen Brief mit Bestellungsabsatz ist das eine reale Grenze. - **.eml** öffnet zuverlässig einen Entwurf mit vollem Text, ist etwas mehr Arbeit und für manche Mailprogramme ungewohnt. Meine Neigung: `.eml`, weil die Texte hier lang sind und ein abgeschnittener Brief schlimmer ist als ein zusätzlicher Klick. ## Abhängigkeit Baut auf „Schreiben erzeugen: Word-Datei, Ablage in der Akte, Wiedervorlage" auf. _Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula nachtragen._
florian.wilde added the in-arbeit label 2026-08-23 08:27:48 +00:00
florian.wilde started working 2026-08-23 08:28:02 +00:00
Author
Owner

🤖 Claude Code hat mit der Umsetzung begonnen.

Die offene Entscheidung ist gefallen — im Chat nachgefragt, Antwort: beides. .eml immer, dazu ein mailto-Knopf für kurze Texte, der bei Überlänge verschwindet statt still abzuschneiden. Die Grenze und ihre Begründung stehen am Ende im Abschlusskommentar.

  • Branch: feat/5-schreiben-als-email
  • Verstanden als: Dasselbe Schreiben soll als E-Mail hinausgehen können — Betreff und Text getrennt kopierbar, per mailto oder als .eml-Entwurf, und die Ablage in der Akte kennzeichnet es als E-Mail statt als Brief.
  • Geplantes Vorgehen:
    • E-Mail-Fassung als reine Funktion aus dem Brieftext ableiten: ohne Absenderblock, Anschrift und Datumszeile, aber mit Bestellungsabsatz — testbar ohne Datenbank
    • .eml-Erzeugung (RFC 5322, quoted-printable für Umlaute) über eine eigene Download-Route wie beim Word-Download
    • E-Mail-Adresse aus dem gewählten Kontakt übernehmen; ohne Adresse kein Mail-Knopf
    • Ablage wie beim Brief, aber als E-Mail erkennbar (Titel-Präfix und Dokumentart), im Editor umschaltbar Brief/E-Mail

Zeiterfassung läuft.

🤖 **Claude Code hat mit der Umsetzung begonnen.** **Die offene Entscheidung ist gefallen** — im Chat nachgefragt, Antwort: **beides.** `.eml` immer, dazu ein mailto-Knopf für kurze Texte, der bei Überlänge verschwindet statt still abzuschneiden. Die Grenze und ihre Begründung stehen am Ende im Abschlusskommentar. - Branch: `feat/5-schreiben-als-email` - Verstanden als: Dasselbe Schreiben soll als E-Mail hinausgehen können — Betreff und Text getrennt kopierbar, per mailto oder als .eml-Entwurf, und die Ablage in der Akte kennzeichnet es als E-Mail statt als Brief. - Geplantes Vorgehen: - E-Mail-Fassung als reine Funktion aus dem Brieftext ableiten: ohne Absenderblock, Anschrift und Datumszeile, aber **mit** Bestellungsabsatz — testbar ohne Datenbank - `.eml`-Erzeugung (RFC 5322, quoted-printable für Umlaute) über eine eigene Download-Route wie beim Word-Download - E-Mail-Adresse aus dem gewählten Kontakt übernehmen; ohne Adresse kein Mail-Knopf - Ablage wie beim Brief, aber als E-Mail erkennbar (Titel-Präfix und Dokumentart), im Editor umschaltbar Brief/E-Mail Zeiterfassung läuft.
florian.wilde worked for 33 minutes 2026-08-23 09:01:48 +00:00
florian.wilde added zu-testen and removed in-arbeit labels 2026-08-23 09:02:31 +00:00
Author
Owner

✅ Umsetzung abgeschlossen — bereit zum Testen.

Was geändert wurde

  • Umschalter Als Brief / Als E-Mail im Schreiben-Editor.
  • E-Mail-Fassung aus dem (bearbeiteten) Brieftext abgeleitet: ohne Absenderblock, Anschrift, Datumszeile — mit Bestellungsabsatz. Betreff und Text einzeln kopierbar.
  • mailto für kurze Texte, Knopf verschwindet ab 1800 kodierten Zeichen mit Erklärung; .eml immer (öffnet als Entwurf, Umlaute korrekt kodiert, bewusst ohne erfundenen Absender).
  • E-Mail-Adresse kommt aus dem gewählten Kontakt oder von Hand; ohne Adresse kein Mailknopf, sondern ein Hinweis.
  • Ablage kennzeichnet als „E-Mail: …" und legt die E-Mail-Fassung samt Empfängeradresse ab — in der Akte steht, was tatsächlich hinausging.
  • Version 1.5.0, keine Migration.

Geänderte Dateien

  • src/lib/schreiben/email.ts (neu), src/lib/schreiben/eml.ts (neu)
  • src/app/(app)/schreiben/eml/route.ts (neu)
  • src/components/schreiben/schreiben-editor.tsx, src/server/actions/schreiben.ts, src/lib/schreiben/arten.ts
  • tests/email.test.ts (neu), e2e/email.spec.ts (neu), Changelog, README, Doku

So testest du es

  1. git switch feat/5-schreiben-als-email und npm run dev
  2. /schreiben/neu?art=FREI, einen Kontakt mit E-Mail-Adresse wählen (oder Adresse von Hand eintragen)
  3. Als E-Mail klicken → Erwartet: Betreff und Text getrennt, der Text beginnt mit „Sehr geehrte…", kein Absenderblock, der Bestellungsabsatz steht drin
  4. Im Mailprogramm öffnen → dein Mailprogramm öffnet einen Entwurf mit Adresse, Betreff, Text
  5. Als E-Mail-Entwurf (.eml) → Datei herunterladen, doppelklicken → öffnet als Entwurf (Outlook/Thunderbird), Umlaute korrekt
  6. Gegenprobe: Adresse leeren → beide Knöpfe verschwinden, Hinweis erscheint; Kopieren bleibt
  7. Zweite Gegenprobe: Brieftext künstlich verlängern (Absatz mehrfach einfügen) → der mailto-Knopf verschwindet mit Begründung, .eml bleibt
  8. In die Akte legen → unter Dokumente (Richtung Ausgang) steht „E-Mail: …", die PDF trägt die Empfängeradresse im Kopf

Aufgewendete Zeit: 00:34
Pull Request: #16


Zur Längengrenze: 1800 Zeichen nach URL-Kodierung. mailto übergibt alles in der Adresszeile; verlässliche Obergrenzen gibt es nicht, ab ~2000 wird es je nach System unzuverlässig. Umlaute kosten kodiert sechs Zeichen statt eins — deshalb wird nach der Kodierung gerechnet. Ein typischer Rückkaufswert-Brief liegt über der Grenze, ein kurzes freies Schreiben darunter.

Nach Freigabe: /issue-freigabe 5

✅ **Umsetzung abgeschlossen — bereit zum Testen.** <!-- claude-status branch: feat/5-schreiben-als-email pr: 16 zeit_sekunden: 2026 --> **Was geändert wurde** - Umschalter **Als Brief / Als E-Mail** im Schreiben-Editor. - E-Mail-Fassung aus dem (bearbeiteten) Brieftext abgeleitet: ohne Absenderblock, Anschrift, Datumszeile — mit Bestellungsabsatz. Betreff und Text einzeln kopierbar. - **mailto** für kurze Texte, Knopf verschwindet ab 1800 kodierten Zeichen mit Erklärung; **.eml** immer (öffnet als Entwurf, Umlaute korrekt kodiert, bewusst ohne erfundenen Absender). - E-Mail-Adresse kommt aus dem gewählten Kontakt oder von Hand; ohne Adresse kein Mailknopf, sondern ein Hinweis. - Ablage kennzeichnet als „E-Mail: …" und legt die E-Mail-Fassung samt Empfängeradresse ab — in der Akte steht, was tatsächlich hinausging. - Version 1.5.0, keine Migration. **Geänderte Dateien** - `src/lib/schreiben/email.ts` *(neu)*, `src/lib/schreiben/eml.ts` *(neu)* - `src/app/(app)/schreiben/eml/route.ts` *(neu)* - `src/components/schreiben/schreiben-editor.tsx`, `src/server/actions/schreiben.ts`, `src/lib/schreiben/arten.ts` - `tests/email.test.ts` *(neu)*, `e2e/email.spec.ts` *(neu)*, Changelog, README, Doku **So testest du es** 1. `git switch feat/5-schreiben-als-email` und `npm run dev` 2. `/schreiben/neu?art=FREI`, einen Kontakt **mit E-Mail-Adresse** wählen (oder Adresse von Hand eintragen) 3. **Als E-Mail** klicken → Erwartet: Betreff und Text getrennt, der Text beginnt mit „Sehr geehrte…", kein Absenderblock, der Bestellungsabsatz steht drin 4. **Im Mailprogramm öffnen** → dein Mailprogramm öffnet einen Entwurf mit Adresse, Betreff, Text 5. **Als E-Mail-Entwurf (.eml)** → Datei herunterladen, doppelklicken → öffnet als Entwurf (Outlook/Thunderbird), Umlaute korrekt 6. Gegenprobe: Adresse leeren → beide Knöpfe verschwinden, Hinweis erscheint; Kopieren bleibt 7. Zweite Gegenprobe: Brieftext künstlich verlängern (Absatz mehrfach einfügen) → der mailto-Knopf verschwindet mit Begründung, .eml bleibt 8. **In die Akte legen** → unter Dokumente (Richtung Ausgang) steht „E-Mail: …", die PDF trägt die Empfängeradresse im Kopf **Aufgewendete Zeit:** 00:34 **Pull Request:** #16 --- **Zur Längengrenze:** 1800 Zeichen nach URL-Kodierung. mailto übergibt alles in der Adresszeile; verlässliche Obergrenzen gibt es nicht, ab ~2000 wird es je nach System unzuverlässig. Umlaute kosten kodiert sechs Zeichen statt eins — deshalb wird nach der Kodierung gerechnet. Ein typischer Rückkaufswert-Brief liegt über der Grenze, ein kurzes freies Schreiben darunter. Nach Freigabe: `/issue-freigabe 5`
Author
Owner

🚀 Freigegeben und nach main übernommen.

  • Merge-Commit: 96a9bc4
  • Pull Request: #16 (gemergt)
  • Gesamtaufwand: 00:34
  • Veröffentlicht als v1.5.0 — keine Migration nötig.

Ein Stolperer bei der Freigabe, der Erwähnung verdient: Der Tag zeigte zunächst auf den falschen Commit, weil ein git pull am zwischenzeitlich bekannten Authentifizierungs-Schluckauf scheiterte und ich vor der Kontrolle getaggt hatte. Bemerkt, Tag gelöscht und auf dem richtigen Merge-Commit neu gesetzt — der veröffentlichte v1.5.0 stimmt.

cd /opt/docker/configs/betreuungs-cockpit
./scripts/update.sh

Issue wird geschlossen.

🚀 **Freigegeben und nach `main` übernommen.** <!-- claude-status merge: 96a9bc4d632e79e600ae2ec2da69118e05f309e8 pr: 16 zeit_sekunden: 2026 --> - Merge-Commit: `96a9bc4` - Pull Request: #16 (gemergt) - Gesamtaufwand: 00:34 - Veröffentlicht als **v1.5.0** — keine Migration nötig. Ein Stolperer bei der Freigabe, der Erwähnung verdient: Der Tag zeigte zunächst auf den falschen Commit, weil ein `git pull` am zwischenzeitlich bekannten Authentifizierungs-Schluckauf scheiterte und ich vor der Kontrolle getaggt hatte. Bemerkt, Tag gelöscht und auf dem richtigen Merge-Commit neu gesetzt — der veröffentlichte `v1.5.0` stimmt. ```bash cd /opt/docker/configs/betreuungs-cockpit ./scripts/update.sh ``` Issue wird geschlossen.
florian.wilde removed the zu-testen label 2026-08-23 09:20:08 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Total Time Spent: 33 minutes
florian.wilde
33 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#5