From bbece6ca5fb5f3b1b734b5e01538eb0a8dbbe250 Mon Sep 17 00:00:00 2001 From: Kundencenter Date: Mon, 28 Sep 2026 13:05:11 +0200 Subject: [PATCH] =?UTF-8?q?fix(web):=20SMTP-Speichern=20zeigte=20f=C3=A4ls?= =?UTF-8?q?chlich=20"Server=20nicht=20erreichbar"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Formular griff nach dem await auf e.currentTarget zu, um das Passwortfeld zu leeren. React setzt currentTarget nach der Event- Verarbeitung auf null, wodurch eine normale (keine ApiError-)Exception flog und die generische Netzwerkfehler-Meldung angezeigt wurde – obwohl das Speichern selbst serverseitig erfolgreich war. Die Formularreferenz wird jetzt vor dem await festgehalten. Co-Authored-By: Claude Sonnet 5 --- apps/web/src/app/(app)/einstellungen/email/page.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/src/app/(app)/einstellungen/email/page.tsx b/apps/web/src/app/(app)/einstellungen/email/page.tsx index b44c518..65517cf 100644 --- a/apps/web/src/app/(app)/einstellungen/email/page.tsx +++ b/apps/web/src/app/(app)/einstellungen/email/page.tsx @@ -20,11 +20,12 @@ function SmtpForm({ s, w, onSaved }: { s: Settings; w: boolean; onSaved: () => v const [testTo, setTestTo] = useState(''); const [testBusy, setTestBusy] = useState(false); async function save(e: FormEvent) { e.preventDefault(); if (!w) return; setBusy(true); setMsg(null); - const f = new FormData(e.currentTarget); const v = (k: string) => (String(f.get(k) ?? '').trim() || null); + const form = e.currentTarget; + const f = new FormData(form); const v = (k: string) => (String(f.get(k) ?? '').trim() || null); const pw = String(f.get('password') ?? ''); try { await api('PUT', '/admin/email/settings', { host: v('host'), port: Number(f.get('port')) || 587, secureMode: f.get('secureMode'), username: v('username'), fromName: v('fromName'), fromEmail: v('fromEmail'), ...(pw ? { password: pw } : {}) }); - setMsg({ k: 'ok', t: 'Gespeichert.' }); (e.currentTarget.elements.namedItem('password') as HTMLInputElement).value = ''; onSaved(); + setMsg({ k: 'ok', t: 'Gespeichert.' }); (form.elements.namedItem('password') as HTMLInputElement).value = ''; onSaved(); } catch (x) { setMsg({ k: 'err', t: errMsg(x) }); } finally { setBusy(false); } } async function sendTest() {