E-Mails versenden mit PHPMailer – so wird’s gemacht!

PHPMailer ist eine Programmbibliothek, das die E-Mail-Übertragung via PHP regelt. Einsatz findet diese Art des E-Mail-Versands vor allem bei Kontaktformularen 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 Rechenzentren
  • Jederzeit mobiler Zugriff dank Microsoft Outlook

Was ist PHPMailer?

PHPMailer ist eine von der Community bereitgestellte Mail-Erweiterung für PHP. Im Gegensatz zur Mail-Funktion, die in PHP von Anfang an implementiert ist, ist die Wahrscheinlichkeit, dass mit PHPMailer versendete E-Mails im Spam-Ordner landen, wesentlich 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 übertragen werden. Zudem unterstützt PHPMailer in Gegensatz zur eingebauten Mail-Funktion auch HTML-Mails und Anhänge.

Wofür nutzt man PHPMailer?

Die Nutzung von PHPMailer ist ein wenig umständlicher als die Nutzung von E-Mail-Providern oder integrierten Mailprogrammen am Computer. Eine berechtigte Frage ist daher, in welchen Gebieten sich der Einsatz von PHPMailer lohnt. Der Einsatz des PHP-Frameworks erleichtert Ihnen das Erstellen automatisierter Antworten, wie sie beispielsweise beim Betreiben eines Webshops anfallen. Auch für Kontaktformulare auf Ihrer Website bietet sich PHPMailer bestens an.

Voraussetzungen 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 überlassen. Darüber hinaus ist für die Installation der PHP-Erweiterung ein Paketmanager für PHP wie etwa Composer empfehlenswert.

Tipp

Eine weitere Voraussetzung für den Einsatz von PHPMailer ist das Beherrschen von PHP-Grundlagen. Haben Sie hierbei noch Schwierigkeiten, hilft Ihnen unser PHP-Einsteiger-Tutorial weiter!

Installation von PHPMailer: Schritt-für-Schritt-Anleitung

Schritt 1: Aktuelle PHPMailer-Version herunterladen

Laden Sie sich die neueste Version von PHPMailer herunter. Der Download kann mittels Paketmanager oder auch manuell von GitHub erfolgen.

Variante 1: Download mittels Composer

Haben Sie den Paketmanager Composer installiert, nutzen Sie hierzu einfach den Befehl:

composer require phpmailer/phpmailer
bash

Wichtig: Haben Sie PHPMailer mit Composer installiert, 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üsselwort „require_once“ sorgt dafür, dass der Composer nur einmal eingebunden werden kann. Alles andere könnte zu unvorhersehbarem Verhalten oder zu Programmfehlern führen. Die Installation mittels Composer ist nun abgeschlossen.

Variante 2: Download direkt von GitHub

Die PHPMailer Quelldateien kann man auch manuell herunterladen, indem man im entsprechenden GitHub-Repository den Button „Code“ betätigt und die ZIP-Datei herunterlädt. Ist Git auf Ihrem System installiert, können Sie alternativ das Repository per Kommandozeilenbefehl „klonen“.

Schritt 2: Dateien entpacken

Haben Sie den Quellcode von PHPMailer manuell heruntergeladen, müssen Sie die ZIP-Datei öffnen. Wählen Sie hierfür den Ort aus, an dem Sie PHPMailer installieren 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 Verzeichnis 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: Namensräume einbinden

Um bequem auf den PHPMailer zuzugreifen, stellen Sie zunächst sicher, dass die Namensräume korrekt eingebunden sind. Hierfür werden use-Statements 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 zuverlässige Variante ist, um E-Mails zu versenden, kann es hin und wieder zu Fehlern kommen. Damit keine sensiblen Daten Ihres Mailservers in Form einer Fehlermeldung an die Nutzenden ausgegeben werden, lohnt es sich, den E-Mailversand mithilfe einer sogenannten 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: Authentifikation mit SMTP

Um PHPMailer nutzen zu können, müssen Sie sich anschließend mit über SMTP authentifizieren. Hierzu geben Sie neben der Adresse Ihres Mailservers das entsprechende Protokoll (entweder TLS/SSL oder SMTP) samt Port, Ihren Nutzernamen und Ihr Passwort ein. Welches Protokoll und welcher Port verwendet werden, ist abhängig von Ihrem Mailprovider. Die jeweiligen Serverdaten lassen sich auf den Websites der Mailanbieter 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 alternativ ENCRYPTION_SMTPS als Verschlüsselungsmethode festlegen. Beim letzteren wird eine Verbindung nur dann etabliert, wenn TLS aktiv ist. Die Kommunikation mit einem Server ist also nur möglich, wenn dieser die erforderlichen Verschlüsselungsmaßnahmen unterstützt. Bei StartTLS wird die Verbindung zum Mailserver hingegen zuerst unverschlüsselt aufgebaut. Erst im Nachhinein wird verschlüsselt, falls keine TLS-Verschlüsselung möglich ist, erfolgt der restliche Datenaustausch unverschlüsselt.

SMTPS bietet also einen höheren Sicherheitsgrad, während StartTLS eine bessere Kompatibilität bietet. Aus diesem Grund wird StartTLS in der Regel bevorzugt.

Schritt 4: Empfangende der E-Mail angeben

Nun können Sie die Empfangende 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: Mailinhalt hinzufügen

Das Wichtigste 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 addAttachment. Sowohl Bilder als auch Musik, Dokumente, Videos oder GIFs können mit PHPMailer verschickt werden. Sie können Ihre Anhänge außerdem mit einem optionalen zweiten Parameter, der der Funktion übergeben wird, umbenennen.

$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 Zeichenkodierung verwenden

Im deutschsprachigen Raum bietet es sich aufgrund der verschiedenen Umlaute an, UTF-8 bei PHPMailer zu aktivieren, sodass insbesondere bei der Nutzung verschiedener Anhänge keine Darstellungsfehler 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 Sendeaufforderung im Try-Anweisungsblock Ihres Skripts zu platzieren, damit eventuelle Fehler wie beschrieben abgefangen werden.

Ein Codebeispiel 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 Empfangenden Ihrer Wahl zu versenden, finden Sie hier noch einmal zusammengefasst:

<?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
E-Mail-Hosting
Professionelles E-Mail-Hosting ganz nach Ihrem Bedarf
  • Personalisierte E-Mail-Adresse
  • Zugriff auf E-Mails immer und überall
  • Höchste Sicherheitsstandards
War dieser Artikel hilfreich?
Page top