E-Mails versenden mit PHP
Die Skriptsprache PHP stellt ein umfangreiches Werkzeug zum Versand von Emails über das Internet dar. In der Konfigurationsdatei php.ini muss dazu "nur" das Email-Programm (Unix) bzw. der Mailserver (Windows) eingetragen werden. Danach kann man als Programmierer schon mit dem Skriptschreiben loslegen. Im folgenden Artikel werden die verschiedenen Möglichkeiten, die beim Email-Versand vorhanden sind, aufgezeigt.Konfiguration der php.ini
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 =
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
Am einfachsten ist es, wenn eine normale Textemail an einen bestimmten Empfänger geschickt wird.Generell werden in PHP alle 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.
<?php
$adresse = "info@a-coding-project.de";
$betreff = "E-Mail an a coding project";
$inhalt = "Das Skript schickt eine E-Mail";
@mail($adresse,$betreff,$inhalt);
?>
$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
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:<?php
$adresse = "info@a-coding-project.de";
$betreff = "E-Mail an a coding project";
$inhalt = "Das Skript schickt eine E-Mail";
$header = "From: meinname@meinedomain.dern";
@mail($adresse,$betreff,$inhalt,$header);
?>
$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
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:<?php
$adresse = "info@a-coding-project.de";
$betreff = "E-Mail an a coding project";
$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);
?>
$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
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:<?php
$Empfaenger = "info@a-coding-project.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.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Konfiguration der php.ini
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project