PHPMailer ist eine Pro­gramm­bi­blio­thek, das die E-Mail-Über­tra­gung via PHP regelt. Einsatz findet diese Art des E-Mail-Versands vor allem bei Kon­takt­for­mu­la­ren auf Websites, aber auch der private E-Mail-Versand ist kein Problem.

E-Mail- & Groupware-Lösung
Hosted Microsoft Exchange
  • Bekannt als weltweit führende E-Mail- und Kalender-Lösung
  • Sicheres Hosting in deutschen Re­chen­zen­tren
  • Jederzeit mobiler Zugriff dank Microsoft Outlook

Was ist PHPMailer?

PHPMailer ist eine von der Community be­reit­ge­stell­te Mail-Er­wei­te­rung für PHP. Im Gegensatz zur Mail-Funktion, die in PHP von Anfang an im­ple­men­tiert ist, ist die Wahr­schein­lich­keit, dass mit PHPMailer ver­sen­de­te E-Mails im Spam-Ordner landen, we­sent­lich geringer. Grund dafür ist, dass der Versand der mit PHPMailer erzeugten Mails mittels SMTP erfolgt. Hierbei handelt es sich um das Simple Mail Transfer Protocol, mit dem E-Mails über das Internet über­tra­gen werden. Zudem un­ter­stützt PHPMailer in Gegensatz zur ein­ge­bau­ten Mail-Funktion auch HTML-Mails und Anhänge.

Wofür nutzt man PHPMailer?

Die Nutzung von PHPMailer ist ein wenig um­ständ­li­cher als die Nutzung von E-Mail-Providern oder in­te­grier­ten Mail­pro­gram­men am Computer. Eine be­rech­tig­te Frage ist daher, in welchen Gebieten sich der Einsatz von PHPMailer lohnt. Der Einsatz des PHP-Frame­works er­leich­tert Ihnen das Erstellen au­to­ma­ti­sier­ter Antworten, wie sie bei­spiels­wei­se beim Betreiben eines Webshops anfallen. Auch für Kon­takt­for­mu­la­re auf Ihrer Website bietet sich PHPMailer bestens an.

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

Um mit PHPMailer arbeiten zu können, benötigen Sie als erstes einen SMTP-Server. Ob Sie den Mail-Server von einem Provider nutzen oder Ihren eigenen Server aufsetzen, ist dabei ganz Ihnen über­las­sen. Darüber hinaus ist für die In­stal­la­ti­on der PHP-Er­wei­te­rung ein Pa­ket­ma­na­ger für PHP wie etwa Composer emp­feh­lens­wert.

Tipp

Eine weitere Vor­aus­set­zung für den Einsatz von PHPMailer ist das Be­herr­schen von PHP-Grund­la­gen. Haben Sie hierbei noch Schwie­rig­kei­ten, hilft Ihnen unser PHP-Ein­stei­ger-Tutorial weiter!

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

Schritt 1: Aktuelle PHPMailer-Version her­un­ter­la­den

Laden Sie sich die neueste Version von PHPMailer herunter. Der Download kann mittels Pa­ket­ma­na­ger oder auch manuell von GitHub erfolgen.

Variante 1: Download mittels Composer

Haben Sie den Pa­ket­ma­na­ger Composer in­stal­liert, nutzen Sie hierzu einfach den Befehl:

composer require phpmailer/phpmailer
bash

Wichtig: Haben Sie PHPMailer mit Composer in­stal­liert, müssen Sie den Composer in Ihren PHP-Code einbinden, um Mails versenden zu können.

Hierfür bietet sich die folgende Codezeile an:

require_once "vendor/autoload.php";
php

Das Schlüs­sel­wort „require_once“ sorgt dafür, dass der Composer nur einmal ein­ge­bun­den werden kann. Alles andere könnte zu un­vor­her­seh­ba­rem Verhalten oder zu Pro­gramm­feh­lern führen. Die In­stal­la­ti­on mittels Composer ist nun ab­ge­schlos­sen.

Variante 2: Download direkt von GitHub

Die PHPMailer Quell­da­tei­en kann man auch manuell her­un­ter­la­den, indem man im ent­spre­chen­den GitHub-Re­po­si­to­ry den Button „Code“ betätigt und die ZIP-Datei her­un­ter­lädt. Ist Git auf Ihrem System in­stal­liert, können Sie al­ter­na­tiv das Re­po­si­to­ry per Kom­man­do­zei­len­be­fehl „klonen“.

Schritt 2: Dateien entpacken

Haben Sie den Quellcode von PHPMailer manuell her­un­ter­ge­la­den, müssen Sie die ZIP-Datei öffnen. Wählen Sie hierfür den Ort aus, an dem Sie PHPMailer in­stal­lie­ren möchten. Auch hier müssen Sie PHPMailer zunächst in Ihr Skript einbinden. Ausgehend von der Annahme, dass Sie die PHPMailer-Dateien in einem Ver­zeich­nis namens „PHPMailer“ entpackt haben, nutzen Sie hierfür folgende Zeilen 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

Versenden von E-Mails mit PHPMailer: Schritt-für-Schritt-Anleitung

Schritt 1: Na­mens­räu­me einbinden

Um bequem auf den PHPMailer zu­zu­grei­fen, stellen Sie zunächst sicher, dass die Na­mens­räu­me korrekt ein­ge­bun­den sind. Hierfür werden use-State­ments genutzt, sodass Ihr Code folgende Zeilen enthalten sollte:

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

Auf die einzelnen Klassen können Sie nun zugreifen, indem Sie den Namen nach dem letzten Slash benutzen.

Schritt 2: Fehler abfangen

Auch, wenn PHPMailer eine sehr zu­ver­läs­si­ge Variante ist, um E-Mails zu versenden, kann es hin und wieder zu Fehlern kommen. Damit keine sensiblen Daten Ihres Mail­ser­vers in Form einer Feh­ler­mel­dung an die Nutzenden aus­ge­ge­ben werden, lohnt es sich, den E-Mail­ver­sand mithilfe einer so­ge­nann­ten Try-Catch-Anweisung zu umgeben:

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: Au­then­ti­fi­ka­ti­on mit SMTP

Um PHPMailer nutzen zu können, müssen Sie sich an­schlie­ßend mit über SMTP au­then­ti­fi­zie­ren. Hierzu geben Sie neben der Adresse Ihres Mail­ser­vers das ent­spre­chen­de Protokoll (entweder TLS/SSL oder SMTP) samt Port, Ihren Nut­zer­na­men und Ihr Passwort ein. Welches Protokoll und welcher Port verwendet werden, ist abhängig von Ihrem Mail­pro­vi­der. Die je­wei­li­gen Ser­ver­da­ten lassen sich auf den Websites der Mail­an­bie­ter einfach abrufen.

$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

Anstelle von ENCRYPTION_STARTTLS können Sie al­ter­na­tiv ENCRYPTION_SMTPS als Ver­schlüs­se­lungs­me­tho­de festlegen. Beim letzteren wird eine Ver­bin­dung nur dann etabliert, wenn TLS aktiv ist. Die Kom­mu­ni­ka­ti­on mit einem Server ist also nur möglich, wenn dieser die er­for­der­li­chen Ver­schlüs­se­lungs­maß­nah­men un­ter­stützt. Bei StartTLS wird die Ver­bin­dung zum Mail­ser­ver hingegen zuerst un­ver­schlüs­selt aufgebaut. Erst im Nach­hin­ein wird ver­schlüs­selt, falls keine TLS-Ver­schlüs­se­lung möglich ist, erfolgt der restliche Da­ten­aus­tausch un­ver­schlüs­selt.

SMTPS bietet also einen höheren Si­cher­heits­grad, während StartTLS eine bessere Kom­pa­ti­bi­li­tät bietet. Aus diesem Grund wird StartTLS in der Regel bevorzugt.

Schritt 4: Emp­fan­gen­de der E-Mail angeben

Nun können Sie die Emp­fan­gen­de E-Mail im Skript angeben.

// 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: Mailin­halt hin­zu­fü­gen

Das Wich­tigs­te darf natürlich nicht fehlen: der Inhalt Ihrer E-Mail. Dieser Inhalt besteht in der Regel aus einem Betreff und einem Text, der sowohl als HTML- als auch als Nicht-HTML-Version angegeben wird. Wichtig: Ältere Software kann nicht zwingend mit dem aktuellen HTML5-Standard umgehen, sodass es sich lohnen kann, Ihre E-Mail lediglich mit HTML zu designen.

Auch Anhänge können Sie mit PHPMailer mühelos versenden. Hierzu hilft Ihnen die Funktion add­At­tach­ment. Sowohl Bilder als auch Musik, Dokumente, Videos oder GIFs können mit PHPMailer ver­schickt werden. Sie können Ihre Anhänge außerdem mit einem op­tio­na­len zweiten Parameter, der der Funktion übergeben wird, 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: Korrekte Zei­chen­ko­die­rung verwenden

Im deutsch­spra­chi­gen Raum bietet es sich aufgrund der ver­schie­de­nen Umlaute an, UTF-8 bei PHPMailer zu ak­ti­vie­ren, sodass ins­be­son­de­re bei der Nutzung ver­schie­de­ner Anhänge keine Dar­stel­lungs­feh­ler auftreten. Fügen Sie hierzu folgende Zeilen Code in Ihr PHP-Skript ein:

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

Schritt 7: E-Mail versenden

In einem letzten Schritt müssen Sie Ihre E-Mail nur noch versenden. Hierzu nutzen Sie den Befehl:

$mail->send();
php

Achten Sie darauf, den gesamten hier gezeigten Code bis hin zu dieser Sen­de­auf­for­de­rung im Try-An­wei­sungs­block Ihres Skripts zu plat­zie­ren, damit even­tu­el­le Fehler wie be­schrie­ben ab­ge­fan­gen werden.

Ein Code­bei­spiel zum E-Mail-Versand

Den gesamten Code, den Sie benötigen, um eine E-Mail, die außerdem ein Bild als Anhang hat, mit PHPMailer an einen Emp­fan­gen­den Ihrer Wahl zu versenden, finden Sie hier noch einmal zu­sam­men­ge­fasst:

<?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
Pro­fes­sio­nel­les E-Mail-Hosting ganz nach Ihrem Bedarf
  • Per­so­na­li­sier­te E-Mail-Adresse
  • Zugriff auf E-Mails immer und überall
  • Höchste Si­cher­heits­stan­dards
Zum Hauptmenü