Linuchs: Formular an fremden Server schicken

Hoppla,

ein Kunden-Server scheint trotz Erfolsmeldung der mail() Funktion die Mail nicht weiterzuleiten.

Deshalb habe ich das Formular, das auf dem Kunden-Server ausgefüllt wird, testweise zu meinen Server umgeleitet

 <form action="http://meins.de/send-reservation.php" method="post">

Doch danach erscheint wieder die Kundenseite, obwohl in der send-reservation.php gar keine Display-Ausgabe erfolgt.

Ist das sowas wie bei Ajax - fremder Server verboten?

Linuchs

  1. das auf dem Kunden-Server ausgefüllt wird,

    vom Kunden-Server kommt und in meinem Browser ausgefüllt wird. Der sollte das dann an meinen Server schicken.

  2. Tach!

    ein Kunden-Server scheint trotz Erfolsmeldung der mail() Funktion die Mail nicht weiterzuleiten.

    Diese Erfolgsmeldung besagt nur, dass der lokale MTA die Mail angenommen hat. Ob der sie weiterleiten konnte, oder ob sie gar am Ziel angekommen ist, ist nicht mehr Bestandteil der Erfolgsmeldung von mail(). Das kann auch nicht wirklich gehen, denn das Ausliefern kann sich ja beliebig (bis zu mehrere Tage) verzögern, und solange soll kein Script laufen.

    Deshalb habe ich das Formular, das auf dem Kunden-Server ausgefüllt wird, testweise zu meinen Server umgeleitet Doch danach erscheint wieder die Kundenseite, obwohl in der send-reservation.php gar keine Display-Ausgabe erfolgt.

    Vielleicht ein Caching-Problem. Historie löschen, Browser neustarten und nochmal probieren. Oder man im Chrome die Entwickler-Tools öffnen (und offen halten), auf die Netzwerkseite gehen und das Häkchen setzen, das Cachen zu verbieten. Das wirkt dann für den Tab, für den man die Entwicklertools geöffnet hat.

    Ansonsten helfen die Entwickler-Tools - insbesondere die Netzwerk-Seite - genau zu verfolgen, was da in Hintergrund abläuft.

    Ist das sowas wie bei Ajax - fremder Server verboten?

    Nein, das ergäbe sicherheitstechnisch keinen Sinn. Bei Javascript geht es darum, das Nachladen von in der Regel von ungewünschtem Code im Browser zu verhindern. In dem Fall hat man im Browser bereits eine Seite am Laufen, die nicht negativ beeinflusst werden soll. Bei Formularen müsste man ja den Server schützen wollen, und das geht auf diese Weise gar nicht. Der Server beantwortet einen Request und danach läuft zu diesem Request auf dem Server nichts mehr. Ein neuer Request ist ein neues Spiel. Ob der Request verboten sein soll oder nicht, muss man zum Beispiel mit Session-Mechanismen feststellen, und Zugriffe außerhalb einer gültigen Session mit einer Fehlerseite beantworten. Aber man kann es nicht verhindern, im schlimmsten Fall aus allen Richtungen mit Requests bombardiert zu werden.

    dedlfix.

  3. Moin,

    ein Kunden-Server scheint trotz Erfolsmeldung der mail() Funktion die Mail nicht weiterzuleiten.

    dazu hat dedlfix ja schon etwas gesagt. Die Rückmeldung von mail() ist - auf die traditionelle gelbe Post übertragen - nur eine Bestätigung, dass du den Brief in den gelben Kasten geworfen hast. Was das für die Zustellung bedeutet, wissen wir ja: Schätzungen zufolge gehen 5..10% der Briefsendungen auf dem Postweg verloren, ein großer Teil kommt nach einer mehr als zehntägigen Odyssee durch die Republik erst beim Kunden an, und immer häufiger schlagen sie irgendwann wieder beim Absender auf mit dem Vermerk "Empfänger unbekannt", obwohl die Adresse völlig richtig ist.
    Für e-Mail gilt Entsprechendes, nur dass die Fehlerquote hier deutlich geringer ist.

     <form action="http://meins.de/send-reservation.php" method="post">
    

    Doch danach erscheint wieder die Kundenseite, ...

    Wieder? Wird denn zwischendurch (also beim Absenden) etwas anderes angezeigt?

    obwohl in der send-reservation.php gar keine Display-Ausgabe erfolgt.

    Was sendet denn send-reservation.php überhaupt als Antwort? Einfach "nichts" kann nicht sein; selbst wenn das PHP-Script keine Ausgaben macht, kümmert sich der Webserver wenigstens darum, dass eine korrekte HTTP-Antwort mit dem Status 200/OK und Nutzdatenlänge 0 kommt. Da würde ich erwarten, dass der absendende Browser dann eine leere Seite anzeigt; ich könnte mir aber auch vorstellen, dass er in diesem Fall die zuvor angezeigte Seite einfach stehenlässt, weil er keine neuen Inhalte zum Anzeigen hat.

    Ist das sowas wie bei Ajax - fremder Server verboten?

    Nein. Das ist erlaubt und völlig in Ordnung.

    So long,
     Martin

    PS: Bitte benutze für Beispiele die dafür vorgesehenen Domainnamen wie etwa example.net, example.com oder *.example anstatt erfundener, aber real existierender Domainnamen. Ich glaube nicht, dass die Telekom über den Gebrauch einer ihrer Domainnamen so begeistert ist.

    1. PS: Bitte benutze für Beispiele die dafür vorgesehenen Domainnamen wie etwa example.net, example.com oder *.example anstatt erfundener, aber real existierender Domainnamen.

      Hier geht es um den Unterschied meine Seite - deine Seite. Die können ja nicht alle example.com heissen.

      1. Tach!

        Hier geht es um den Unterschied meine Seite - deine Seite. Die können ja nicht alle example.com heissen.

        Es gibt da ja noch eine Menge mehr Varianten. Die einfachste ist, Subdomains zu verwenden: meine.example.com, deine.example.com. Zum anderen steht die komplette Top-Level-Domain .example zur Verfügung: meine.example (oder www.meine.example), deine.example.

        dedlfix.

    2. Wieder? Wird denn zwischendurch (also beim Absenden) etwas anderes angezeigt?

      Die send-reservation.php wertet $_POST vom Formular aus und sendet die Mail, setzt die Variable $status_message (mail erfolgreich).

      Bisher wurde sie als include zu Beginn der reservation.php verwendet, da kommt nach dem Mail-Senden also die Seite mit dem Formular wieder.

      Nun habe ich die send-reservation.php auf meinen Server geladen. In reservation.php auf dem Kundenserver habe ich das include rausgenommen.

      Beide Programme beginnen mit der Zeile

      echo "<pre>reservation.php ".date("H:i:s",time())."</pre>\n";
      

      bzw.

      echo "<pre>send-reservation.php ".date("H:i:s",time())."</pre>\n";
      

      Nach dem Absenden des Formulars (Kundenserver) möchte ich also die Zeile sehen

      send-reservation.php 10:55:05
      

      Ich she aber

      reservation.php 10:57:09
      

      und dann das Formular wieder.

      Linuchs

      1. Oh shit ...

        Die php-Dateien kommen vom Kunden und ich habe die Aufgabe übernommen, das Nicht-Senden der Mail zu klären (ist in Ordnung, ist ein Bekannter, für den ich nicht dauernd kostenlos programmieren möchte)

        Die etwas andere Art der Programmierung hat mich was übersehen lassen:

                        <?php } ?>
        //              <form action=" " method="post">
                        <form action="http://example.com/send-reservation.php" method="post">
        

        Nach

        <!--              <form action=" " method="post" -->
        

        meldet sich das erwartete Programm auf meinem Server example.com und sendet die Mail.

        Also bleibt das Problem, warum die auf dem Kundenserver nicht gesendet wird.

        Linuchs

        `

        1. Hi,

          Also bleibt das Problem, warum die auf dem Kundenserver nicht gesendet wird.

          mein Webhoster hat im Zusammenhang mit dem Versand von Mails durch PHP vor einiger Zeit irgendwas umgestellt und mich informiert, dass ich nun über die Konfigurations-Oberfläche (aka "Kundencenter") festlegen müsste, welche Absenderadresse beim Versand von Mails verwendet wird. Andernfalls sei der Versand von Mails nicht mehr möglich (vielleicht haben sie mal Ärger mit Spammern gehabt).

          Könnte das bei dir etwas Ähnliches sein?

          So long,
           Martin

        2. Moin!

          Also bleibt das Problem, warum die auf dem Kundenserver nicht gesendet wird. oder aus verschieden Gründen nicht ankommen.

          Auskünfte geben [womöglich]:

          • error_log: also /var/log/apache2/error.log # oder was für die Webseite konfiguriert wurde.
          • syslog: also /var/log/syslog oder /var/log/messages # je nach System
          • mail.log: also /var/log/[mail/]mail[.log|.err] # je nach System

          Methode: Logfiles mit ssh user@server tail -f LOGFILE betrachten (oder halt Putty verwenden) und Formular absenden.

          Jörg Reinholz

        3. Moin!

          Also bleibt das Problem, warum die auf dem Kundenserver nicht gesendet wird.

          II.

          Sende die Daten mal an https://home.fastix.org/Tests/formularverarbeiter.php

          und vergleiche die Daten, welche da ankommen, mit denen, die das Skript auf dem Kundenserver erwartet.

          Jörg Reinholz

      2. Moin!

        Nach dem Absenden des Formulars (Kundenserver) möchte ich also die Zeile sehen

        send-reservation.php 10:55:05
        

        Ich she aber

        reservation.php 10:57:09
        

        Klingt so, als hättest Du vergessen das Formular neu zu laden.

        Jörg Reinholz

  4. Moin!

     <form action="http://meins.de/send-reservation.php" method="post">
    

    Doch danach erscheint wieder die Kundenseite, obwohl in der send-reservation.php gar keine Display-Ausgabe erfolgt.

    Es ist durchaus möglich, dass "Deine" send-reservation.php zum referer zurückschickt. So lange wir diese nicht sehen können wir über das "WARUM" nichts aussaugen.

    Jörg Reinholz

    1. das Warum hat sich um 11:18 geklärt. Falsches Auskommentieren einer HTML Zeile meinerseits.