E-Mail mit PHP senden (2)

Wenn das Formular abgeschickt wurde, dann sollte man es auf Fehler untersuchen. Manche machen sich sogar einen Spaß daraus, unausgefüllte Formulare abzusenden. Und was hast Du davon - einen vollen Briefkasten welcher Dir nicht nützt.

Um solchen Dingen entgegen zu wirken erstellen wir die Datei pruefe-email.php. Daten aus dem Formular müssen wir nun nicht mehr importieren, dies haben wir bereits in der Datei email.php erledigt. Und so bleibt Folgendes:
<?php
// --- Variable zum Fehler sammeln ---
$fehler_angaben = array("0"=>"<p align=center>Bei der Prüfung des Formulares sind Fehler aufgetreten, prüfe daher noch einmal:</p>\n");
// --- Fehler suchen ---
if(strlen($name) <= '4') // --> prüft den Namen ob er mindestens 4 Zeichen enthält
  {
    $fehler_name = "<center>Deinen Namen</center>\n";
    array_push($fehler_angaben,$fehler_name);
  }
if(strlen($email) <= '7') // --> prüft die E-Mail ob sie mindestens 8 Zeichen enthält
  {
    $fehler_email = "<center>Deine E-Mail</center>\n";
    array_push($fehler_angaben,$fehler_email);
  }
else
  {
    if(strstr($email,"@") && strstr($email,".")) // --> E-Mail hat 8 Zeichen, gibt es auch @ und .?
      { }
    else
      {
        $fehler_email = "<center>Deine E-Mail</center>\n";
        array_push($fehler_angaben,$fehler_nameemail);
      }
  }
if($betreff == 'Bitte auswählen') // --> prüft ob der Betreff verändert wurde
  {
    $fehler_betreff = "<center>Deinen Betreff</center>\n";
    array_push($fehler_angaben,$fehler_betreff);
  }
if(strlen($nachricht) <= '9') // --> prüft die Nachricht ob sie mindestens 10 Zeichen enthält
  {
    $fehler_nachricht = "<center>Deine Nachricht</center>\n";
    array_push($fehler_angaben,$fehler_nachricht);
  }

// --- Fehlermenge feststellen ---
$fehler_anzahl = count($fehler_angaben);
if($fehler_anzahl >= '2')
  {
    // --- Es gab Fehler in der Eingabe - noch einmal das Formular ---
    // --- Dieses Mal existieren alle Variablen - nichts neu bestimmen ---
    @include_once "privates/kontakt/formular.php";
  }
else
  {
    // --- Beim User bedanken und nochmal E-Mail anzeigen ---
    echo "<h1>E-Mail senden</h1>\n";
    echo "<p>Vielen Dank für das Ausfüllen meines Formulars.</p>\n";
    echo "<p>Deine E-Mail mit folgendem Inhalt wird zum Senden vorbereitet.</p>\n";
    echo "<p>Dein Name: $name</p>\n";
    echo "<p>Deine E-Mail: $email</p>\n";
    echo "<p>Dein Betreff: $betreff</p>\n";
    echo "<p>Deine Nachricht:</p>\n";
    echo "<p>$nachricht</p>\n";
    // --- E-Mail vorbereiten ---
    $to = "Deine@email.adresse"; // --- HIER MUSS DEINE E-MAIL ADRESSE HIN!!! ---
    $subject = "$betreff (vom Homepageformular)"; // --- ( ) damit Du weißt, dass die Email von der HP kommt
    $message = "$nachricht\nBetreff:$subject\nName:$name\nE-Mail:$email";
    $header = "From: $email\r\n"; // --- wichtig: \r\n!!!

    // --- E-Mail senden ---
    if (@mail($to,$subject,$message,$header))
      {
        echo "<p>Ihre E-Mail wurde gesendet</p>\n";
      }
    else
      {
        echo "<p>Ihre E-Mail konnte auf Grund eines unerwarteten Fehlers nicht gesendet werden.</p>\n";
        echo "<p>Bitte versuchen Sie es später noch einmal.</p>\n";
      }
  }
?>

Erläuterungen:
Mit "if(strstr($email,"@"))", genauer mit "strstr", sucht man nach einem bestimmten Wert in einer Variablen (hier nach "@"), wenn er vorhanden ist, dann ist die Abfrage wahr (TRUE), anderenfalls FALSE (nicht wahr).
Mit "array_push" fügt man Werte an eine Variable an, was wir hier zur Fehleraufbereitung nutzen, wobei der zweite Wert an den Wert 1 angefügt wird (Funktion array_push (Wert1 <- Wert 2)).
Mit "$fehler_anzahl = count($fehler_angaben);" stellen wir die Fehlermenge fest, count zählt die Werte des Array´s. Nicht verwechseln mit array_sum, was die Werte addiert.
Mit "if (@mail($to,$subject,$message,$header))" senden wir die E-Mail. Die Abfrage dient zum Auswerten, ob "mail" TRUE ist (das Senden funktioniert hat). Ist "mail" gleich TRUE, so wird dieser Zweig ausgegeben, anderenfalls der ELSE-Zweig. Das "@" vor "mail" dient wieder der Abschaltung der PHP-Fehlermeldungen. Wichtig bei der Bestimmung der Variablen zum Versenden: "\r\n" in der Variablen $header!

So, und das war´s nun zum Thema E-Mail versenden.
Natürlich gibt es hier auch noch andere Varianten zum Senden - aber für den Anfang reicht das. Auch die E-Mail Adresse geht noch anders und schärfer zu kontrollieren, was man mit einer Anfrage an einen bestimmten Server erledigen kann - was aber Zeit kostet und dann ist nur eine bestimmte Anzahl an Anfragen möglich.

Was bleibt mir jetzt noch - na viel Spaß und Freude mit der Kontaktseite zu wünschen.