v1.4: HTML-E-Mail-Benachrichtigungen im Schulportal-Stil

- server/src/mail.js: baueHtmlMail/buttonHtml (600-px-Karte, Kopfzeile in
  Hinterstein-Farben #22333b + Amber, Zeilen-Tabelle, Status-Box, Zitat-Box,
  Aktions-Button 'Zum Mieterportal', Footer), immer mit Plain-Text-Fallback
- index.js: Ticket, neue Unterhaltung und Antwort versenden HTML + Text
  (multipart/alternative ueber die Mail-API)
- Vorschauen: preview/08-mail-ticket.png, preview/08-mail-nachricht.png
- E2E live verifiziert (Zustellung an axel@hocks.eu, status=sent), Doku
This commit is contained in:
2026-10-02 13:09:50 +02:00
parent 311153b3c3
commit 0bdf6e7b28
5 changed files with 177 additions and 26 deletions
+17 -6
View File
@@ -151,13 +151,16 @@ tar -czf mp-dist.tar.gz -C dist .
- **Mail-Stack live (seit 02.10.2026):** Container `mp-mail` + `mp-mail-api` laufen
auf hocks.eu unter `/opt/mp-mail` (Relay über `hocks-eu.mail.protection.outlook.com`).
Testmail und API-`/send` (mit `X-Api-Token`) verifiziert (status=sent); ohne Token 401.
- **Mail-Benachrichtigungen (seit v1.2 nginx-Proxy, seit v1.3 serverseitig):** Der
Portal-nginx proxiet `POST /api/mail/send` an `http://mp-mail-api:8080/send` mit
Token aus `portal.env` (403 für alles außer POST). **Versand aus der Node-API**
- **Mail-Benachrichtigungen (seit v1.2 nginx-Proxy, seit v1.3 serverseitig,
seit v1.4 im HTML-Format wie im Schulportal):** Der Portal-nginx proxiet
`POST /api/mail/send` an `http://mp-mail-api:8080/send` mit Token aus
`portal.env` (403 für alles außer POST). **Versand aus der Node-API**
(`server/src/mail.js`, fire-and-forget): neue Schadensmeldung → alle aktiven
Verwaltungsbenutzer, neue Nachricht/Antwort → Gegenstelle (Mieter ↔ Verwaltung,
Auflösung über Wohnungsbezug). E2E verifiziert: Zustellung an axel@hocks.eu
mit Postfix status=sent (02.10., 10:42 Uhr).
Verwaltungsbenutzer, neue Nachricht/Antwort → Gegenstelle. HTML im
Schulportal-Stil (`baueHtmlMail`: 600-px-Karte, Kopfzeile in Hinterstein-
Farben #22333b/Amber, Zeilen-Tabelle, Status-Box, Zitat-Box, Button „Zum
Mieterportal“, Footer) immer mit Plain-Text-Fallback (multipart/alternative).
E2E verifiziert: Zustellung an axel@hocks.eu, Postfix status=sent.
## 6. Konventionen & Besonderheiten
@@ -229,6 +232,14 @@ an axel@hocks.eu) E2E verifiziert; Testdaten danach bereinigt. deploy.sh baut
das API-Image auf dem Server; `.env`-Symlink auf portal.env für
Compose-Interpolation beachten (POSTGRES_PASSWORD!).
**Erledigt 02.10. (v1.4 live):** HTML-E-Mail-Benachrichtigungen im Schulportal-
Stil: `baueHtmlMail`/`buttonHtml` in `server/src/mail.js` (600-px-Karte,
Kopfzeile Hinterstein-Farben, Zeilen, Status-Box, Zitat, Aktions-Button, Footer),
immer mit Plain-Text-Fallback (multipart/alternative). Umgesetzt für
Schadensmeldung, neue Unterhaltung und Antwort. Vorschauen lokal renderbar
(`mail-vorschau*.html`, Screenshots in `preview/08-*.png`). Live getestet:
Zustellung an axel@hocks.eu status=sent, Test-Ticket bereinigt.
**Offen:**
- Zertifikatserneuerung prüfen (per 01.12.2026): NPM-Renewer sollte cert 9 über HTTP-Challenge
erneuern; sonst certbot/webroot + Kopie nach npm-9 wiederholen.