<?php
// ============================================================
// UTF-8 AUSGABE
// ============================================================
header('Content-Type: text/html; charset=UTF-8');
// ============================================================
// KONFIGURATION
// ============================================================
$empfaenger = "ungesehen@neurodiv-sn.de";
$absender = "ungesehen@neurodiv-sn.de";
$uploadOrdner = __DIR__ . "/uploads";
$maxDateigroesse = 25 * 1024 * 1024;
$erlaubteTypen = [
"image/jpeg" => "jpg",
"image/png" => "png"
];
$meldung = "";
$erfolg = false;
// ============================================================
// FORMULAR VERARBEITEN
// ============================================================
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$name = trim($_POST["name"] ?? "");
$email = trim($_POST["email"] ?? "");
$auswahl = trim($_POST["auswahl"] ?? "");
$einwilligung = isset($_POST["einwilligung"]);
// ========================================================
// FORMULARDATEN PRÜFEN
// ========================================================
if ($name === "") {
$meldung = "Bitte geben Sie Ihren Vor- und Nachnamen ein.";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$meldung = "Bitte geben Sie eine gültige E-Mail-Adresse ein.";
} elseif ($auswahl === "") {
$meldung = "Bitte wählen Sie eine Option aus.";
} elseif (!$einwilligung) {
$meldung = "Bitte bestätigen Sie die Einwilligung.";
} elseif (
!isset($_FILES["bild"]) ||
$_FILES["bild"]["error"] !== UPLOAD_ERR_OK
) {
$meldung = "Bitte wählen Sie ein Bild aus.";
} else {
$datei = $_FILES["bild"];
// ====================================================
// DATEIGRÖSSE PRÜFEN
// ====================================================
if ($datei["size"] > $maxDateigroesse) {
$meldung = "Das Bild darf maximal 25 MB groß sein.";
} else {
// =================================================
// ECHTEN MIME-TYP ERMITTELN
// =================================================
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeTyp = finfo_file($finfo, $datei["tmp_name"]);
finfo_close($finfo);
// =================================================
// DATEITYP PRÜFEN
// =================================================
if (!isset($erlaubteTypen[$mimeTyp])) {
$meldung = "Es sind nur JPG-, JPEG- und PNG-Dateien erlaubt.";
} else {
// =============================================
// UPLOAD-ORDNER ERSTELLEN
// =============================================
if (!is_dir($uploadOrdner)) {
mkdir($uploadOrdner, 0755, true);
}
// =============================================
// SICHEREN DATEINAMEN ERZEUGEN
// =============================================
$endung = $erlaubteTypen[$mimeTyp];
$neuerDateiname =
date("Y-m-d_H-i-s") .
"_" .
bin2hex(random_bytes(8)) .
"." .
$endung;
$ziel = $uploadOrdner . "/" . $neuerDateiname;
// =============================================
// DATEI SPEICHERN
// =============================================
if (!move_uploaded_file($datei["tmp_name"], $ziel)) {
$meldung = "Die Datei konnte nicht gespeichert werden.";
} else {
// =========================================
// E-MAIL VORBEREITEN
// =========================================
$betreff = "Neue Bildeinreichung";
$nachricht =
"Es wurde eine neue Bildeinreichung über das Online-Formular gesendet.\n\n" .
"Vor- und Nachname:\n" .
$name . "\n\n" .
"E-Mail:\n" .
$email . "\n\n" .
"Auswahl:\n" .
$auswahl . "\n\n" .
"Datei:\n" .
$neuerDateiname . "\n\n" .
"Dateigröße:\n" .
number_format(
$datei["size"] / 1024 / 1024,
2,
",",
"."
) .
" MB\n\n" .
"Dateityp:\n" .
$mimeTyp . "\n\n" .
"Die Einwilligung zur Weiterverarbeitung des Bildes wurde bestätigt.";
// =========================================
// DATEI EINLESEN
// =========================================
$dateiInhalt = file_get_contents($ziel);
// =========================================
// MIME-GRENZE
// =========================================
$boundary = md5(
uniqid(
(string)time(),
true
)
);
// =========================================
// E-MAIL-HEADER
// =========================================
$header = [];
$header[] = "From: " . $absender;
$header[] = "Reply-To: " . $email;
$header[] = "MIME-Version: 1.0";
$header[] =
'Content-Type: multipart/mixed; boundary="' .
$boundary .
'"';
// =========================================
// TEXT DER E-MAIL
// =========================================
$mailInhalt =
"--" .
$boundary .
"\r\n" .
"Content-Type: text/plain; charset=UTF-8\r\n" .
"Content-Transfer-Encoding: 8bit\r\n\r\n" .
$nachricht .
"\r\n\r\n";
// =========================================
// BILD ALS ANHANG
// =========================================
$mailInhalt .=
"--" .
$boundary .
"\r\n" .
'Content-Type: ' .
$mimeTyp .
'; name="' .
$neuerDateiname .
'"' .
"\r\n" .
'Content-Disposition: attachment; filename="' .
$neuerDateiname .
'"' .
"\r\n" .
"Content-Transfer-Encoding: base64\r\n\r\n" .
chunk_split(
base64_encode($dateiInhalt)
) .
"\r\n";
// =========================================
// E-MAIL BEENDEN
// =========================================
$mailInhalt .=
"--" .
$boundary .
"--";
// =========================================
// E-MAIL SENDEN
// =========================================
$mailGesendet = mail(
$empfaenger,
$betreff,
$mailInhalt,
implode("\r\n", $header)
);
// =========================================
// ERGEBNIS
// =========================================
if ($mailGesendet) {
$erfolg = true;
$meldung =
"Vielen Dank! Ihre Bildeinreichung wurde erfolgreich übermittelt.";
} else {
$meldung =
"Das Bild wurde gespeichert, aber die Benachrichtigungs-E-Mail konnte nicht versendet werden.";
}
}
}
}
}
}
ImpressumDatenschutz