Fehlerbehebung

Debug-Modus von PHPMailer aktivieren und SMTP-Fehler diagnostizieren

Geprüft am 4 Min. Lesezeit depuracion smtp

Der Debug-Modus von PHPMailer zeigt die SMTP-Kommunikation zwischen der Anwendung und dem Mailserver. Er ist der direkteste Weg, einen Fehler bei Verbindung, TLS, Authentifizierung oder eine Ablehnung der Nachricht zu unterscheiden.

Aktivieren Sie ihn nur, solange Sie das Problem nachstellen, mit einem Testempfänger und Testinhalt. Das Protokoll kann Absender, Empfänger, Header und den Text der Nachricht enthalten. Die Stufen 0 bis 3 verbergen SMTP-Benutzer und -Passwort, SMTP::DEBUG_LOWLEVEL kann sie jedoch anzeigen. Veröffentlichen Sie das vollständige Ergebnis nicht.

Die empfohlene Diagnosestufe aktivieren

Importieren Sie in PHPMailer 6 und 7 die Klassen und verwenden Sie die Konstante SMTP::DEBUG_SERVER, die der Stufe 2 älterer Versionen entspricht:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER;

Fügen Sie diese Optionen in die PHPMailer-Instanz ein, mit der Ihre Anwendung bereits sendet, nachdem ihre Klassen geladen wurden und bevor send() aufgerufen wird. Der Ausschnitt ist kein vollständiges Versandprogramm: Behalten Sie Ihre Konfiguration für Server, Authentifizierung und Testempfänger bei.

Diese Stufe protokolliert sowohl die vom Client gesendeten Befehle als auch die Antworten des Servers. Stufe 3 ergänzt Informationen zum Verbindungsaufbau und kann bei einem Timeout helfen. Stufe 4 zeigt Low-Level-Datenverkehr, kann die SMTP-Zugangsdaten offenlegen und sollte nur zur Analyse eines Protokollproblems in einer kontrollierten Umgebung verwendet werden.

Wenn Sie das Protokoll nicht in der HTML-Antwort anzeigen möchten und das error_log von PHP bereits auf ein privates Protokoll außerhalb von public_html zeigt, können Sie es dorthin senden:

$mail->Debugoutput = 'error_log';

Verwenden Sie diese Ausgabe nicht, ohne vorher zu prüfen, wohin PHP schreibt: Sie könnte in einem gemeinsam genutzten oder über das Web herunterladbaren Protokoll landen.

Wenn Sie fertig sind, deaktivieren Sie die Diagnose und löschen Sie das Protokoll, sobald es nicht mehr benötigt wird:

$mail->SMTPDebug = SMTP::DEBUG_OFF;

So lesen Sie das Ergebnis

Suchen Sie die letzte Antwort des Servers vor dem Fehler:

  • Es erscheint keine Antwort 220: Prüfen Sie Servername, DNS, Port und mögliche Netzwerksperren.
  • STARTTLS oder die Zertifikatsprüfung schlägt fehl: Prüfen Sie, dass TLS und Port zusammenpassen, die OpenSSL-Erweiterung aktiv ist und das System aktuelle CA-Zertifikate hat. Deaktivieren Sie die TLS-Prüfung nicht, um den Fehler zu verbergen.
  • Antwort 535 oder ähnlich: Der Server hat die Authentifizierung abgelehnt. Prüfen Sie vollständigen Benutzernamen, Passwort und die vom Anbieter unterstützte Methode.
  • Antwort 550 oder 5.7.x: Der Server hat die Anfrage erhalten, aber Absender, Empfänger oder Nachricht abgelehnt. Bewahren Sie den vollständigen Text auf, da er meist die angewandte Richtlinie nennt.
  • Antwort 250 nach Abschluss von DATA: Der Server hat die Nachricht zur Verarbeitung angenommen. Ein früheres 250, zum Beispiel nach EHLO oder MAIL FROM, bestätigt nicht den vollständigen Versand. Die Annahme garantiert auch keine Zustellung in den Posteingang. Landet die Nachricht danach im Spam, fahren Sie mit der Anleitung zur Zustellbarkeit fort.

Die offizielle Anleitung zur Fehlerbehebung von PHPMailer empfiehlt, aktuelle Beispiele zu verwenden, das vollständige SMTP-Protokoll zu lesen und das Netzwerk zu prüfen, bevor man das Problem der Bibliothek zuschreibt.

Nützliche Daten, um den Fehler nachzustellen

Notieren Sie die PHPMailer-Version, die PHP-Version, SMTP-Host und -Port, die Art der Verschlüsselung und die vollständige Fehlermeldung. Ersetzen Sie vorher jede private Adresse, jedes Token und alle Zugangsdaten. Ein Screenshot, der nur SMTP connect() failed zeigt, verbirgt meist genau die Antwort, mit der sich die Ursache finden lässt.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.