"use server"; import { transporter } from "@/lib/mailer"; export interface ContactFormState { success: boolean; error?: string; fieldErrors?: Partial>; } const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; // Erlaubt Ziffern, Leerzeichen, +, -, /, Klammern - deckt gängige Telefonformate ab. const PHONE_REGEX = /^[0-9+\-/() ]{6,20}$/; export async function sendContactMessage( _prevState: ContactFormState, formData: FormData, ): Promise { const unternehmen = (formData.get("unternehmen") as string | null)?.trim() ?? ""; const vorname = (formData.get("vorname") as string | null)?.trim() ?? ""; const nachname = (formData.get("nachname") as string | null)?.trim() ?? ""; const email = (formData.get("email") as string | null)?.trim() ?? ""; const telefon = (formData.get("telefon") as string | null)?.trim() ?? ""; const nachricht = (formData.get("nachricht") as string | null)?.trim() ?? ""; const datenschutz = formData.get("datenschutz"); const fieldErrors: ContactFormState["fieldErrors"] = {}; if (!vorname) fieldErrors.vorname = "Bitte geben Sie Ihren Vornamen an."; if (!nachname) fieldErrors.nachname = "Bitte geben Sie Ihren Nachnamen an."; if (!email) { fieldErrors.email = "Bitte geben Sie Ihre E-Mail-Adresse an."; } else if (!EMAIL_REGEX.test(email)) { fieldErrors.email = "Bitte geben Sie eine gültige E-Mail-Adresse an."; } if (!telefon) { fieldErrors.telefon = "Bitte geben Sie Ihre Telefonnummer an."; } else if (!PHONE_REGEX.test(telefon)) { fieldErrors.telefon = "Bitte geben Sie eine gültige Telefonnummer an."; } if (!nachricht) { fieldErrors.nachricht = "Bitte geben Sie eine Nachricht ein."; } if (datenschutz !== "on") { fieldErrors.datenschutz = "Bitte bestätigen Sie die Datenschutzhinweise."; } if (Object.keys(fieldErrors).length > 0) { return { success: false, fieldErrors }; } try { await transporter.sendMail({ from: `"Basiclean Kontaktformular" <${process.env.SMTP_USER}>`, to: process.env.CONTACT_RECEIVER, replyTo: email, subject: `Neue Kontaktanfrage von ${vorname} ${nachname}`, text: [ `Unternehmen: ${unternehmen || "-"}`, `Name: ${vorname} ${nachname}`, `E-Mail: ${email}`, `Telefon: ${telefon}`, "", "Nachricht:", nachricht, ].join("\n"), html: `

Neue Kontaktanfrage

Unternehmen: ${unternehmen || "-"}

Name: ${vorname} ${nachname}

E-Mail: ${email}

Telefon: ${telefon}

Nachricht:

${nachricht.replace(/\n/g, "
")}

`, }); return { success: true }; } catch (error) { console.error("Fehler beim Senden der Kontaktanfrage:", error); return { success: false, error: "Die Nachricht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.", }; } }