[PHP & E-Mail] HTML Mail versenden mit PHPMailer - Druckversion +- PHP Rocks (https://www.php-rocks.de) +-- Forum: Knowledge Base (https://www.php-rocks.de/https://www.php-rocks.de/forum/18-knowledge-base.html) +--- Forum: Tutorials (https://www.php-rocks.de/https://www.php-rocks.de/forum/20-tutorials.html) +--- Thema: [PHP & E-Mail] HTML Mail versenden mit PHPMailer (/https://www.php-rocks.de/thema/51-html-mail-versenden-mit-phpmailer.html) |
HTML Mail versenden mit PHPMailer - Arne Drews - 29.04.2015 HTML E-Mail mit dem PHPMailer versenden Eine Mail mit PHP-Boardmitteln zu versenden kann schnell echte Probleme bereiten. Das liegt nicht zwingend an der mail() -Funktion selbst, die PHP bietet, sondern eher daran, daß man selber verantwortlich für die korrekte Formatierung nach RFC-Standards ist. RFC's ( Request For Comments ) beschreiben den Aufbau einer Mail und die Verbindung zum Mail-Server. Um eine Mail selbst zu versenden benötigen wir Kenntnisse über folgende RFC's:
Aber halten wir uns nicht daran oder richten uns zumindest danach, geht der Mail-Versand ganz schnell schief. Im schlimmstem Fall werden wir sogar als SPAM gewertet und landen auf einer Blacklist. Damit das nicht passiert und wir problemlos RFC-konforme Mails senden können, gibt es Mailerklassen, die uns die ganze Arbeit abnehmen. Eine von den bekannteren ist der PHPMailer, mit dem wir uns hier kurz befassen wollen. HinweisNatürlich gibt es nicht nur den PHPMailer. Wer bspw. lieber den SwiftMailer einsetzen möchte, sollte sich das äquivalente Tutorial zu dieser Mailer-Klasse ansehen: HTML E-Mails versenden mit dem SwiftMailerWie implementiere ich PHPMailer? TippDer folgende Abschnitt erklärt das Einbinden des PHPMailer Version 5. Es ist zu empfehlen, aktuell die Version 6 zu verwenden. Download: https://github.com/PHPMailer/PHPMailer/archive/master.zipWie das Einbinden mit der Version 6 auf ähnlich einfache Weise funktioniert, habe ich hier beschrieben: PHPMailer Version 6 erfolgreich einbinden Nachdem ihr wie dort beschrieben die Version 6 erfolgreich eingebunden habt, ist die grundlegende Handhabung wieder gleich, so dass ihr beim nächsten Abschnitt ( "Wie verwende ich das jetzt?" ) fortfahren könnt class.phpmailer.php und class.smtp.php , da wir unsere Mails direkt über SMTP versenden wollen. Das Package enthält zusätzlich eine Datei PHPMailerAutoload.php , die dafür sorgt, daß die von uns genutzte Klassen automatisch geladen werden.Diese drei Dateien legen wir auf unserem Webspace in einem beliebigen Verzeichnis ab. Für unser Beispiel nennen wir das Verzeichnis phpmailer/ .Das war alles, was an Vorbereitung notwendig ist. Wie verwende ich das jetzt? Die Verwendung ist im Prinzip ganz einfach. Zunächst müssen wir den Autoloader einbinden und direkt eine Instanz des PHPMailer erstellen: PHP-Code: include_once 'phpmailer/PHPMailerAutoload.php'; // Hinweis für die Version 6, einen Abschnitt zuvor beachten !!! HinweisUm keine CharsetEncoding-Fehler zu bekommen, teilen wir dem PHPMailer-Objekt direkt nach der Instanziierung über die EigenschaftCharSet mit, dass wir UTF-8 verwenden.Dies muss zwingend direkt nach der Instanziierung stattfinden, da ansonsten bereits Mail-Header geschrieben sein könnten. PHP-Code: // SMTP aktivieren Damit ist unsere Verbindung festgelegt und wir kümmern uns um die wichtigsten Header-Daten. Hier legen wir den/die Empfänger und Absender-Daten fest. PHP-Code: // Absender Adresse setzen PHP-Code: // HTML aktivieren HinweisFür die Clients, die kein HTML darstellen, nutzen wir hier der Einfachheit halber die Funktionstrip_tags() . Im produktiven Fall sollte hier allerdings die alternative Nachricht für reine Text-Mails hinterlegt werden.Wir haben unsere Mail mit Hilfe des PHPMailer nun aufgebaut und können diese versenden. Der PHPMailer kümmert sich dabei um den korrekten Aufbau nach RFC. Sinnvollerweise möchten wir gerne erfahren, ob die Übergabe an den SMTP-Server funktioniert hat. Dazu prüfen wir den Rückgabewert der send() -Methode:PHP-Code: if ( !$oMailer->send() ) { Zusammenfassung Wie wir gesehen haben, ist es gar nicht so kompliziert, eine HTML-Mail sauber zu versenden, auch ohne großartig professionelle Kenntnisse zu besitzen. Um den Kern unseres Beispiels im Überblick zusammenzufassen, hier nochmal der gesamte Beispielcode ohne Kommentare und unnötige Formatierungen: PHP-Code: include_once 'phpmailer/PHPMailerAutoload.php'; HinweisIn diesem Tutorial verwenden wir das SMTP-Protokoll, um die E-Mails mit dem PHPMailer zu versenden. Voraussetzung dafür ist immer ein gültiger und korrekt konfigurierter SMTP-Account bei einem entsprechenden Anbieter. Wer dies nicht hat, oder es zu Problemen kommt, wenn ihr E-Mails darüber versendet, kann den PHPMailer auch ohne SMTP verwenden. Dazu müssen einfach diese SMTP-Methoden und Eigenschaften weggelassen werden:PHP-Code: $oMailer->isSMTP(); HinweisAlternativ zum PHPMailer gibt es noch SwiftMailer. Der SwiftMailer ist zwar etwas komplexer wie PHPMailer, aber ebenso einfach verwendbar und meine persönliche Empfehlung.Ein kurzes Tutorial darüber findet ihr hier: HTML E-Mails versenden mit dem SwiftMailer |