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

PHPMailer ist eine **Programmbibliothek**, das die [E-Mail-Übertragung](https://www.ionos.de/digitalguide/e-mail/e-mail-technik/wie-funktioniert-die-e-mail-uebertragung/) 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.

## 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](https://www.ionos.de/digitalguide/e-mail/e-mail-technik/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](https://www.ionos.de/digitalguide/e-mail/e-mail-technik/smtp-server/). Ob Sie den [Mail-Server](https://www.ionos.de/office-loesungen/email-server "Mail-Server von IONOS") 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](https://www.ionos.de/digitalguide/websites/webseiten-erstellen/php-lernen-leicht-gemacht-das-grosse-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](https://www.ionos.de/digitalguide/websites/web-entwicklung/github/) erfolgen.

#### Variante 1: Download mittels Composer

Haben Sie den Paketmanager [Composer](https://getcomposer.org/ "Composer-Website") installiert, nutzen Sie hierzu einfach den Befehl:

```bash
composer require phpmailer/phpmailer
```

**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:

```php
require_once "vendor/autoload.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](https://github.com/PHPMailer/PHPMailer "PHPMailer bei GitHub") den Button „Code“ betätigt und die ZIP-Datei herunterlädt. Ist [Git](https://www.ionos.de/digitalguide/websites/web-entwicklung/git-tutorial/) 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](https://www.ionos.de/digitalguide/server/konfiguration/zip-datei-oeffnen/). 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:

```php
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);
```

## 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
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
```

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:

```php
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();
}
```

### 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](https://www.ionos.de/digitalguide/server/sicherheit/tls-vs-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.

```php
$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;
```

Anstelle von `ENCRYPTION_STARTTLS` können Sie alternativ `ENCRYPTION_SMTPS` als Verschlüsselungsmethode festlegen. Beim letzteren wird eine Verbindung **nur dann etabliert, wenn [TLS](https://www.ionos.de/digitalguide/server/sicherheit/tls-transport-layer-security/) aktiv ist**. Die Kommunikation mit einem Server ist also nur möglich, wenn dieser die erforderlichen Verschlüsselungsmaßnahmen unterstützt. Bei [StartTLS](https://www.ionos.de/digitalguide/e-mail/e-mail-technik/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.

```php
// 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');
```

### 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](https://www.ionos.de/digitalguide/websites/web-entwicklung/was-ist-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.

```php
$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");
```

### Schritt 6: Korrekte Zeichenkodierung verwenden

Im deutschsprachigen Raum bietet es sich aufgrund der verschiedenen **Umlaute** an, [UTF-8](https://www.ionos.de/digitalguide/websites/webseiten-erstellen/utf-8-codierung-globaler-digitaler-kommunikation/) 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:

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

### Schritt 7: E-Mail versenden

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

```php
$mail->send();
```

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
<?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();
}
```


This is a markdown version of: [https://www.ionos.de/digitalguide/e-mail/e-mail-technik/phpmailer/](https://www.ionos.de/digitalguide/e-mail/e-mail-technik/phpmailer/) for AI/LLM consumption.