Konfiguration der php.ini  nach oben

In der php.ini-Datei sieht der Abschnitt für die Email-Konfiguration in etwa so aus:

[mail function]
; For Win32 only.
SMTP = localhost

; For Win32 only.
sendmail_from = postmaster@localhost

; For Unix only.  You may supply arguments as well (default:
; "sendmail -t -i").
;sendmail_path =

(Der Ausschnitt aus der php.ini bezieht sich auf die PHP-Version 4.3.4)
Wenn als Betriebssystem Windows verwendet wird, sind die Zeilen mit dem Zusatz "For Win32 only" relevant. Für Unix gilt nur die Zeile mit der Ergänzung "For Unix only".

Im Windows-Bereich muss in der Zeile "SMTP" der Email-Server eingetragen werden. Wenn sich der Mail-Server, auf denPHPzugreifen soll, auf dem Programmier-PC befindet, kann der Eintrag "localhost" belassen werden. Ansonsten muss der Email-Server des entsprechenden Internet-Providers eingetragen werden. Die notwendigen Informationen dazu findet man auf der Webseite des jeweiligen Providers.
In der Zeile "sendmail_from" gibt man eine Email-Adresse für den Absender an. Für den eigentlichen Email-Versand ist das notwendig. Diese Mailadresse muss in der Wirklichkeit nicht existieren, aber gültig sein (d.h. mit "@"). Wenn keine explizite Adresse definiert, wird der Standardeintrag für diesen Parameter automatisch übernommen.

Hinweis: Nach der Konfigurationsänderung muss der Webserver neu gestartet werden.

Einfacher Email-Versand  nach oben

Am einfachsten ist es, wenn eine normale Textemail an einen bestimmten Empfänger geschickt wird.
Generell werden inPHPalle Emails mit der mail-Funktion verschickt.
Das folgende Beispielskript zeigt den einfachen Email-Versand an einem bestimmten Empfänger. Als Absende-Adresse wird dazu der Standard aus der php.ini übernommen.

<?
$adresse = "info@html-world.de";
$betreff = "E-Mail an HTMLWorld";
$inhalt = "Das Skript schickt eine E-Mail";
@mail($adresse,$betreff,$inhalt);
?>

Die Variablen $adresse, $betreff und $inhalt definieren den Empfänger, den Betreff sowie den eigentlichen Inhalt der Email. Mit der mail-Funktion wird die Email dann mit den vorher definierten Parametern verschickt. Das @-Zeichen vor der mail-Funktion unterdrückt eventuelle Fehlermeldungen von PHP, wenn mit dem Email-Versand etwas nicht geklappt hat.

Eigene Absender-Adresse  nach oben

Als Absende-Adresse wird beim obigen Beispiel nun der Standardeintrag aus der php.ini angezeigt, der im Zeifelsfall - besonders bei großen Webhostern - nicht dem gewünschten Namen entspricht. Hierfür gibt es die einfache Möglichkeit, eine selbst definierte Email-Adresse für den Absender anzugeben. Das bestehende Skript muss dazu nur wenig verändert werden:

<?
$adresse = "info@html-world.de";
$betreff = "E-Mail an HTMLWorld";
$inhalt = "Das Skript schickt eine E-Mail";
$header = "From: meinname@meinedomain.dern";
@mail($adresse,$betreff,$inhalt,$header);
?>

Zu den normalen Parametern kommt nun ein Parameter $header hinzu. Dieser enthält die sogenannten Headerdaten (Kopfdaten der E-Mail) zu denen auch der Absender zählt. Hier notiert man einfach "From:" gefolgt von den Absenderinformationen und übergibt es der mail-Funktion.

Eine HTML-E-Mail versenden  nach oben

Bis jetzt wurde im Skript nur eine einfache Texte als Inhalt definiert. Natürlich lassen sich aber auch HTML-Emails verschicken. Auch hierzu sind wiederum nur wenige Änderungen an dem obigen Mail-Skript durchgeführt werden:

<?
$adresse = "info@html-world.de";
$betreff = "E-Mail an HTMLWorld";
$inhalt = " <p>Ich <b>bin</b> <u>eine</u> <i>HTML-Mail</i>.</p> ";
$header = "Content-Type:text/htmlrn";
$header .= "From: meinname@meinedomain.dern";
@mail($adresse,$betreff,$inhalt,$header);
?>

Der Inhalt der Email wird - wie bereits bekannt - der Variable $inhalt zugewiesen. Der Inhalt der Variablen besteht nun einfach aus normalen HTML-Code. Damit ein E-Mail-Programm den Inhalt nun auch als HTML-Mail identifiziert wird eine weitere Header-Zeile eingefügt die den Typ des Inhalts beschreibt (Content-Type).

E-Mails mit Anhang senden  nach oben

Nur einfache Mails zu senden ist in einigen Fällen nicht genug - ein Anhang soll mitgeschickt werden. Hierzu sind etwas weitreichendere Änderungen am bestehenden Skript nötig. Schauen wir uns dazu zunächst das fertige Skript an:

<?
  $Empfaenger = "info@html-world.de";
  $Betreff = "Mail mit Anhang";
  $DateinameMail = "text.pdf";
  $h = fopen("./test.gif", 'rb');
  $filecontents = fread($h, filesize("./test.gif"));

  $Trenner = md5(uniqid(time()));

  $Header = "From: meinname@meinedomain.den";
  $Header .= "MIME-Version: 1.0n";
  $Header .= "Content-Type: multipart/mixed; boundary=$Trennern";

  $text = "This is a multi-part message in MIME formatn";
  $text .= "--$Trennern";
  $text .= "Content-Type: text/plainn";
  $text .= "Content-Transfer-Encoding: 8bitnn";
  $text .= $text."n";
  $text .= "--$Trennern";
  $text .= "Content-Type: image/gif; name=$DateinameMailn";
  $text .= "Content-Transfer-Encoding: base64n";
  $text .= "Content-Disposition: attachment; ".
           "filename=$DateinameMailnn";
  $text .= chunk_split(base64_encode($filecontents));
  $text .= "n";
  $text .= "--$Trenner--";

  mail($Empfaenger, $Betreff, $text, $Header);
?>

Das Verfahren ist recht einfach: Soll ein Anhang verschickt werden, wird die Mail als Multipart-Mail definiert - d.h. sie besitzt mehrere Teile (eben multi-part). Dazu wird den Header-Daten zwei Zeilen übergeben die dies definieren: einmal die Mime-Version und einmal der Content-Type mit dem entsprechenden Wert multipart/mixed. Außerdem wird beim Content-Typ auch der Trenner beschrieben (boundary=...) - eine einfache Zeichenfolge die zwischen den einzelnen Bestandteilen der Mail für Trennung sorgt.
Der Inhalt der Mail ($text) wird dann entsprechend erweitert. Zum normalen Inhalt werden, begetrennt durch unseren Trenner, die neuen Bestandteile angefügt: Zunächst der Text ($text) und anschließend der Dateiinhalt ($filecontens) in Base64-Codierung. Letzteres ist notwendig um die Mail auch mit Anhang korrekt versenden zu können.
Alles zusammen wird wieder an die mail-Funktion übergeben und entsprechend verschickt.