Verwendung der PHPMailer-Bibliothek zum Versenden von Nachrichten über SMTP

Einführung #

Die Integration einer SMTP-Bibliothek in Ihre Anwendung erfordert Kenntnisse in der PHP-Programmierung. Wenn Sie sich nicht sicher sind, wie Sie das Beispielskript in diesem Tutorial in Ihre PHP-Anwendung integrieren können, müssen Sie sich an einen PHP-Entwickler wenden, der über die erforderlichen Fähigkeiten und die nötige Ausbildung verfügt, um dies für Sie zu tun.

Wenn Ihre Anwendung E-Mails versenden muss, haben Sie zwei Möglichkeiten:

  1. Verwenden Sie die PHP-Funktion mail()
  2. Verwenden Sie eine SMTP-Bibliothek wie PHPMailer

Der Vorteil der mail()-Funktion von PHP ist, dass sie unglaublich einfach und leicht zu benutzen ist.
Allerdings hat die Verwendung der mail()-Funktion auch ein paar Nachteile:

  1. Microsoft-basierte E-Mail-Provider markieren Nachrichten, die mit PHP mail() erstellt wurden, als Spam, da sie die DKIM-Header, die von PHP’s mail() generiert werden, nicht erkennen.
  2. Die mail()-Funktion arbeitet auf synchrone Weise und zwingt die Anwendung, auf den Abschluss der SMTP-Transaktion zu warten, bevor sie etwas anderes tun kann.

Wenn Sie eine SMTP-Bibliothek wie PHPMailer verwenden, haben Sie diese Nachteile nicht, aber es ist ein wenig mehr Einrichtungsaufwand erforderlich. Auch wenn der Einrichtungsaufwand für Sie höher ist, empfehlen wir immer die Verwendung einer SMTP-Bibliothek wie PHPMailer.

Vorgehen über den cPanel Dateimanager #

  1. Loggen Sie sich in das cPanel-Konto für Ihren Benutzer ein.
  2. Suchen Sie unter dem Abschnitt Dateien nach dem Symbol „Dateimanager“.
  3. Klicken Sie auf das Verzeichnis „public_html“, um es zu öffnen.
  4. Laden Sie die PHPMailer-Bibliothek als Zip-Datei herunter: PHPMailer auf Github
  5. Laden Sie die Zip-Datei in den Dateimanager hoch, indem Sie auf die Schaltfläche „Upload“ im horizontalen Menü am oberen Rand anklicken. Im Folgefenster wählen Sie die Zip-Datei aus und laden diese hoch.
  6. Verwenden Sie die Schaltfläche „Entpacken“ im horizontalen Menü des Dateimanagers, um die PHPMailer-Bibliothek zu entpacken.
  7. Erstellen Sie eine neue PHP-Datei namens „test.php“ im Verzeichnis „public_html“ mit dem Inhalt des unten stehenden Beispielskripts.
  8. Aktualisieren Sie das Beispiel-Skript mit Ihren eigenen Anpassungen (Zugangsdaten).
  9. Testen Sie das Skript, indem Sie die URL der Datei aufrufen: https://IHRE-DOMAIN/test.php

WICHTIG: Entfernen Sie das Test-Skript direkt nach Ihrem Test oder schützen Sie den Zugriff mit Hilfe eines Verzeichnis-Schutzes. Einen Verzeichnis-Schutz können Sie im cPanel Interface aktivieren. Ansonsten sind auch externe Menschen in der Lage EMails über Ihr Test-Skript zu versenden! #

Beispiel (PHPMailer) test.php #

Unser technischer Support bietet keine Unterstützung bei der Implementierung, Fehlersuche oder Wartung des Skripts.
Das folgende Beispielskript ist ein guter Startpunkt für den Anfang. Es ist kompatibel mit PHPMailer 6.1.2. Dieses Beispielskript verwendet „require“-Anweisungen für die drei PHP-Dateien, die PHPMailer benötigt, um auf einfachste Weise zu funktionieren.

Dieses Skript ist so eingestellt, dass es standardmäßig eine detaillierte Debug-Ausgabe erzeugt. Das Skript muss modifiziert werden, damit es in Ihrer spezifischen Umgebung funktioniert. Sie müssen die folgenden Daten anpassen:

  • Die Pfade zu den PHP-Dateien in den require-Anweisungen
  • $mail->Host – Verwenden Sie den Hostnamen Ihres cPanel-Servers statt Ihrer eigenen Domain
  • $mail->Username – Verwenden Sie die E-Mail-Adresse eines Ihrer E-Mail-Konten
  • $mail->Password – Verwenden Sie das Passwort für das E-Mail-Konto welches Sie nutzen.
  • $mail->setFrom – Verwenden Sie dieselbe E-Mail-Adresse, wie bei der obigen Konfiguration des Benutzernamens.
  • $mail->addAddress – Geben Sie hier die Empfängeradresse an.
  • $mail->addReplyTo – Setzen Sie diese Adresse auf dieselbe E-Mail Adresse, wie bei der obigen Konfiguration des Benutzernamens.
  • $mail->addCC – Entfernen Sie diese Zeile oder tragen Sie eine CC-Empfängeradresse ein.
  • $mail->addBCC – Entfernen Sie diese Zeile oder tragen Sie eine BCC-Empfängeradresse ein.
  • $mail->addAttachment – Entfernen Sie diese Zeile oder aktualisieren Sie den Pfad zu einer anzuhängenden Datei.
  • $mail->Subject – Tragen Sie Ihren gewünschten Betreff ein.
  • $mail->Body – Aktualisieren Sie diesen Bereich mit dem von Ihnen gewünschten E-Mail Inhalt. Dieser Inhalt kann in reinem Text oder HTML Code eingetragen werden.
  • $mail->AltBody – Tragen Sie hier den reinen Text-Inhalt Ihrer E-Mail ein.
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require '/home/cpanelbenutzer/PHPMailerTest/PHPMailer/src/Exception.php';
require '/home/cpanelbenutzer/PHPMailerTest/PHPMailer/src/PHPMailer.php';
require '/home/cpanelbenutzer/PHPMailerTest/PHPMailer/src/SMTP.php';

// Instantiation and passing [ICODE]true[/ICODE] enables exceptions
$mail = new PHPMailer(true);

try {
 //Server settings
 $mail->SMTPDebug = 2; // Enable verbose debug output
 $mail->isSMTP(); // Set mailer to use SMTP
 $mail->Host = 'HOSTNAME IHRES SERVERS'; // Specify main and backup SMTP servers
 $mail->SMTPAuth = true; // Enable SMTP authentication
 $mail->Username = 'IHR E-MAIL POSTFACH'; // SMTP username
 $mail->Password = 'IHR E-MAIL-PASSWORT'; // SMTP password
 $mail->SMTPSecure = 'tls'; // Enable TLS encryption
 $mail->Port = 587; // TCP port fuer die Verbindung

//Recipients
 $mail->setFrom('info@ihre-domain.tld', 'Ihr Name');
 $mail->addAddress('recipient1@empfaenger.tld', 'Joe User'); // Add a recipient
 $mail->addReplyTo('info@ihre-domain.tld', 'Ihr Name');
 $mail->addCC('cc@empfaenger.tld'); // zusätzlicher CC Empfänger
 $mail->addBCC('bcc@empfaenger.tld'); // zusätzlicher BCC Empfänger

// Attachments
 $mail->addAttachment('/home/cpanelbenutzer/public_html/attachment.txt'); // Add attachments
 $mail->addAttachment('/home/cpanelbenutzer/public_html/image.jpg', 'new.jpg'); // Optional name

// Content
 $mail->isHTML(true); // Set email format to HTML
 $mail->Subject = 'Ihr Betreff';
 $mail->Body = 'Ihre EMail Nachricht in HTML oder Text';
 $mail->AltBody = 'Zusätzlich Ihre EMail Nachricht in reinem Text';

$mail->send();
 echo 'Nachricht wurde versendet';

} catch (Exception $e) {
 echo "Nachricht konnte nicht versendet werden. Fehler: {$mail->ErrorInfo}";
}
?>

Hostname ermitteln #

Der für Ihren Server zuständige Hostname können Sie ermitteln, wenn Sie sich in Ihr cPanel Webinterface einloggen. Sie finden den Hostnamen dann in der Browserzeile:

In diesem Bild-Beispiel wäre der im PHPMailer zu verwendende Hostname: server.cpprotect3.de