"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; interface Status { configured: boolean; enabled: boolean; user: string | null; imapHost: string | null; verifiedAt: number | null; smtpHost: string | null; smtpPort: number | null; } export function MailboxForm({ status }: { status: Status }) { const router = useRouter(); const [imapHost, setImapHost] = useState(status.imapHost ?? ""); const [imapPort, setImapPort] = useState("993"); const [user, setUser] = useState(status.user ?? ""); const [password, setPassword] = useState(""); const [allowInsecureTls, setAllowInsecureTls] = useState(false); const [smtpHost, setSmtpHost] = useState(status.smtpHost ?? ""); const [smtpPort, setSmtpPort] = useState(status.smtpPort?.toString() ?? "465"); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setLoading(true); setError(null); const res = await fetch("/api/settings/mailbox", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ imapHost, imapPort: Number(imapPort), user, password, allowInsecureTls, smtpHost: smtpHost || undefined, smtpPort: smtpPort ? Number(smtpPort) : undefined, }), }); setLoading(false); if (!res.ok) { const data = await res.json().catch(() => null); setError(data?.error ?? "Не удалось подключиться к почтовому ящику"); return; } setPassword(""); router.refresh(); } async function handleDisable() { setLoading(true); await fetch("/api/settings/mailbox", { method: "DELETE" }); setLoading(false); router.refresh(); } return (

Почтовый ящик для запросов (IMAP)

{status.configured ? (

{status.enabled ? "Активен" : "Отключен"}: {status.user} @ {status.imapHost} {status.verifiedAt && ` — проверен ${new Date(status.verifiedAt).toLocaleString("ru-RU")}`}

) : (

Ещё не настроен.

)}

Исходящая почта (SMTP) — для уведомлений клиенту о статусе заявки. Тот же логин/пароль, что выше. Необязательно.

{error &&

{error}

}
{status.configured && status.enabled && ( )}
); }