E-Mails verschicken mit PHPMailer: So geht's einfach!
PHPMailer ist eine Programmbibliothek, die den E-Mail-Versand via PHP steuert. Diese Methode kommt vor allem bei Kontaktformularen auf Websites zum Einsatz, eignet sich aber ebenso für den privaten Nachrichtenversand.
Was ist PHPMailer?
PHPMailer ist eine von der Community bereitgestellte Mail-Erweiterung für PHP. Im Vergleich zur standardmäßigen PHP-Mail-Funktion sinkt bei PHPMailer die Gefahr massiv, dass deine Nachrichten im Spam landen. Das liegt daran, dass der Versand via SMTP erfolgt – dem Standardprotokoll für den E-Mail-Transport im Web. Ein weiterer Pluspunkt: PHPMailer beherrscht im Gegensatz zur Basis-Funktion auch HTML-Mails und Dateianhänge problemlos.
Wofür nutzt man PHPMailer?
Zugegeben, die Einrichtung von PHPMailer ist etwas aufwendiger als die Nutzung eines Mail-Clients. Doch der Einsatz lohnt sich besonders dann, wenn du Prozesse automatisieren willst. Betreibst du etwa einen Webshop, lassen sich Bestätigungen damit leicht generieren. Auch für Kontaktformulare auf deiner Präsenz ist PHPMailer die ideale Lösung, damit Anfragen sicher bei dir ankommen.
Voraussetzungen 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 Infrastruktur nutzt, bleibt dir überlassen. Für die Installation der Erweiterung empfehlen wir dir zudem einen Paketmanager wie Composer.
Grundkenntnisse in PHP sind für die Arbeit mit PHPMailer essenziell. Falls du hier noch Unterstützung benötigst, hilft dir unser PHP-Guide für Einsteiger:innen weiter!
Installation 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 Paketmanager oder manuell via GitHub erledigen.
Variante 1: Installation via Composer
Falls du den Paketmanager Composer bereits nutzt, genügt dieser Befehl:
composer require phpmailer/phpmailerbashWichtig: Wenn du diesen Weg wählst, musst du den Composer in deinen PHP-Code einbinden, um den Versand zu ermöglichen.
Verwende dazu diese Zeile:
require_once "vendor/autoload.php";phpDer Befehl „require_once“ stellt sicher, dass der Composer nur einmal geladen wird, um Fehler im Programmablauf zu vermeiden. Damit ist die Installation fertig.
Variante 2: Manueller Download von GitHub
Du kannst die Quelldateien auch händisch beziehen. Klicke dazu im GitHub-Repository auf „Code“ und lade das ZIP-Archiv herunter. Falls Git auf deinem Rechner läuft, kannst du das Repository auch direkt via Kommandozeile klonen.
Schritt 2: Daten entpacken
Nach dem manuellen Download musst du die ZIP-Datei entpacken. Wähle dafür das Verzeichnis, in dem PHPMailer liegen soll. Anschließend bindest du die Library in dein Skript ein. Angenommen, 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);phpE-Mails versenden mit PHPMailer: So geht’s
Schritt 1: Namensräume definieren
Damit du leicht auf die Funktionen zugreifen kannst, müssen die Namensräume stimmen. Mit diesen use-Statements in deinem Code klappt der Zugriff reibungslos:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;phpDu kannst die Klassen nun direkt über den Namen nach dem letzten Slash ansprechen.
Schritt 2: Fehlerbehandlung einrichten
PHPMailer arbeitet extrem zuverlässig, dennoch können Fehler auftreten. Damit deine Serverdaten 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();
}phpSchritt 3: SMTP-Authentifizierung
Jetzt folgt die Anmeldung am SMTP-Server. Gib die Serveradresse, das Protokoll (TLS/SSL oder SMTP) inklusive Port sowie deinen Usernamen und das Passwort an. Diese Daten findest du direkt in den Einstellungen deines Mailanbieters.
$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;phpStatt ENCRYPTION_STARTTLS kannst du auch ENCRYPTION_SMTPS zur Verschlüsselung wählen. Hier wird eine Verbindung nur aufgebaut, wenn TLS aktiv ist. Das setzt voraus, dass der Server moderne Standards unterstützt. Bei StartTLS wird zunächst unverschlüsselt gestartet und erst bei Verfügbarkeit verschlüsselt – falls nicht, fließen die Daten im Klartext weiter.
Somit bietet SMTPS mehr Sicherheit, während StartTLS oft eine bessere Kompatibilität aufweist. In der Praxis wird StartTLS meist bevorzugt.
Schritt 4: Empfangsadresse festlegen
Trage nun die Zieladresse 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');phpSchritt 5: Mail-Inhalt gestalten
Nun geht es ans Eingemachte: den Inhalt. Erstelle einen Betreff und den Text, idealerweise sowohl als HTML- als auch als Plain-Text-Variante. Tipp: Da manche ältere Programme Probleme mit HTML5 haben könnten, fährst du mit klassischem HTML oft sicherer.
Auch Anhänge sind für PHPMailer ein Leichtes. Nutze dafür einfach die Funktion addAttachment. Egal ob Fotos, Musik, PDF-Dokumente oder Videos – alles ist möglich. Mit einem optionalen zweiten Parameter kannst du die Dateien beim Versenden sogar 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");phpSchritt 6: Zeichenkodierung optimieren
Damit Umlaute und Sonderzeichen korrekt ankommen, solltest du UTF-8 aktivieren. So verhinderst du unschöne Darstellungsfehler in deinen Nachrichten. Ergänze dein Skript einfach um diese Zeile:
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';phpSchritt 7: Nachricht abschicken
Zum Abschluss musst du die Mail nur noch auf die Reise schicken. Das erledigt dieser Befehl:
$mail->send();phpAchte darauf, dass dieser gesamte Ablauf innerhalb des Try-Blocks steht, damit du bei Fehlern sofort informiert wirst.
Code-Beispiel für den Versand
Hier siehst du noch einmal kompakt den gesamten Code für eine E-Mail inklusive Bildanhang, 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