This commit is contained in:
Engin committed 2026-09-10 14:31:05 +02:00
1 parent cc2b84dcad
commit 3bda7d6eb6
28 files changed
+2330 -49

No files matched your search

+93
View File
@@ -0,0 +1,93 @@
"use server";
import { transporter } from "@/lib/mailer";
export interface ContactFormState {
success: boolean;
error?: string;
fieldErrors?: Partial<Record<
"unternehmen" | "vorname" | "nachname" | "email" | "telefon" | "nachricht" | "datenschutz",
string
>>;
}
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<ContactFormState> {
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: `
<h2>Neue Kontaktanfrage</h2>
<p><strong>Unternehmen:</strong> ${unternehmen || "-"}</p>
<p><strong>Name:</strong> ${vorname} ${nachname}</p>
<p><strong>E-Mail:</strong> ${email}</p>
<p><strong>Telefon:</strong> ${telefon}</p>
<p><strong>Nachricht:</strong></p>
<p>${nachricht.replace(/\n/g, "<br />")}</p>
`,
});
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.",
};
}
}