Skip to content

authentication failure SMTP: STARTTLS failed

Es gibt Momente in denen verflucht man andere Entwickler. Heute hatte ich ein solches Problem. Nachdem ich im Net SMTP Pear Paket das Debugging auf einem Kundenserver aktiviert hatte, bekam ich die Meldung authentication failure [SMTP: STARTTLS failed (code: 220, response: 2.0.0 Ready to start TLS)]. Obwohl sich die Login Credentials nicht geändert hatten funktionierte der Mailversand auf dem Server nicht mehr. Was war geschehen?

Die meisten werden zum Versenden von Mails in PHP die built-in Funktion mail verwenden. Auf dem ersten Blick ist diese auch ideale und beinhaltet alle notwendigen Funktionen. Wenn man sich jedoch beispielsweise auf einem Shared Host befindet, dann kann es schnell mal passieren, dass die IP des Servers auf einer Blacklist erscheint und Mails nicht mehr zuverlässig zugestellt werden können.
Eine Möglichkeit um dies zu verhindern ist die Nutzung eines SMTP Servers, der auch von den E-Mail Programmen genutzt wird. Man muss sich dabei bei seinem Mail Server authentifizieren und kann dann „verifizierte“ E-Mails versenden.
Um diese Funktion in PHP nutzen zu können gibt es unter anderen das PEAR Paket Net_SMTP.
Leider hat dieses Paket einen kleinen Nachteil, wenn man nämlich seine PHP Version aktualisiert – wie geschehen bei dem Kundenserver – dann kann es vorkommen, dass folgende Bedingung beim Verbindungsaufbau mit dem SMTP Mail Server zutrifft:

version_compare(PHP_VERSION, '5.1.0', '>=') &&
extension_loaded('openssl') && isset($this->_esmtp['STARTTLS']) &&
strncasecmp($this->host, 'ssl://', 6) !== 0

Diese unscheinbar aussehende Zeile Code sorgt dafür, dass eine verschlüsselte Verbindung erwzungen wird, wenn der Mail Server STARTTLS unterstützt. Dieses Funktion ist sehr praktisch, wenn man sichergehen möchte, dass die Kommunikation mit dem Server verschlüsselt erfolgt.
Leider kann es durch diesen „Sicherheitszwang“ dazu kommen, dass man nach dem Update die Fehlermeldung authentication failure [SMTP: STARTTLS failed (code: 220, response: 2.0.0 Ready to start TLS)] erhält.

Dies ist genau dann der Fall, wenn man sich zum Beispiel mit einem SMTP Server von All-Inkl verbindet und der Host (smtp.example.com) nicht mit dem Zertifikatshost (*.kasserver.com) übereinstimmt. In diesem Fall wird die Verbindung abgelehnt, weil es sich um ein gefälschtes Zertifikat handeln könnte und das Senden einer E-Mail wird unmöglich.

Als Lösung reicht es in diesem Fall, wenn man entweder den internen Mail Server Host in das Script einbaut oder ein neues Zertifikat mit dem korrekt Host erstellt.

Jens Altmann

Avatar Jens Altmann

Jens Altmann bloggt auf gefruckelt.de regelmäßig über alle Themen, die ihn interessieren. Neben seiner Tätigkeit als Softwarearchitekt studiert er Wirtschaftsinformatik an der Uni Potsdam.

Weitere Informationen über Jens Altmann

Interessante Artikel

Kommentare

Keine Kommentare

Kommentiere diesen Artikel als erstes!

Kommentiere den Artikel

Required

Required

Optional