false, 'error' => 'Methode nicht erlaubt.']); exit; } // ── Eingaben validieren ────────────────────────────────── $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); $paket = trim($_POST['paket'] ?? ''); $stil = trim($_POST['stil'] ?? 'Nicht angegeben'); $farbe = trim($_POST['farbe'] ?? 'Nicht angegeben'); $nachricht = trim($_POST['nachricht'] ?? ''); $fehler = []; if (empty($name)) $fehler[] = 'Name fehlt.'; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $fehler[] = 'E-Mail ungültig.'; if (empty($paket)) $fehler[] = 'Paket fehlt.'; if (empty($nachricht)) $fehler[] = 'Nachricht fehlt.'; if (!empty($fehler)) { http_response_code(422); echo json_encode(['ok' => false, 'errors' => $fehler]); exit; } // ── Honeypot Spam-Schutz ───────────────────────────────── if (!empty($_POST['website'])) { // Bot hat das versteckte Feld ausgefüllt — still ignorieren echo json_encode(['ok' => true]); exit; } // ── Eingaben bereinigen ────────────────────────────────── function clean(string $str): string { return htmlspecialchars(strip_tags($str), ENT_QUOTES, 'UTF-8'); } $name = clean($name); $email = clean($email); $paket = clean($paket); $stil = clean($stil); $farbe = clean($farbe); $nachricht = clean($nachricht); // ── Boundary für multipart E-Mail ─────────────────────── $boundary = '----=_Part_' . md5(uniqid()); $nl = "\r\n"; // ── E-Mail Header ──────────────────────────────────────── $headers = "From: " . ABSENDER_NAME . " " . $nl; $headers .= "Reply-To: {$name} <{$email}>" . $nl; $headers .= "MIME-Version: 1.0" . $nl; $headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"" . $nl; $headers .= "X-Mailer: PHP/" . phpversion() . $nl; // ── Betreff ────────────────────────────────────────────── $betreff = BETREFF_PREFIX . ' ' . $paket . ' — ' . $name; // ── E-Mail Body (HTML) ─────────────────────────────────── $html = "

BEWERBUNG SERVICE.CH

NEUE ANFRAGE EINGEGANGEN

Name
{$name}
E-Mail
Gewünschtes Paket
{$paket}
Design-Stil
{$stil}
Farbe
{$farbe}
Nachricht
{$nachricht}
"; // ── Nachricht zusammenbauen ────────────────────────────── $body = "--{$boundary}{$nl}"; $body .= "Content-Type: text/html; charset=UTF-8{$nl}"; $body .= "Content-Transfer-Encoding: 8bit{$nl}{$nl}"; $body .= $html . $nl; // ── Anhänge verarbeiten ────────────────────────────────── $anhang_fehler = []; if (!empty($_FILES['dokumente'])) { // Normalisierung: einzelne Datei vs. mehrere Dateien $files = $_FILES['dokumente']; if (!is_array($files['name'])) { $files = array_map(fn($v) => [$v], $files); } $anzahl = count($files['name']); for ($i = 0; $i < $anzahl; $i++) { if ($files['error'][$i] !== UPLOAD_ERR_OK) continue; if ($files['size'][$i] > MAX_DATEIGROESSE) { $anhang_fehler[] = $files['name'][$i] . ' ist zu gross (max. 10 MB).'; continue; } $mime = mime_content_type($files['tmp_name'][$i]); if (!in_array($mime, ERLAUBTE_TYPEN)) { $anhang_fehler[] = $files['name'][$i] . ' — Dateityp nicht erlaubt.'; continue; } $dateiinhalt = chunk_split(base64_encode(file_get_contents($files['tmp_name'][$i]))); $dateiname = basename($files['name'][$i]); $body .= "--{$boundary}{$nl}"; $body .= "Content-Type: {$mime}; name=\"{$dateiname}\"{$nl}"; $body .= "Content-Disposition: attachment; filename=\"{$dateiname}\"{$nl}"; $body .= "Content-Transfer-Encoding: base64{$nl}{$nl}"; $body .= $dateiinhalt . $nl; } } $body .= "--{$boundary}--{$nl}"; // ── E-Mail senden ──────────────────────────────────────── $gesendet = mail(EMPFAENGER_EMAIL, $betreff, $body, $headers); if ($gesendet) { // Automatische Bestätigung an den Kunden $best_headers = "From: " . ABSENDER_NAME . " " . $nl; $best_headers .= "Reply-To: info@bewerbung-service.ch" . $nl; $best_headers .= "MIME-Version: 1.0" . $nl; $best_headers .= "Content-Type: text/html; charset=UTF-8" . $nl; $best_betreff = "Ihre Anfrage bei Bewerbung-Service.ch"; $best_html = "

BEWERBUNG SERVICE.CH

Guten Tag {$name}

Vielen Dank für Ihre Anfrage. Wir haben Ihre Nachricht erhalten und melden uns innerhalb von 24 Stunden bei Ihnen.

Ihr gewähltes Paket: {$paket}

Bei Fragen erreichen Sie uns unter: info@bewerbung-service.ch

Freundliche Grüsse
Bewerbung-Service.ch

"; mail($email, $best_betreff, $best_html, $best_headers); echo json_encode([ 'ok' => true, 'message' => 'Ihre Anfrage wurde erfolgreich übermittelt.', 'anhang_hinweise' => $anhang_fehler ]); } else { http_response_code(500); echo json_encode(['ok' => false, 'error' => 'E-Mail konnte nicht gesendet werden. Bitte versuchen Sie es erneut.']); } ?>