// so behebst du es
PHPMailer „SMTP Error: Could not authenticate“: so behebst du es
PHPMailer scheitert mit SMTP Error: Could not authenticate? Schalte die Debug-Ausgabe ein und korrigiere Anmeldung, Port, Verschlüsselung oder Anbietereinstellungen.
Was das bedeutet
PHPMailer hat sich mit dem SMTP-Server verbunden, aber der Server hat Benutzername und Passwort abgelehnt. PHPMailer zeigt eine kurze Meldung:
SMTP Error: Could not authenticate.
Dieser kurze Text verschweigt den eigentlichen Grund. Die Antwort des Servers (oft ein 535-Code) ist nur mit eingeschalteter Debug-Ausgabe sichtbar. Verwechsle das nicht mit SMTP connect() failed: Das bedeutet, dass PHPMailer den Server gar nicht erst erreicht hat (falscher Host, Port gesperrt, TLS-Problem).
Warum das passiert
- Falscher Benutzername oder falsches Passwort. Die meisten Anbieter wollen die vollständige E-Mail-Adresse als Benutzernamen. Passwörter mit Sonderzeichen können abgeschnitten oder verändert werden, wenn sie in einer
.env-Datei oder einer Konfiguration mit Anführungszeichen stehen. - Der Anbieter akzeptiert das normale Passwort nicht mehr. Gmail verlangt ein App-Passwort (siehe Gmail 535 5.7.8 username and password not accepted). Bei Microsoft 365 ist SMTP AUTH oft ausgeschaltet (siehe Microsoft 365 535 5.7.139).
- Spezielle SMTP-Zugangsdaten. Dienste wie Amazon SES, SendGrid oder Mailgun nutzen eigene SMTP-Zugangsdaten, nicht deine Konto-Anmeldung (zu SES siehe Amazon SES 535 credentials invalid).
- Falsche Kombination aus Port und Verschlüsselung. Port 465 braucht implizites TLS (
ENCRYPTION_SMTPS); Port 587 braucht STARTTLS (ENCRYPTION_STARTTLS). Manche Server bieten die Anmeldung erst an, wenn die Verschlüsselung aktiv ist. - Der Hoster leitet SMTP um. Manche Shared Hoster schicken jeden ausgehenden SMTP-Verkehr an ihren eigenen Server. Deine Anmeldung landet dann beim falschen Server und scheitert.
- Konto gesperrt oder blockiert nach zu vielen Fehlversuchen oder wegen einer Sicherheitsprüfung des Anbieters.
So prüfst du es
Schalte die Debug-Ausgabe für einen Test ein (lass sie im Produktivbetrieb nie an, sie gibt den Anmeldeaustausch aus):
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->Host = 'smtp.example.com';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = 'you@yourdomain.com';
$mail->Password = getenv('SMTP_PASSWORD');Lies die Zeilen, die mit SERVER -> CLIENT beginnen:
- Eine
535-Zeile nachAUTHnennt den Grund des Anbieters (falsche Zugangsdaten, App-Passwort erforderlich, SMTP AUTH deaktiviert…). - Zeigen die
220-Begrüßung oder das Zertifikat einen Hostnamen, der nicht zu deinem Anbieter gehört, leitet dein Hoster SMTP um. - Erscheint in der
250-Liste nachEHLOkeinAUTH, bietet der Server auf diesem Port oder vor TLS keine Anmeldung an.
Teste dieselbe Anmeldung außerhalb von PHP mit swaks, vom selben Server aus:
swaks --server smtp.example.com:587 --tls --auth LOGIN \ --auth-user you@yourdomain.com --to you@yourdomain.com
Funktioniert swaks, liegt das Problem in deiner PHP-Konfiguration (Anführungszeichen ums Passwort, falsche Variable). Scheitert swaks auch, liegt es am Konto oder am Anbieter.
So behebst du es
- Nutze genau die Einstellungen deines Anbieters: Host, Port, Verschlüsselung und Format des Benutzernamens aus seiner Dokumentation.
- Speichere das Passwort sicher und prüfe, ob es richtig gelesen wird (gib bei einem Test seine Länge aus, nicht das Passwort).
- Verwende die richtige Art von Zugangsdaten: ein App-Passwort für Gmail, SMTP-Zugangsdaten für SES oder andere Dienste und für Microsoft 365 ein Postfach mit aktiviertem SMTP AUTH. PHPMailer unterstützt für Gmail und Microsoft 365 auch OAuth2 (XOAUTH2), wenn du keine Passwörter nutzen willst.
- Port und Verschlüsselung passend wählen: 587 mit
ENCRYPTION_STARTTLSoder 465 mitENCRYPTION_SMTPS. - Bei Shared Hosting frag den Hoster, ob ausgehendes SMTP umgeleitet wird, und nutze seinen SMTP-Server oder erlaube externes SMTP im Panel, falls er das anbietet.
- Entsperre das Konto, wenn der Anbieter es blockiert hat, und versuche es dann einmal erneut statt in einer Schleife.
Sobald E-Mails rausgehen, stelle sicher, dass sie für deine Domain authentifiziert sind; Kontaktformulare und WordPress-Sites haben zusätzliche Fallstricke, die in Website-E-Mails landen im Spam behandelt werden.
Prüfe, ob es behoben ist
Führe das Skript erneut mit eingeschaltetem Debug aus: Du solltest 235 Authentication successful (der Wortlaut variiert) und dann 250 nach den Nachrichtendaten sehen. Setze als Empfänger die einmalige Adresse auf der Startseite von Delivmail und lies den Bericht, um SPF, DKIM und DMARC zu prüfen. Schalte dann Debug aus und sende an den echten Empfänger.
Prüfe, ob es behoben ist
DNS-Änderungen können ein paar Minuten bis einige Stunden dauern. Sende danach eine neue Test-E-Mail oder scanne deine Domain erneut.
Ähnliche Anleitungen
- E-Mails von deiner Website oder WordPress landen im SpamKontaktformulare, Bestellbestätigungen und Passwort-Zurücksetzungen deiner Website landen oft im Spam. Sende sie über authentifiziertes SMTP oder einen Dienst für Transaktions-E-Mails.
- Amazon SES SMTP „535 Authentication Credentials Invalid“: so behebst du esAmazon SES lehnt deinen SMTP-Login mit 535 Authentication Credentials Invalid ab. Nutze echte SMTP-Zugangsdaten, die richtige Region und teste sie.
- Amazon SES „Throttling: Maximum sending rate exceeded“ (454): so behebst du esAmazon SES meldet „Maximum sending rate exceeded“ oder „Daily message quota exceeded“. Prüfe deine Kontingente, sende langsamer und beantrage mehr.
- Mailgun „401 Forbidden“: falscher API-Schlüssel oder EU/US-Region passt nichtMailgun meldet 401 Forbidden oder Unauthorized. Prüfe die Art des API-Schlüssels, den Benutzernamen „api“ und ob deine Domain den US- oder EU-Endpunkt nutzt.
- Gmail SMTP „535-5.7.8 Username and Password not accepted“ (und 534-5.7.9)Der Gmail-SMTP-Login scheitert mit 535-5.7.8 oder 534-5.7.9 „Application-specific password required“? Nutze ein App-Passwort oder OAuth statt deines Passworts.