PHPMailer ist eine Pro­gramm­bi­blio­thek, die den E-Mail-Versand via PHP steuert. Diese Methode kommt vor allem bei Kon­takt­for­mu­la­ren auf Websites zum Einsatz, eignet sich aber ebenso für den privaten Nach­rich­ten­ver­sand.

Was ist PHPMailer?

PHPMailer ist eine von der Community be­reit­ge­stell­te Mail-Er­wei­te­rung für PHP. Im Vergleich zur stan­dard­mä­ßi­gen PHP-Mail-Funktion sinkt bei PHPMailer die Gefahr massiv, dass deine Nach­rich­ten im Spam landen. Das liegt daran, dass der Versand via SMTP erfolgt – dem Stan­dard­pro­to­koll für den E-Mail-Transport im Web. Ein weiterer Pluspunkt: PHPMailer be­herrscht im Gegensatz zur Basis-Funktion auch HTML-Mails und Da­tei­an­hän­ge pro­blem­los.

Wofür nutzt man PHPMailer?

Zugegeben, die Ein­rich­tung von PHPMailer ist etwas auf­wen­di­ger als die Nutzung eines Mail-Clients. Doch der Einsatz lohnt sich besonders dann, wenn du Prozesse au­to­ma­ti­sie­ren willst. Betreibst du etwa einen Webshop, lassen sich Be­stä­ti­gun­gen damit leicht ge­ne­rie­ren. Auch für Kon­takt­for­mu­la­re auf deiner Präsenz ist PHPMailer die ideale Lösung, damit Anfragen sicher bei dir ankommen.

Vor­aus­set­zun­gen für den Einsatz von PHPMailer

Damit du mit PHPMailer loslegen kannst, brauchst du zunächst einen SMTP-Server. Ob du dabei auf den Mail-Server deines Providers setzt oder eine eigene In­fra­struk­tur nutzt, bleibt dir über­las­sen. Für die In­stal­la­ti­on der Er­wei­te­rung empfehlen wir dir zudem einen Pa­ket­ma­na­ger wie Composer.

Tipp

Grund­kennt­nis­se in PHP sind für die Arbeit mit PHPMailer es­sen­zi­ell. Falls du hier noch Un­ter­stüt­zung benötigst, hilft dir unser PHP-Guide für Ein­stei­ger:innen weiter!

In­stal­la­ti­on von PHPMailer: Schritt-für-Schritt-Anleitung

Schritt 1: Aktuelle PHPMailer-Version laden

Hol dir die neueste PHPMailer-Version. Du kannst den Download entweder über einen Pa­ket­ma­na­ger oder manuell via GitHub erledigen.

Variante 1: In­stal­la­ti­on via Composer

Falls du den Pa­ket­ma­na­ger Composer bereits nutzt, genügt dieser Befehl:

composer require phpmailer/phpmailer
bash

Wichtig: Wenn du diesen Weg wählst, musst du den Composer in deinen PHP-Code einbinden, um den Versand zu er­mög­li­chen.

Verwende dazu diese Zeile:

require_once "vendor/autoload.php";
php

Der Befehl „require_once“ stellt sicher, dass der Composer nur einmal geladen wird, um Fehler im Pro­gramm­ab­lauf zu vermeiden. Damit ist die In­stal­la­ti­on fertig.

Variante 2: Manueller Download von GitHub

Du kannst die Quell­da­tei­en auch händisch beziehen. Klicke dazu im GitHub-Re­po­si­to­ry auf „Code“ und lade das ZIP-Archiv herunter. Falls Git auf deinem Rechner läuft, kannst du das Re­po­si­to­ry auch direkt via Kom­man­do­zei­le klonen.

Schritt 2: Daten entpacken

Nach dem manuellen Download musst du die ZIP-Datei entpacken. Wähle dafür das Ver­zeich­nis, in dem PHPMailer liegen soll. An­schlie­ßend bindest du die Library in dein Skript ein. An­ge­nom­men, dein Ordner heißt „PHPMailer“, dann nutzt du folgenden Code:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*Klasse zur Behandlung von Ausnahmen und Fehlern*/
require 'C:/PHPMailer/src/Exception.php';
/*PHPMailer-Klasse*/
require 'C:/PHPMailer/src/PHPMailer.php';
/*SMTP-Klasse, die benötigt wird, um die Verbindung mit einem SMTP-Server herzustellen*/
require 'C:/PHPMailer/src/SMTP.php';
/*Übergeben Sie beim Erstellen eines PHPMailer-Objekts den Parameter „true“, um Ausnahmen (Meldungen im Falle eines Fehlers) zu aktivieren*/
$email = new PHPMailer(true);
php

E-Mails versenden mit PHPMailer: So geht’s

Schritt 1: Na­mens­räu­me de­fi­nie­ren

Damit du leicht auf die Funk­tio­nen zugreifen kannst, müssen die Na­mens­räu­me stimmen. Mit diesen use-State­ments in deinem Code klappt der Zugriff rei­bungs­los:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
php

Du kannst die Klassen nun direkt über den Namen nach dem letzten Slash an­spre­chen.

Schritt 2: Feh­ler­be­hand­lung ein­rich­ten

PHPMailer arbeitet extrem zu­ver­läs­sig, dennoch können Fehler auftreten. Damit deine Ser­ver­da­ten bei Problemen nicht offen für alle sichtbar sind, solltest du den Versand in eine Try-Catch-Anweisung hüllen:

try {
    // Versuch, eine neue Instanz der Klasse PHPMailer zu erstellen, wobei Ausnahmen aktiviert sind
    $mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
        echo "Mailer Error: ".$e->getMessage();
}
php

Schritt 3: SMTP-Au­then­ti­fi­zie­rung

Jetzt folgt die Anmeldung am SMTP-Server. Gib die Ser­ver­adres­se, das Protokoll (TLS/SSL oder SMTP) inklusive Port sowie deinen Usernamen und das Passwort an. Diese Daten findest du direkt in den Ein­stel­lun­gen deines Mail­an­bie­ters.

$mail->isSMTP();
$mail->SMTPAuth = true;
// Persönliche Angaben
$mail->Host = "smtp.domain.de";
$mail->Port = 587;
$mail->Username = "name.nachname@domain.de";
$mail->Password = "probepasswort4321";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
php

Statt ENCRYPTION_STARTTLS kannst du auch ENCRYPTION_SMTPS zur Ver­schlüs­se­lung wählen. Hier wird eine Ver­bin­dung nur aufgebaut, wenn TLS aktiv ist. Das setzt voraus, dass der Server moderne Standards un­ter­stützt. Bei StartTLS wird zunächst un­ver­schlüs­selt gestartet und erst bei Ver­füg­bar­keit ver­schlüs­selt – falls nicht, fließen die Daten im Klartext weiter.

Somit bietet SMTPS mehr Si­cher­heit, während StartTLS oft eine bessere Kom­pa­ti­bi­li­tät aufweist. In der Praxis wird StartTLS meist bevorzugt.

Schritt 4: Emp­fangs­adres­se festlegen

Trage nun die Ziel­adres­se in dein Skript ein.

// Absender
$mail->setFrom('info@example.com', 'name');
// Empfänger, optional kann der Name mit angegeben werden
$mail->addAddress('info@example.com', 'name');
// Kopie
$mail->addCC('info@example.com');
// Blindkopie
$mail->addBCC('info@example.com', 'name');
php

Schritt 5: Mail-Inhalt gestalten

Nun geht es ans Ein­ge­mach­te: den Inhalt. Erstelle einen Betreff und den Text, idea­ler­wei­se sowohl als HTML- als auch als Plain-Text-Variante. Tipp: Da manche ältere Programme Probleme mit HTML5 haben könnten, fährst du mit klas­si­schem HTML oft sicherer.

Auch Anhänge sind für PHPMailer ein Leichtes. Nutze dafür einfach die Funktion add­At­tach­ment. Egal ob Fotos, Musik, PDF-Dokumente oder Videos – alles ist möglich. Mit einem op­tio­na­len zweiten Parameter kannst du die Dateien beim Versenden sogar um­be­nen­nen.

$mail->isHTML(true);
// Betreff
$mail->Subject = 'Der Betreff Ihrer Mail';
// HTML-Inhalt
$mail->Body = 'Der Text Ihrer Mail als HTML-Inhalt. Auch <b>fettgedruckte</b> Elemente sind beispielsweise erlaubt.';
$mail->AltBody = 'Der Text als simples Textelement';
// Anhang hinzufügen
$mail->addAttachment("/home/user/Desktop/beispielbild.png", "beispielbild.png");
php

Schritt 6: Zei­chen­ko­die­rung op­ti­mie­ren

Damit Umlaute und Son­der­zei­chen korrekt ankommen, solltest du UTF-8 ak­ti­vie­ren. So ver­hin­derst du unschöne Dar­stel­lungs­feh­ler in deinen Nach­rich­ten. Ergänze dein Skript einfach um diese Zeile:

$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
php

Schritt 7: Nachricht ab­schi­cken

Zum Abschluss musst du die Mail nur noch auf die Reise schicken. Das erledigt dieser Befehl:

$mail->send();
php

Achte darauf, dass dieser gesamte Ablauf innerhalb des Try-Blocks steht, damit du bei Fehlern sofort in­for­miert wirst.

Code-Beispiel für den Versand

Hier siehst du noch einmal kompakt den gesamten Code für eine E-Mail inklusive Bild­an­hang, bereit für den Einsatz mit PHPMailer:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Per Variable Ausnahmen aktivieren bzw. deaktivieren
$debug = true;
try {
    // Instanz der PHPMailer-Klasse erstellen
    $mail = new PHPMailer($debug);
    if ($debug) {
        // gibt einen ausführlichen log aus
        $mail->SMTPDebug = SMTP::DEBUG_SERVER; 
    }
    // Authentifikation mittels SMTP
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    // Login
    $mail->Host = "smtp.domain.de";
    $mail->Port = 587;
    $mail->Username = "name.nachname@domain.de";
    $mail->Password = "probepasswort4321";
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->setFrom('info@example.com', 'name');
    $mail->addAddress('info@example.com', 'name');
    $mail->addAttachment("/home/user/Desktop/beispielbild.png", "beispielbild.png");
    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';
    $mail->isHTML(true);
    $mail->Subject = 'Der Betreff Ihrer Mail';
    $mail->Body = 'Der Text Ihrer Mail als HTML-Inhalt. Auch <b>fettgedruckte</b> Elemente sind beispielsweise erlaubt.';
    $mail->AltBody = 'Der Text als simples Textelement';
    $mail->send();
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}
php
Zum Hauptmenü