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.
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:
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.
Auf die einzelnen Klassen können Sie nun zugreifen, indem Sie den Namen nach dem letzten Slash benutzen.
Anstelle von
SMTPS bietet also einen höheren Sicherheitsgrad, während StartTLS eine bessere Kompatibilität bietet. Aus diesem Grund wird StartTLS in der Regel bevorzugt.
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.
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.
War dieser Artikel hilfreich?
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
bashHierfür bietet sich die folgende Codezeile an:
require_once "vendor/autoload.php";
phpVariante 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);
phpVersenden 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;
phpSchritt 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();
}
phpSchritt 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;
phpENCRYPTION_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');
phpSchritt 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");
phpSchritt 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';
phpSchritt 7: E-Mail versenden
In einem letzten Schritt müssen Sie Ihre E-Mail nur noch versenden. Hierzu nutzen Sie den Befehl:$mail->send();
phpEin 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