Framework der Woche: PHPMailer [PHP]

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.

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. Alle bisherigen Artikel dieser Serie findest du hier, wenn du selbst ein Framework vorschlagen willst, schreibe einfach einen Kommentar.

Facebook Twitter Google+ WhatsApp

von Florian Schmidt

Gründer von Netzleben. Studiert IT System Engineering am Hasso-Plattner-Institut in Potsdam. Kauft viel zu viel Technik online ein. Liebt Kekse.

Hinterlasse einen Kommentar

Kommentare

Fame

Sehr hilfreich! giga! und danke!

Eine frage habe ich allerdings, wenn ich es in mein Script einbaue kommt diese fehlermeldung:

Mail wurde nicht abgesendetFehlermeldung: Could not instantiate mail function.

was mache ich hier nur falsch ?

Hierauf antworten

Step

Ich muss jetzt mal fragen (bin Anfänger im Thema und deshalb etwas verunsichert) - ist es korrekt die Klammern nach &#34;require&#34; wegzulassen?

require &#39;class.phpmailer.php&#39;;

oder

require (&#39;class.phpmailer.php&#39;);

Hierauf antworten

Christian G.

Die Befehle &#34;include&#34;, &#34;include_once&#34; sowie &#34;require&#34; und &#34;require_once&#34; werden immer ohne Klammern aufgerufen, also &#34;require &#39;meine-datei.php&#39;&#34;.

Hierauf antworten

Andre

Ich bin PHP-Anfänger - deshalb habe ich noch nicht den kompletten Durchblick aber im Beispiel sind gar keine Zugangsdaten zum SMTP-Server genannt. Ich anderen Tutorials stehen immer Server/Benutzername/Passwort im Code.
Ich verstehe nicht, wie dann die Mail versendet werden kann...

Hierauf antworten