Code-Snippets » Kontaktformular mit mail()

Kontaktformular mit mail()

Hier ist ein Beispiel für ein einfaches, sicheres Kontaktformular. Es enthält einen CSRF-Token, der verhindert, dass das Formular durch simples neuladen der Seite erneut abgeschickt werden kann und einen Honeypot gegen Spam-Bots. Ein Honeypot ist eine effektive Methode, um Spam-Bots zu erkennen und abzuwehren.

Code anklicken zum kopieren

<?php
session_start();

// Funktion, um POST-Eingaben zu bereinigen
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

// Überprüfung, ob das Formular abgesendet wurde
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Überprüfung des CSRF-Tokens
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Ungültiger CSRF-Token');
}

// Überprüfung des Honeypot-Felds
if (!empty($_POST['email_confirm'])) {
die('Spam-Bot erkannt');
}

// Validierung der Benutzereingaben
$name = test_input($_POST['name']);
$email = test_input($_POST['email']);
$message = test_input($_POST['message']);

if (empty($name) || empty($email) || empty($message)) {
die('Bitte füllen Sie alle Pflichtfelder aus.');
}

// Sichere Verarbeitung der Benutzereingaben und Versand der E-Mail
$subject = 'Neue Kontaktanfrage';
$headers = "From: Kontaktformular auf deiner Seite <kontakt@deinewebsite.de>" . "rn";
$headers .= "Reply-To: $name <$email>" . "rn";
$message = wordwrap($message, 70);

// Empfänger-E-Mail-Adresse hier eintragen:
$recipient = 'kontakt@deinewebsite.de';

$mailSent = mail($recipient, $subject, $message, $headers);
if ($mailSent) {
echo 'Vielen Dank für Ihre Nachricht! Wir werden uns in Kürze bei Ihnen melden.';
} else {
echo 'Beim Versenden der Nachricht ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.';
}

// CSRF-Token aktualisieren
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

exit();
}

// Generiere CSRF-Token
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

$csrfToken = $_SESSION['csrf_token'];
?>

<!DOCTYPE html>
<html>
<head>
<title>Kontaktformular</title>
</head>
<body>
<h1>Kontaktformular</h1>
<form method="post" action="">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
<div>
<label for="name">Name:</label>
<input type="text" name="name" id="name" required>
</div>
<div>
<label for="email">E-Mail:</label>
<input type="email" name="email" id="email" required>
</div>
<div style="display: none;">
<label for="email_confirm">Bitte lassen Sie dieses Feld leer:</label>
<input type="text" name="email_confirm" id="email_confirm">
</div>
<div>
<label for="message">Nachricht:</label>
<textarea name="message" id="message" rows="5" required></textarea>
</div>
<div>
<input type="submit" value="Nachricht senden">
</div>
</form>
</body>
</html>

Code anklicken zum kopieren


Du kannst das komplette Script deinen Wünschen nach anpassen. Beachte, dass du in der Zeile $headers = "From: Kontaktformular auf deiner Seite <kontakt@deinewebsite.de>" . "rn"; eine E-Mail-Adresse verwendest, die die gleiche Domain, wie deine Seite hat. Sonst könnte die E-Mail unter Umständen von einigen Spam-Filtern als Spam eingestuft werden! Aus diesem Grund befindet sich in der nächsten Zeile ein Reply-To. Diese enthält die E-Mail-Adresse des Nutzers und du kannst von deinem E-Mail-Programm direkt auf Antworten klicken um die richtige Adresse im Empfänger-Feld zu haben.


Du darfst dieses Snippet kostenlos und uneingeschränkt nutzen, einschließlich kommerzieller Zwecke! Ich würde mich sehr darüber freuen, wenn du als kleine Geste der Anerkennung einen Link zu meiner Webseite auf deiner eigenen Seite platzieren könntest. Vielen Dank! :)