v1.2: E-Mail-Benachrichtigungen an Portal angeschlossen

- nginx-Proxy POST /api/mail/send -> mp-mail-api:8080 (nur POST, 64k Limit)
- Token serverseitig via envsubst-Template + portal.env (gitignored, nur Server)
- src/lib/mail.ts: fire-and-forget Versand, Empfaenger-Aufloesung (Verwaltung/Mieter)
- Benachrichtigung: neue Schadensmeldung -> Verwaltung, Nachrichten/Antworten -> Gegenstelle
- E2E live verifiziert (versandt: true an axel@hocks.eu), GET 403
- Doku (kimi.md, README) nachgefuehrt
This commit is contained in:
2026-10-02 12:21:12 +02:00
parent fbe033ebd6
commit 5503ce5fc5
9 changed files with 225 additions and 18 deletions
+25 -3
View File
@@ -13,6 +13,12 @@ import {
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import { Textarea } from '@/components/ui/textarea'
import {
sendeBenachrichtigung,
verwaltungsAdressen,
nachrichtenText,
einheitLabel,
} from '../lib/mail'
import {
Select,
SelectContent,
@@ -46,7 +52,7 @@ const categories = [
]
function NewTicketDialog() {
const { dispatch, role, me, meineEinheit } = useStore()
const { dispatch, role, me, meineEinheit, benutzer, units } = useStore()
const [open, setOpen] = useState(false)
const [title, setTitle] = useState('')
const [category, setCategory] = useState('Sanitär')
@@ -55,12 +61,15 @@ function NewTicketDialog() {
const submit = () => {
if (!title.trim()) return
const unitId = role === 'tenant' ? meineEinheit.id : 'hs-1'
const einheit = units.find((u) => u.id === unitId) ?? meineEinheit
const mieterName = role === 'tenant' ? (me?.name ?? 'Mieter') : 'Hinterstein Immobilien (intern)'
dispatch({
type: 'addTicket',
ticket: {
id: `t-${Date.now()}`,
unitId: role === 'tenant' ? meineEinheit.id : 'hs-1',
tenant: role === 'tenant' ? (me?.name ?? 'Mieter') : 'Hinterstein Immobilien (intern)',
unitId,
tenant: mieterName,
title: title.trim(),
description: description.trim() || '–',
category,
@@ -69,6 +78,19 @@ function NewTicketDialog() {
createdAt: new Date().toLocaleDateString('de-DE'),
},
})
// Verwaltung per E-Mail benachrichtigen (fire-and-forget)
sendeBenachrichtigung(
verwaltungsAdressen(benutzer),
`Neue Schadensmeldung: ${title.trim()} (${einheitLabel(einheit)})`,
nachrichtenText(
`Im Mieterportal wurde eine neue Schadensmeldung erstellt.\n\n` +
`Wohnung: ${einheitLabel(einheit)}\n` +
`Meldung von: ${mieterName}\n` +
`Kategorie: ${category}\n` +
`Dringlichkeit: ${priority}\n\n` +
`${title.trim()}\n${description.trim() || '–'}`,
),
)
setTitle('')
setDescription('')
setOpen(false)