Email

siehe auch PHP Manual

Mit PHP kann man Emails verschicken. Häufig wird zur Kontaktaufnahme auf einer Website ein Emailformular zur Verfügung gestellt, welches mit PHP versandt wird. Das hat einerseits den Vorteil, dass die Emailadresse vor Spamrobotern geschützt ist. Außerdem braucht der User kein Emailprogramm, um den Kontakt aufzunehmen.

Gültige Email Adresse überprüfen

Wenn man PHP Emails verschickt, sollte überprüft werden, ob es sich um eine gültige Email Adresse handelt. Das wäre mit String Methoden und Regulären Ausdrücken möglich, aber dann müsste man sich intensiv mit dem Aufbau von Email Adressen beschäftigen. Einfacher ist es, die vorinstallierte Datenfiltererweiterung von PHP zu nutzen.

Darin gibt es die Funktion filter_var($email, FLTER_VALIDATE_EMAIL) mit dem hier aufgeführten zweiten Parameter. Sie liefert true, wenn es sich um eine gültige Email Adresse handelt.

$email = "ich@meineDomain.de";
if(filter_var($email, FILTER_VALIDATE_EMAIL)=== false){
    echo "Die Emailadresse ist nicht gültig.";
}else{
    echo "Email ist gültig";
}

Beschäfitgen wir uns erstmal mit dem eigentlichen Verschicken einer Email und später mit dem Formular.

mail() Funktion

Mit der mail() Funktion werden Emails verschickt. Es werden folgende Argumente erwartet.

mail(Empfängeradresse, Betreff, Nachricht, Header)

Es folgt ein Beispiel:

   $empfaenger = "empfaenger@adresse.de";
   $betreff = "Der Betreff";
   $nachricht = "Die Nachricht\r\neine neueZeile";
   $headers = "From: absender@adresse.de";
   if (mail($empfaenger, $betreff, $nachricht, $headers))
      echo "Die Mail wurde erfolgreich verarbeitet.";
   else
      echo "Die Mail konnte nicht verschickt werden";

Wenn der Email-Befehl erfolgreich zum Senden akzeptiert wurde gibt die mail() Funktion true zurück. So kann man mit einer if-Bedingung eine Erfolgsmeldung ausgeben oder den Hinweis auf einen Fehler. Der Erfolg bedeutet jedoch nicht, dass auch überprüft wurde, ob die Empfängeradresse existiert und ob die Email beim Empfänger eingetroffen ist.

Neue Zeilen im Text der Email werden mit \r\n erzeugt.

Im Header wird ein From: gefolgt von einem Leerzeichen vor die Absenderadresse gesetzt. Dieser From: Header ist Pflicht. Es sind aber noch weitere Header Informationen möglich.

Header

Im Header muss ein From: gefolgt von einem Leerzeichen vor die Absenderadresse gesetzt. Der Header kann eine String oder assoziatives Feld sein.

Neben der Absenderadresse kann man auch weitere Header-Informationen hinzufügen, wie beispielsweise eine eine Reply Adresse. Sie wird eingesetzt, wenn ein Absender möchte, dass eine andere Adresse für die Antwort verwendet wird.

Auch weitere Copy- und Blindcopy Adressen lassen sich im Header eintragen. Es führt jedoch nicht dazu, dass die Email auch an diese Adressen verschickt wird.

In einem assosiativen Feld können die Informationen notiert werden. Die Schlüssel sind die festgelegten Header Elemente: wie From, Reply-To, CC, BC

   $empfaenger = "email@empfaenger.de";
   $betreff = "Der Betreff";
   $nachricht = "Die Nachricht";
   $headers = array("From" => "absender@adresse.de",
                    "Reply-To" => "antwort@absender.de",
                    "Cc" => "kopie@adresse.de",
                    "Bcc" => "blindkopie@adresse.de");
   if(mail($empfaenger, $betreff, $nachricht, $headers))
      echo "Mail wurde erfolgreich verarbeitet";
   else
      echo "Mail konnte nicht versandt werden.";

Der Header wird auch gebraucht, um Umlaute in der Email richtig anzuzeigen, mehr dazu im nächsten Kapitel.

Emailformular mit Umlauten

In der Regel benutzt man für das Verschicken von Emailformularen PHPMailer. Wenn man es dennoch mit der mail() Funktion erstellen will, bekommt man Probleme mit den deutschen Umlauten, weil diese in der Email nicht richtig angzeigt werden. Durch bestimmte Header-Informationen kann man Abhilfe schaffen.

Im folgendem gibt es ein Emailformular mit einem Select Auswahlfeld. Die Eingaben werden an ein PHP-Programm verschickt. Dort werden die Eingaben empfangen und per mail() versandt. Beachte die Header Angaben zur Umwandlung der Umlaute: MIME-Version und Content-Type

HTML

<form action="email.php" method="post">
    <p><input type="text" name="absender"> Ihre E-Mail-Adresse</p>
    <p><input type="text" name="betreff"> Ihr Betreff</p>
    <p><select name="werbung">
        <option value="freund">Freunde/ Bekannte</option>
        <option value="internet">Internet</option>
        <option value="print">Printmedien</option>
        <option value="tv" selected="selected">TV</option>
    </select> Woher kennen Sie uns?</p>
    <p><textarea name="nachricht" cols="50" rows="5"></textarea> Ihre Nachricht</p>
    <p><input type="submit"> <input type="reset"></p>
</form>

PHP

   $empfaenger = "mail@empfaenger.de";

   $absender = htmlentities($_POST["absender"]);
   $betreff = htmlentities($_POST["betreff"]); 
   $werbung = htmlentities($_POST["werbung"]);
   $nachricht = htmlentities($_POST["nachricht"]);
    
    //message wird zusammengesetzt aus nachricht und werbung Selectfeld       
    $message = $nachricht . "<br>Bekannt geworden durch: " . $werbung;
    
    //Damit Umlaute und ß richtig angezeigt werden, wird folgender header benötigt
    
    $headers = array("From" => $absender,
                    'MIME-Version' => '1.0',
                    'Content-Type' => 'text/html; charset=UTF-8'
                    );    
    
   if(mail($empfaenger, $betreff, $message, $headers))
      echo "Mail wurde versandt";
   else
      echo "Beim Emailversand ist ein Fehler aufgetreten";

Header als String

Der Header im vorigen Beispiel wurde mit einem assoziativen Array erstellt. Das ist ab PHP Version 7.2 möglich. Es macht den Code etwas eleganter. Die Alternative als String sähe so aus, man beachte die Zeilenumbrüche mit \r\n

	$headers = "MIME-Version: 1.0" . "\r\n";
	$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
	$headers .= "From: $absender" ."\r\n";

Email mit PHPMailer

Mit dem Framework PHPMailer lassen sich Emails mit vielen Features verschicken, wie beispielsweise Dateianhänge, Authentifiszierung, HTML-Mail etc..
Dazu muss man sich PHP Mailer herunterladen.

Siehe dazu dieses Beispiel von HelloCoding

oder siehe dazu folgende Wiki- Anweisungen.

 


Webdesign / PHP / mySQL / Dreamweaver MX Tipps
Copyright © Michael Albers
www.pastorpixel.de