8 Mail
Das Versenden von Mails ist eine alltägliche Aufgabe bei der Erstellung von Webapplikationen. Neben dem Versand von Formularinhalten müssen auch oft Mails mit Anhängen verschickt werden, oder es sollen große Mengen von Mails im Rahmen eines Newsletters versandt werden.
8.1 Mail 

Besprochene Version: 1.1.4 | Lizenz: PHP/BSD |
Klassendatei(en): Mail.php |
PEAR::Mail ist eine Klasse, mit der Sie E-Mails versenden können. Gegenüber dem Mail-Befehl von PHP bietet diese Klasse den Vorteil, dass die E-Mails auf verschiedenen Wegen verschickt werden können. Entweder greift die Klasse auf die PHP-Funktion mail() zurück, nutzt ein installiertes sendmail oder verschickt die Nachrichten mithilfe des SMTP-Protokolls über einen externen Server.
Um eine Instanz der Klasse zu erhalten, ist eine Factory-Methode definiert. Diese wird statisch aufgerufen und bekommt die Information übergeben, welche Versandmethode bzw. welcher MTA (Mail Transport Agent) genutzt werden soll. Mit dem zweiten Parameter können Sie in Abhängigkeit vom verwendeten Mailer ein Array mit Optionen übergeben.
Um dafür zu sorgen, dass das Paket im Hintergrund die Funktion mail() nutzt, übergeben Sie der Factory-Methode den String 'mail'. Der zweite Parameter kann in diesem Fall ein String oder ein Array sein. Ist der Safe-Mode auf dem Server, auf dem Sie arbeiten, nicht eingeschaltet, so werden diese Daten als fünfter Parameter an die Funktion mail() übergeben. Übergeben Sie die Daten als Array, werden die Werte mit Leerzeichen getrennt und als String zusammengefasst. Informationen zu diesem letzten Parameter erhalten Sie unter http://www.php.net/de/mail.
Damit das Paket direkt auf das Programm sendmail zugreift, übergeben Sie als ersten Parameter den String 'sendmail'. In diesem Fall benötigt die Factory-Methode als zweiten Parameter ein assoziatives Array. Mit dem Schlüssel 'sendmail_path' müssen Sie hierbei den Pfad zu dem Programm sendmail bzw. zu dem entsprechenden Wrapper übergeben. Möchten Sie noch zusätzliche Kommandozeilen-Optionen übergeben, ist dafür der Schlüssel 'sendmail_arg' vorgesehen. Hiermit können Sie einen String übergeben, der beim Aufruf von sendmail direkt übergeben wird.
Die vielleicht interessanteste Möglichkeit zum Versand von E-Mails ist aber sicherlich die Nutzung eines SMTP-Servers. Wenn Sie Zugriff auf einen entsprechenden Server haben, können Sie der Methode als ersten Parameter den String 'smtp' übergeben. Danach folgt ein assoziatives Array, in dem die notwendigen Informationen übergeben werden. Der Schlüssel 'host' enthält den Namen oder die IP-Adresse des Servers. Geben Sie hier keinen Wert an, nutzt das System 'localhost'. Der Verbindungsaufbau erfolgt standardmäßig über den Port 25, was Sie aber ändern können, wenn Sie im Feld 'port' einen anderen Wert übergeben. Per Default verlangt das SMTP-Protokoll keine Authentifizierung gegenüber dem Server. Aus Sicherheitsgründen wird diese inzwischen allerdings in den meisten Fällen von den Providern vorlangt. Wenn Sie sich authentifizieren müssen, übergeben Sie im Feld 'auth' den Wert true und in den Elementen 'username' und 'password' die Benutzerkennung und das Passwort.
Hilfreich kann auch noch die Klasse Mail_null sein. Ein Objekt dieser Klasse erhalten Sie, wenn Sie der Factory-Methode 'null' als ersten Parameter übergeben. Der zweite Parameter wird in diesem Fall ignoriert. Mail_null verschickt keine Mails, stellt aber eine Methode bereit, die den Versand von E-Mails simuliert. Diese Klasse ist sehr hilfreich, wenn Sie eine Applikation testen wollen, ohne ständig E-Mails zu verschicken.
Nachdem Sie auf diesem Weg ein Objekt generiert haben, können Sie die Methode send() nutzen, um eine Mail zu verschicken.
Der bzw. die Empfänger der E-Mail werden an erster Stelle übergeben. Hierzu können Sie entweder ein Array nutzen oder die Werte in einem String, getrennt durch Kommata, übergeben. Als zweiter Parameter ist ein assoziatives Array mit Headern zu nutzen, die zum Versand der Mail verwendet werden sollen. Der Name des Headers ergibt sich aus dem Schlüssel des Array-Elements, und der Wert des Array-Elements wird zum Wert des Headers.
Hier sollten Sie mindestens die Header From für die Angabe des Absenders und Subject für die Betreffzeile der Mail nutzen.
Der dritte Parameter ist ein String, der den eigentlichen Inhalt der Mail repräsentiert.
Konnte die Mail versandt werden, gibt die Methode true zurück und andernfalls ein PEAR_Error-Objekt.
require_once('Mail.php'); $options = array ( 'host' => 'smtp.example.com', 'auth' => true, 'username' => 'user', 'password' => 'geheim' ); $mailer = Mail::factory('smtp',$options); if (true === PEAR::isError($mailer)) { die ($mailer->getMessage()); } $empfaenger = 'cmoehrke@netviser.de'; $headers=array( 'From' => 'absender@example.com', 'To' => 'cmoehrke@netviser.de', 'Subject' => 'Die Hallo-Welt-Mail' ); $res=$mailer->send($empfaenger,$headers,'Hallo Welt'); if (true === PEAR::isError($res)) { die ($res->getMessage()); }