E-Mail mit PHP senden (1)

Nun bauen wir eine komplette Kontaktseite mit E-Mail Versand auf. Was benötigen wir dazu:
- als erstes natürlich die Kontaktseite selbst als kontakt.php (Seitenlayout als Tabellen- oder Blockbauweise)
- als zweites einen Ordner, in dem wir verschiedene Scripte ablegen (zum Beispiel Ordner "kontakt" im Hauptordner "privates")
und natürlich die Scripte selbst.

Ein Script zum E-Mail Versand haben wir schon auf der vorigen Seite kennen gelernt, was wir jetzt nur noch etwas anpassen müssen, was wie folgt aussehen könnte:
<?php
// --- Script zum in der kontakt.php Einfügen ---

// --- Script der vorhergehenden Seite ---
function inhalt_check($var_name)
  {
    if(!isset($_GET[$var_name]))
      {
        return ("");
      }
    else
      {
        return (trim(urldecode($_GET[$var_name])));
      }
  }
$inhalt = inhalt_check("inhalt");
// --- Erweiterungen zur Kontaktseite ---
if($inhalt == 'email')
  {
    // --- Laden des Scriptes zum E-Mail senden ---
    $oeffne_email_datei = "privates/kontakt/email.php";
    if(file_exists($oeffne_email_datei))
      {
        include_once "$oeffne_email_datei";
      }
  }
else
  {
    // --- Laden der allgemeinen Kontaktseite ---
    $oeffne_kontakt_datei = "privates/kontakt/kontakt.html";
    if(file_exists($oeffne_kontakt_datei))
      {
        include_once "$oeffne_kontakt_datei";
      }
  }
?>

Bis hierhin bedarf es keinen Erläuterungen mehr - wurde bereits auf den vorherigen Seiten alles erklärt.
Damit steht fest - dass beim Erstaufruf der Seite kontakt.php die kontakt.html aus dem Unterverzeichnis geladen wird. In dieser Datei befindet sich Deine E-Mail Adresse, die Du zum Link auf die kontakt.php?inhalt=email des Hauptverzeichnisses nutzt (also <a href="kontakt.php?inhalt=email">Deine@email.adresse</a>).

Vergesse nicht in der kontakt.html auch Deine Adressen nebst rechtlichen Hinweisen anzugeben (Haftung Links, Urheberrechte, ...).

Die etwas schwierigere Datei wird nun die email.php, denn hier sind nun weitere Anweisungen, Auswertungen, .... vertreten.

Das Wichtigste in der email.php ist das Formular, denn ohne ihm keine Eingabe und ohne Eingabe ist nichts zum Versenden vorhanden.
Da das Formular eventuell zweimal gebraucht wird (einmal Erstversand und das zweite Mal bei Fehleingaben) ist es Sinnvoll, eine eigene Datei mit dem Namen formular.php zu erstellen.

Quell-/Scripttext zur formular.php:
<h1 align="center">E-Mail senden</h1>
<p align="center">Mit diesem Formular kannst Du eine E-Mail an mich senden, fülle dazu alle Felder aus.</p>
<?php
// --- Die Fehleranzahl ($fehleranzahl) wird in der pruefe-email.php festgestellt oder in der email.php festgelegt ---
// --- Mit der Schleife (for) bei Fehleingaben Fehler ausgeben (der Reihe nach) ---
for ($i = 0; $i <$fehler_anzahl; $i++)
  {
    echo "$fehler_angaben[$i]\n";
  }
?>
<br>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<table border="0" align="center" width="600">
<tr>
  <td width="25%" valign="top">Dein Name: </td>
  <td width="75%" valign="top"><input type="text" name="name" value="<?php echo "$name"; ?>"></td>
</tr>
<tr>
  <td valign="top">Deine E-Mail:</td>
  <td valign="top"><input type="text" name="email" value="<?php echo "$email"; ?>"></td>
</tr>
<tr>
  <td valign="top">Betreff:</td>
  <td valign="top">
    <select name="betreff" size="1">
      <option selected><?php echo "$betreff"; ?></option>
      <option>allgemeine Anfrage</option>
      <option>Verbesserungsvorschlag</option>
      <option>Fehlermeldung</option>
    </select>
  </td>
</tr>
<tr>
  <td valign="top"> Deine Nachricht:</td>
  <td valign="top"><textarea rows="7" cols="45" name="nachricht"><?php echo "$nachricht"; ?></textarea></td>
</tr>
<tr>
  <td colspan="2" align="center">
    <input type="hidden" name="gesendet" value="ja">
    <input type="submit" value=" - E-Mail senden - ">
  </td>
</tr>
</table>
</form>

Zur Erläuterung:
Mit <?php $_SERVER['PHP_SELF'] ?> kannst Du das Formular in jede Seite einfügen, denn diese Angabe sucht immer den richtigen Pfad zur Datei (aus der URL in der Browserleiste). Da Du Deine E-Mail Adresse mit dem Anhängsel "?inhalt=email" versehen steht dies in der URL des Browser und wird somit auch dahin versendet.
Die restlichen ECHO-Anweisungen werden für die Auswertung der Fehler oder des Erstaufrufes des Formulars benötigt.
Hinweise zur for-Schleife: Im Script der "pruefe-email.php" wird nach Fehleingaben gesucht und in ein Array ($fehler_angaben) geschrieben. Dieses Array beginnt mit der 0 (Null) und danach werden weitere Fehler, so fern gemacht, angehangen. Mit count() werden anschließend die Anzahl der Einträge im Array festgestellt, wobei hier (mit count) die 0 (Null) als 1 (eins) zählt. Bei 4 Fehlern ist das Ergebnis mit count() 5, das Ende das Array ist jedoch 4 (Start 0). Zur Ausgabe muss also $i = 0 als Startpunkt stehen und $i < $fehler_anzahl steht für Ende bei um 1 kleiner der festgestellten Zahl. Mit $i++ wird die Reihe der Abfrage gestartet, welche dann bei $i < $fehler_anzahl endet. Da $i feststeht bei jedem Durchlauf kann man diese Variable zur Ausgabe der festgestellten Fehler nutzen ($fehler_angaben[$i]).
Den Quelltext selbst müsstest Du aus den Abhandlungen in den "Grundlagen" kennen.

Kommen wir nun zur email.php, in welcher nun die Auswertungen statt finden.
Hier das Script für die email.php:
<?php
//import_request_variables('p','frm_'); --> Funktion bei aktuellem PHP nicht mehr verfügbar
//$name = $frm_name;
//$email = $frm_email;
//$betreff = $frm_betreff;
//$nachricht = $frm_nachricht;
//$gesendet = $frm_gesendet;
//
// Damit müssen die Variablen anders bestimmt werden
if(!isset($_POST))
  {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $betreff = $_POST['betreff'];
    $nachricht = S_POST['nachricht'];
    $gesendet = $_POST['gesendet'];
  }
else
  {
    $name = "";
    $email = "";
    $betreff = "Bitte auswählen";
    $nachricht = "";
    $gesendet = "";
    $fehler_angaben = "";
    $fehler_anzahl = "0";
  }

if($gesendet == 'ja')
  {
    // --- Formular wurde gesendet - Inhalt prüfen! (Teil 2) ---
    @include_once "privates/kontakt/pruefe-email.php";
  }
else
  {
    // --- Das Formular wurde noch nicht gesendet
    // --- Also nur das Formular laden ---
    @include_once "privates/kontakt/formular.php";
  }
?>

Erläuterungen:
Da "import_request_variables('p','frm_');" in aktuellen PHP-Versionen eine ERROR-Meldung liefert solltest Du auf die erneuerte Abfrage setzen.
Auch neu in den neueren PHP-Versionen - nicht gesetzte Variablen erzeugen ebenfalls eine Fehlermeldung!
Mit "isset" oder "empty" kannst Du prüfen, ob eine Variable leer ist.
Setzt Du vor die Anweisung ein "!", dann fragst Du nach der Umkehrung, also ergibt eine gestzte Variable "TRUE" - wahr.
Die Variable $_POST ist eine Globale-Variable und wird mit dem Absenden des Formulares gefüllt.
Ist das Formular noch nicht gesendet, dann bleiben diese leer und die Abfrage ergibt FALSE (nicht wahr) und die formular.php wird geladen. Da hier der Betreff mit - Bitte auswählen - nochmals neu bestimmt wurde wird jetzt als erstes im Betreff auch dieses angezeigt.
Wurde das Formular bereits abgeschickt, dann ist die Abfrage wahr (TRUE) und die Datei pruefe-email.php wird geladen.

Nun müssen wir noch prüfen ob im gesendeten Formular alles richtig ist, was wir mir der Datei pruefe-email.php erledigen.

Diese ist etwas umfangreich - deshalb eine neue Seite.