PHP Mail-Connection Test: So prüfst du sofort, ob dein Server den Mailserver erreichen kann
Kein Mailversand möglich? Prüfe mit diesem PHP-Skript sofort, ob dein Webserver den Mailserver erreichen kann – ganz ohne CMS-Ballast. Debugging leicht gemacht!
Nichts ist frustrierender als ein Kontaktformular oder eine System-Mail, die einfach nicht ankommt. Liegt es an der TYPO3-Konfiguration? Ist es ein Bug im Form-Framework? Oder – und das ist oft der Fall – blockiert die Firewall des Webservers die Verbindung zum Mailserver?
Bevor du stundenlang Logfiles deiner CMS-Installation wälzt, solltest du das Problem isolieren.
Ich habe ein kleines, effektives PHP-Skript geschrieben, mit dem du „barebone“ testen kannst, ob eine Verbindung zwischen deinem Webserver und dem Mailserver (SMTP) technisch überhaupt möglich ist.
Warum du dieses Skript nutzen solltest
Wenn Mails nicht hinausgehen, gibt es viele Fehlerquellen. Oft liegt das Problem gar nicht in deiner Applikation, sondern auf der Netzwerkebene:
- Firewalls: Der Hoster blockiert ausgehende Verbindungen auf Port 25, 465 oder 587.
- DNS-Probleme: Der Hostname des Mailservers wird nicht aufgelöst.
- Timeouts: Die Verbindung dauert zu lange.
Mit diesem Skript umgehst du die Komplexität von TYPO3, WordPress oder anderen Systemen. Es macht nur eine Sache: Es klopft beim Mailserver an und fragt: „Hallo, bist du da?“
Das Skript: Mail-Verbindung testen
Kopiere den folgenden Code, passe die Variablen oben ($host, $port) an deine Daten an und lade die Datei als mailtest.php auf deinen Server hoch.
<?php// Configuration$host = 'smtpout.secureserver.net';$ports = [25, 465, 587];echo "<h2>SMTP Connection Test</h2>";echo "Testing connection to <b>$host</b>...<br><br>";foreach ($ports as $port) {$connectionString = $host;if ($port == 465) {$connectionString = 'ssl://' . $host;}echo "Attempting port <b>$port</b>... ";// Attempt to connect with a 5-second timeout$fp = @fsockopen($connectionString, $port, $errno, $errstr, 5);if ($fp) {echo "<span style='color:green; font-weight:bold;'>SUCCESS</span> (Port is open)";fclose($fp);} else {echo "<span style='color:red; font-weight:bold;'>FAILED</span>";echo " <small>($errno: $errstr)</small>";}echo "<br>";}echo "<hr><h3>Interpretation:</h3>";echo "<ul>";echo "<li><b>SUCCESS:</b> The firewall is OPEN. Your issue is likely a typo in TYPO3 configuration.</li>";echo "<li><b>FAILED (Connection timed out):</b> The firewall is BLOCKING this port. You must contact your host.</li>";echo "</ul>";
So interpretierst du das Ergebnis
Rufe die Datei einfach im Browser auf (deine-domain.de/mailtest.php).
- Erfolg: Du erhältst eine Meldung, dass die Verbindung hergestellt wurde (oft mit einem Code wie
220vom Mailserver). Das bedeutet: Netzwerk und Firewall sind okay. Der Fehler liegt vermutlich in deiner CMS-Konfiguration oder den Zugangsdaten (User/Passwort). - Fehler (Connection Refused / Timeout): Wenn das Skript fehlschlägt, blockiert sehr wahrscheinlich eine Firewall oder der Port ist falsch. In diesem Fall musst du dich an deinen Hosting-Provider wenden, bevor du weiter im CMS suchst.
Fazit
Debugging muss nicht kompliziert sein. Mit diesem kleinen Helper sparst du dir beim nächsten Mail-Problem wertvolle Zeit und kannst den Fehler sofort eingrenzen.
Hast du das Skript ausprobiert? Schreib mir gerne, ob es dir bei der Fehlersuche geholfen hat!
T3 Campus