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

PHPMailer ist eine **Programmbibliothek**, das die [E-Mail-Übertragung](https://www.ionos.com/de-ch/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 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](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 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](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 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:

```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 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.com/de-ch/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 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 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 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.com/de-ch/digitalguide/e-mail/e-mail-technik/phpmailer/](https://www.ionos.com/de-ch/digitalguide/e-mail/e-mail-technik/phpmailer/) for AI/LLM consumption.