"use client"; import { useRef, useState, type FormEvent } from "react"; import type { PublicSmtpSettings } from "@/lib/mail/types"; type ApiResponse = { message?: string; ok?: boolean; settings?: PublicSmtpSettings; }; export default function SmtpSettingsForm({ initialSettings, configured }: { initialSettings: PublicSmtpSettings; configured: boolean }) { const formRef = useRef(null); const [settings, setSettings] = useState(initialSettings); const [isConfigured, setIsConfigured] = useState(configured); const [message, setMessage] = useState(""); const [error, setError] = useState(""); const [pending, setPending] = useState(false); async function submitForm(form: HTMLFormElement, action: "save" | "test") { setMessage(""); setError(""); setPending(true); const formData = new FormData(form); formData.set("action", action); try { const response = await fetch("/api/admin/smtp", { method: "POST", body: formData }); const result = await response.json() as ApiResponse; if (result.settings) { setSettings(result.settings); setIsConfigured(Boolean(result.settings.host && result.settings.username && result.settings.hasPassword && result.settings.fromAddress && result.settings.recipientAddress)); } if (!response.ok) throw new Error(result.message ?? "SMTP-Aktion fehlgeschlagen."); setMessage(result.message ?? "Aktion erfolgreich."); } catch (err) { setError(err instanceof Error ? err.message : "SMTP-Aktion fehlgeschlagen."); } finally { setPending(false); } } function submit(event: FormEvent) { event.preventDefault(); void submitForm(event.currentTarget, "save"); } function test() { if (formRef.current) void submitForm(formRef.current, "test"); } return ( <>

Status

SMTP ist {isConfigured ? "konfiguriert" : "nicht konfiguriert"}.

{settings.lastTestAt &&

Letzte Testmail: {new Date(settings.lastTestAt).toLocaleString("de-DE")} ({settings.lastTestStatus})

} {settings.lastDeliveryAt &&

Letzter Formularversand: {new Date(settings.lastDeliveryAt).toLocaleString("de-DE")} ({settings.lastDeliveryStatus})

} {settings.lastError &&

Letzter Fehler: {settings.lastError}

}

Für Apple Mail/iCloud bitte smtp.mail.me.com, Port 587, STARTTLS und ein app-spezifisches Passwort verwenden.

{message &&

{message}

} {error &&

{error}

}
); }