feat: SMTP-Stack mit konfigurierbaren Mailvorlagen

Bisher gab es nur zwei fest im Code verdrahtete E-Mails (Einladung,
Passwort-Reset) und die SMTP-Verbindung kam ausschließlich aus
Umgebungsvariablen. Jetzt:

- SMTP-Verbindung unter Einstellungen > E-Mail konfigurierbar (Host,
  Port, Verschlüsselung, Zugangsdaten verschlüsselt gespeichert,
  Absender), mit Testmail-Versand. Die Mail-Logik wandert dafür nach
  @kc/platform/mail, damit API und Worker sie gemeinsam nutzen.
- Mailvorlagen-Verwaltung: jedes Ereignis hat eine feste "Definition"
  (Name, Auslöser, verfügbare Platzhalter/Daten), Betreff/Text sind
  editierbar, je Vorlage einzeln aktivierbar, mit Testversand anhand
  von Beispieldaten. Unbekannte Platzhalter werden beim Speichern
  abgelehnt.
- Neue Ereignisse verdrahtet: Ticket erstellt (Bestätigung an Kunde),
  Personal antwortet auf Ticket (Benachrichtigung an Kunde), Rechnung
  ausgestellt, sowie die zuvor zurückgestellte Funktion "Panel-
  Zugangsdaten per E-Mail senden" nach einem Passwort-Reset. Diese
  laufen über die Jobqueue (mail.template), analog zu discord.notify.
- Versandprotokoll (letzte 100 Versuche, ohne Inhalte) einsehbar unter
  Einstellungen > E-Mail.
- Migration 022, Rechte email.read (Admin+) / email.write (Superadmin).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kundencenter 2026-09-28 12:53:29 +02:00
parent b112647ff1
commit a68b4cf6ec
18 changed files with 385 additions and 42 deletions

12
pnpm-lock.yaml generated
View file

@ -40,9 +40,6 @@ importers:
mysql2:
specifier: ^3.24.4
version: 3.24.4(@types/node@26.6.3)
nodemailer:
specifier: ^10.0.10
version: 10.0.10
otpauth:
specifier: ^9.5.2
version: 9.5.2
@ -59,9 +56,6 @@ importers:
'@types/node':
specifier: ^26.6.3
version: 26.6.3
'@types/nodemailer':
specifier: ^8.0.2
version: 8.0.2
'@types/pdfkit':
specifier: ^0.17.6
version: 0.17.6
@ -230,10 +224,16 @@ importers:
mysql2:
specifier: ^3.24.4
version: 3.24.4(@types/node@26.6.3)
nodemailer:
specifier: ^10.0.10
version: 10.0.10
devDependencies:
'@types/node':
specifier: ^26.6.3
version: 26.6.3
'@types/nodemailer':
specifier: ^8.0.2
version: 8.0.2
typescript:
specifier: ^7.0.2
version: 7.0.2