update
This commit is contained in:
1 parent
cc2b84dcad
commit
3bda7d6eb6
28 files changed
+2330
-49
No files matched your search
@@ -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.",
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user