Framework der Woche: PHPMailer [PHP]

Profilbild von Florian Schmidt
Vom 17. August 2014

Schonmal mit der PHP-eigenen mail()-Funktion versucht, von deinem Server aus Mails zu versenden? Richtig, es ist total nervig und doof zu implementieren. Doch dafür gibt es eine Lösung: PHPMailer macht es extrem einfach Mails mit einem PHP-Script zu versenden.

Dieser Artikel wurde zuletzt vor über einem Jahr aktualisiert. Die Inhalte könnten inzwischen nicht mehr aktuell sein.

Anstatt in irgendwelchen Headern rumzufummeln reicht es, in leicht lesbarem PHP einige Optionen zu setzen.

Weiteres Problem, welches gerne mal auftaucht: Auf dem eigenen Server ist keine Mailsoftware installiert, über die das Script die Mail versenden kann. Und auch hier springt PHP-Mailer ein, du kannst für den Mailversand einfach eine eigene SMTP-Verbindung angeben, sodass dieses Problem auch gelöst ist.

PHPMailer installieren

Die Installation - wenn man sie überhaupt so nennen darf - ist ausgesprochen einfach. Nachdem du die benötigte Datei direkt von der GitHub-Seite heruntergeladen, entpackt und in dein Arbeitsverzeichnis kopiert hast musst du nur noch eine Datei in deinem PHP-Script, idealerweise direkt am Anfang, importieren:

<?php
require 'class.phpmailer.php';
require 'class.smtp.php'; // Optional, wenn du SMTP benutzen möchtest
require 'language/phpmailer.lang-de.php'; // Optional, wenn du deutsche Fehlermeldungen ausgeben möchtest

Mails versenden

Nun geht's an das Versenden deiner ersten Mail. Dazu musst du zunächst ein Mail-Objekt erstellen und kannst dann die verschiedenen Optionen setzen, die eigentlich selbsterklärend sind:

$mail = new PHPMailer;
$mail->From = 'von@deiner.mail';
$mail->FromName = 'Max Mustermann';
$mail->addAddress('lischen@müller.de', 'Lischen Müller'); // Der Name ist dabei optional
$mail->addReplyTo('info@beispiel.de', 'Information'); // Antwortadresse festlegen
$mail->addCC('cc@beispiel.de');
$mail->addBCC('bcc@beispiel.de');
$mail->isHTML(true); // Mail als HTML versenden 
$mail->Subject = 'Ein schöner Betreff';
$mail->Body = 'Das ist die Nachricht als HTML-Version';
$mail->AltBody = 'Das ist ohne HTML, es soll wohl da draußen noch Leute geben, die das brauchen'; 

Nicht alle davon sind notwendig, eine Adresse solltest du aber schon hinzufügen und eine versendete Nachricht ergibt auf jeden Fall auch Sinn ;-)

Mail absenden

Letzter Schritt: Die Mail muss abgesendet werden. Dazu reicht folgender Code:

$mail->send();

Kleines Problem hierbei: Sollten Fehler auftauchen, bekommst du sie nicht mit. Aber auch dafür gibt es eine Lösung:

if(!$mail->send()) {
	echo 'Mail wurde nicht abgesendet';
	echo 'Fehlermeldung: ' . $mail->ErrorInfo;
} else {
	echo 'Nachricht wurde abgesendet.';
}

Massenmails verschicken

Auch das ist kein Problem. Dabei gibt es zwei Möglichkeiten: entweder du setzt alle Adressen in den BCC, dann sehen die Empfänger nicht, wer die Mail noch bekommen hat. Der Vorteil daran ist, das dies nur sehr wenig Rechenaufwand in Anspruch nimmt, allerdings gibt es so für alle nur einen Text. Andere Alternative: Du machst eine Schleife, die zuerst personalisierten Text und die Empfängeradresse hinzufügt, danach die Mail absendet und am Ende der Schleife die alte Adresse mittels $mail->clearAddresses(); wieder herauslöscht.

In dieser neuen Artikelserie stelle ich dir jede Woche ein interessantes Framework inklusive Beispiel für die Webentwicklung vor.

  • # Framework der Woche
  • # PHP
  • # Mail

Du suchst die Kommentare?

Keine Sorge, die sind nicht verloren! Es dauert aber noch eine Weile, bis sie wieder zu sehen sind und du neue Kommentare hinterlassen kannst.

Netzleben ist frisch von einer alten Kirby-Website auf eine neue, Statamic-basierte Website umgezogen. Leider ist das Plugin für Kommentare mit Statamic 3 noch nicht kompatibel.