PHP PHP Statuscode 200, aber Response Error

N

Narox

Gast
Ich habe ein Kontaktformular erstellt, das über PHP Pear eine Mail versendet und je nach Ergebnis entweder den Statuscode 200 oder einen eigenen Statuscode 90x zurück geben soll.

Habe es gerade mit falschen E-Mail Daten versucht und es kam dennoch ein Statuscode 200 zurück. Geprüft habe ich es über Chrome Entwicklertools, dort hat die mail.php die 200 zurück geliefert, aber bei der Response stand folgendes:
" authentication failure [SMTP: Invalid response code received from server (code: 535, response: 5.7.8 Error: authentication failed: xxx)]"

Ich vermute in der PHP Datei ist etwas falsch, weiß aber leider nicht was.

Mein AJAX call:
Javascript:
function submitContactForm(){
    $.ajax({
        type: "POST",
        url: "https://www.xxx.de/test/mail.php",
        data: "anrede=" + $("#anrede").val(),
        statusCode: {
            200: function (response) {
                onSuccess();
            },
            900: function (response) {
                onFail();
            },
            901: function (response) {
                onFail();
            },
            902: function (response) {
                onFail();
            },
            903: function (response) {
                onFail();
            }
        }
    }).fail(function (data) {
        onFail();
    });
}

mail.php
PHP:
<?php
...

$host = "xxx.kasserver.com";
$port = "587";
$username = "xxx";
$password = "xxx";

$from = "info@xxx.de";
$to = "info@xxx.de";
$subject = "Formular";
$body = "Test";

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject, 'MIME-Version' => 1, 'Content-type' => 'text/html;charset=iso-8859-1');
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    echo $mail->getMessage();
    http_response_code(903);
    exit();
}

http_response_code(200);
exit();
 
Der Fehlermeldung nach zu urteilen sind deine Credentials für den SMTP Server falsch.

Du siehst den Fehler nicht, weil er schon in Zeile 15 passiert. Und du überprüfst nur, ob $mail ein Fehler Objekt ist, nicht aber $smtp.


Übrigens wäre der "richtigere" Status-Code bei Erfolg 204
 
  • Gefällt mir
Reaktionen: Narox und RalphS
Danke. Gibt es eine Mechanik wie ich genrell solche Fehler abfangen kann? Also wie bei C# ein try-catch
 
Den smtp error wird aber mit try catch auch nicht abgefangen.

try-catch kann ich zwar über das gesamte PHP file machen, aber für PHP pear benötige ich vermutlich was anderes, was ich bisher noch nicht gefunden hab.

Folgendes bisher versucht, aber den Fehler konnte ich immer noch nicht abfangen:
PHP:
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password, 'debug' => true));
if (PEAR::isError($smtp)) {
    http_response_code(902);
    exit();
}

$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
    echo $mail->getMessage();
    http_response_code(903);
    exit();
}

if (PEAR_Error::getMessage() !== "")
{
    echo PEAR_Error::getMessage();
    http_response_code(904);
    exit();
}
 
Zuletzt bearbeitet von einem Moderator:
Leider keine Änderung, wobei der http_response_code ja generell funktioniert, auch bei anderen Funktionen. Das Problem ist das Abfangen des smtp Fehlers
 
Habs hinbekommen indem ich die echo Ausgaben gelöscht habe. Danke
 
Narox schrieb:
Habs hinbekommen indem ich die echo Ausgaben gelöscht habe. Danke
Na logisch ... Der Header muss vor der ersten Ausgabe geschickt werden. Wenn vorher Text ausgegeben wird, kommt der 200er natürlich automatisch.
 
Zurück
Oben