In den Anfangsjahren des Web wurde mangels Fachkenntnis oder anderer Möglichkeiten häufig auf die Möglichkeit zurückgegriffen, beim action-Attribut eines form-Elements einfach so etwas wie mailto:ich@example.org anzugeben. Einige Browser sendeten die Formulardaten dann direkt an die betreffende Mailadresse. Diese Lösung ist jedoch obsolet und sollte keinesfalls mehr verwendet werden. Denn sie funktioniert allenfalls in bestimmten Software-Umgebungen.

Die saubere Lösung besteht darin, beim action-Attribut eine HTTP-Adresse anzugeben, hinter der sich ein Script verbirgt. Das Script kann die Formulardaten abrufen und in gewünschter Form verarbeiten. In diesem Fall generiert es eine E-Mail aus den Daten und versendet diese an eine gewünschte Mailadresse. Die Formulardaten werden dabei mit der HTTP-Methode POST übergeben. Im Formular muss also method="post" im einleitenden <form>-Tag notiert werden.

Wenn Sie sich mit Programmierung gar nicht auskennen oder zumindest nicht mit der Sprache PHP, können Sie das nachfolgende Listing dennoch nachvollziehen, da es zum besseren Verständnis ausführlich kommentiert ist.

PHP-Script

<?php
 
// ======= Konfiguration:
 
$mailTo = 'IhrName@provider.xy';
$mailFrom = '"FormMailer" <info@provider.xy>';
$mailSubject    = 'Feedback';
$returnPage = 'http://server/Formular-verarbeitet.html';
$returnErrorPage = 'http://server/Fehler-aufgetreten.html';
$mailText = "";
 
// ======= Text der Mail aus den Formularfeldern erstellen:
 
// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) { 
   // alle Formularfelder der Reihe nach durchgehen:
   foreach($_POST as $name => $value) {
      // Wenn der Feldwert aus mehreren Werten besteht:
      // (z.B. <select multiple>)
      if(is_array($value)) {
          // "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ":\n";
          // alle Werte des Feldes abarbeiten
          foreach($valueArray as $entry) {
             // Einrückungsleerzeichen, Wert und Zeilenumbruch 
             // dem Mailtext hinzufügen
             $mailText .= "   " . $value . "\n";
          } // ENDE: foreach
      } // ENDE: if  
      // Wenn der Feldwert ein einzelner Feldwert ist:
      else {
          // "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ": " . $value . "\n";
      } // ENDE: else
   } // ENDE: foreach
} // if
 
// ======= Korrekturen vor dem Mailversand 
 
// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
 if(get_magic_quotes_gpc()) {
     // eventuell eingefügte Backslashes entfernen
     $mailtext = stripslashes($mailtext);
 }
 
// ======= Mailversand
 
// Mail versenden und Versanderfolg merken
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
 
// ======= Return-Seite an den Browser senden
 
// Wenn der Mailversand erfolgreich war:
if($mailSent == TRUE) {
   // Seite "Formular verarbeitet" senden:
   header("Location: " . $returnPage);
}
// Wenn die Mail nicht versendet werden konnte:
else {
   // Seite "Fehler aufgetreten" senden:
   header("Location: " . $returnErrorPage);
}
 
// ======= Ende
 
exit();
 
?>

Erläuterung

Um dieses Script nutzen zu können, müssen Sie über einen Webserver oder über gemieteten Webspace verfügen, wo PHP verwendbar ist. Sind diese Voraussetzungen erfüllt, können Sie den Scriptcode unter einem geeigneten Dateinamen wie z.B. formmail.php im Webdokumentbereich des Webservers speichern. Beachten Sie bei Linux oder anderen Unix-Derivaten, dass die Dateirechte der Scriptdatei so gesetzt werden müssen, dass sie für den Webserver ausführbar ist.

Die ersten paar Zeilen des Scripts müssen Sie anpassen. Weisen Sie der Variablen $mailTo die Mailadresse zu, an die Formulardaten gesendet werden sollen. Bei $mailFrom sollte entweder eine technische Systemadresse wie postmaster@unsere-domain.xy oder eine Defaultadresse wie info@unsere-domain.xy eingesetzt werden. Der Variablen $mailSubject wird der Betreff der Mail zugewiesen. Aus dem Betreff sollte hervorgehen, dass es sich um ausgefüllte Formulardaten handelt.

Die Hauptaufgabe des Scripts besteht darin, aus den erhaltenen POST-Daten die Mail zu erstellen und zu versenden. Dennoch muss das Script am Ende auch etwas an den Browser senden. Denn der Anwender, der das Formular abgesendet hat, erwartet natürlich einen nächsten Inhalt im Browserfenster. Da das Script aber die Adresse ist, die aufgerufen wurde, liegt es in seinem Aufgabenbereich, diese Inhalte zu liefern. Im obigen Script ist das so gelöst, dass das Script am Ende einfach einen Redirect (eine Weiterleitung) zu einer gewöhnlichen HTML-Datei durchführt. Diese Datei wird an den Browser gesendet. Der Form-Mailer ist so geschrieben, dass im Erfolgsfall, also wenn die Mail versendet wurde, eine andere HTML-Datei zurückgegeben wird als im Fehlerfall. Die beiden Dateien werden am Beginn des Scripts in den Variablen $returnPage und $returnErrorPage definiert. Notieren Sie dort vollständige HTTP-URLs, auch dann, wenn die HTML-Dateien auf dem gleichen Server liegen wie das Form-Mailer-Script.

Insgesamt benötigen Sie also:

Hier ein Beispiel-Set für die drei HTML-Dateien:

Formular:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Feedback</title> 
</head> 
<body>
<h1>Feedback</h1>
<form method="post" action="/form-mailer.php">
<p><label>Name:<br><input type="text" name="Name"></label></p>
<p><label>E-Mail:<br><input type="text" name="Mail"></label></p>
<p><label>Betreff:<br><input type="text" name="Betreff"></label></p>
<p><label>Nachricht:<br>
<textarea name="Nachricht" cols="50" rows="8"></textarea></label></p>
<input type="submit" value="OK">
</form>
</body>
</html>

Erfolgsfall nach Absenden des Formulars:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Feedback: Danke</title> 
</head> 
<body>
<h1>Feedback: Danke!</h1>
<p>Wir haben Ihre Nachricht erhalten und werden uns bei Klärungsbedarf 
an die von Ihnen angegebene Mailadresse wenden.</p> 
</body>
</html>

Fehlerfall nach Absenden des Formulars:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Feedback: Danke</title> 
</head> 
<body>
<h1>Feedback: Fehler!</h1>
<p>Leider ist ein Fehler aufgetreten, und Ihre Formulardaten konnten 
nicht an uns gesendet werden.</p> 
</body>
</html>

Weitere Hinweise

Das obige Form-Mail-Script ist prinzipiell für beliebige Formulare mit beliebig vielen Feldern geeignet. Nicht geeignet ist es für Formulare mit Datei-Upload-Feldern. Dazu müsste das Script nicht nur die POST-Daten auswerten, sondern auch die separat davon übersendeten Dateien.

Es ist durchaus möglich, das Form-Mail-Script flexibler zu gestalten. Wenn Sie es beispielsweise für ein Formular einsetzen, in dem der Anwender seine Mailadresse in einem Feld <input type="text" name="mail"> eingeben kann oder muss, können Sie im Scripts auch notieren:
$mailFrom = $_POST['mail'];
Beachten Sie jedoch, dass vorher stets eine Prüfung der Daten erfolgen sollte. In diesem Fall ist es vor allem wichtig, dass in $_POST['mail'] keine Zeilenumbruchzeichen enthalten sind, da bösartige Anwender auf diese Weise versuchen könnten, zusätzliche, Schaden anrichtende Mailheaderzeilen zu injizieren.
Auf keinen Fall sollten Sie im obigen Form-Mail-Script die Variable $mailTo durch eine vom Anwender selbst bestimmbare Angabe ersetzen. Denn dadurch erschaffen Sie eine perfekte Spamschleuder.

Die oben skizzierte Lösung für den Fehlerfall ist nicht sehr professionell. Üblich ist es in solchen Fällen, das Formular erneut anzuzeigen, mit den zuvor eingegebenen Daten vorzubelegen und eine gezielte Fehlermeldung auszugeben. Das würde jedoch weiteres Scripting erfordern. Das obige Beispiel sollte jedoch aus Verständnisgründen möglichst einfach sein.

 


Korrekturen, Hinweise und Ergänzungen
Bitte scheut euch nicht und meldet, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Diskutieren wählen. Es ist keine Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden allerdings kommentarlos entfernt.