Jenny (angemeldet als Mondfrau): php Mailer

problematische Seite

Hallo ihr Lieben,

ich brauch dringend eure Hilfe wegen meines php-Mailers.

Seit Jahren hat der immer gut funktioniert, nun aber bekommen Leute, die mir eine Nachricht senden, einen Fehler angezeigt: Die Nachricht konnte nicht gesendet werden, statt einer Seite, auf der ich mich für die Nachricht bedanke. Die Nachricht von den Leuten bekomme ich allerdings doch.

Ich habe mehrere Seiten mit Mailers drauf, keiner funktioniert mehr richtig. Es wird nach dem Absenden einer Nachricht immer eine leere Seite mit einer Fehlermeldung angezeigt.

Kann mir bitte jemand helfen und mir sagen, was falsch ist? Ich wäre euch sehr dankbar dafür.

Herzliche Grüße Jenny

  1. problematische Seite

    Hallo Jenny,

    tut mir leid, die leere Seite versteckt keine Fehlermeldungen. Das Problem verlässt deinen Server nicht.

    Du müsstest in PHP das Error-Reporting aufdrehen - mit error_reporting(E_ALL) - und dann mal gucken was kommt.

    Rolf

    --
    sumpsi - posui - clusi
    1. problematische Seite

      Hallo Rolf,

      danke für deine Antworten. Hast du keine Fehlermeldung bekommen beim Absenden? Ich hab die Mitteilung von dir erhalten. Hast du meine "Danke-Antwort" erhalten?

      Liebe Grüße Jenny

    2. problematische Seite

      Hallo Rolf,

      ich hab grad nachgeschaut beim Server. Und da fand ich, dass es anscheinend seit Juni eine neue PHP Version 5.5.38-nmm2 gibt. Hat das was damit zu tun?

      Liebe Grüße Jenny

      1. problematische Seite

        Hallo Jenny,

        Und da fand ich, dass es anscheinend seit Juni eine neue PHP Version 5.5.38-nmm2 gibt.

        „Neu“ ist gut: Das ist die älteste noch unterstützte Version.

        Hat das was damit zu tun?

        Wenn du uns mal Fehlermeldungen zeigst, können wir diese Frage möglicherweise beantworten.

        Viele Grüße
        Robert

        1. problematische Seite

          Hallo Robert,

          danke für deine Antwort.

          Diese Fehlermeldung erscheint nach dem Absenden: Die Nachricht konnte leider nicht versendet werden! Allerdings kommt die Nachricht bei mir an, nur der Absender erhält statt meiner Danke-Seite diese Fehlermeldung.

          Liebe Grüße Jenny

          P.S. Noch eine Frage: Obwohl ich mich registriert habe, funktioniert hier die Anmeldung nicht. Ich habe auch nach der Registrierung eine mail erhalten und dort die Registrierung sozusagen bestätigt.

          1. problematische Seite

            Hallo Jenny,

            Diese Fehlermeldung erscheint nach dem Absenden: Die Nachricht konnte leider nicht versendet werden!

            Ich meinte eine PHP-Fehlermeldung, aus der hervorgeht, warum keine Nachricht versendet werden kann. Wie sieht denn der relevante Teil deines gdwmailer.php aus?

            Allerdings kommt die Nachricht bei mir an, nur der Absender erhält statt meiner Danke-Seite diese Fehlermeldung.

            Wie kommt denn die Nachricht bei dir an, per Email oder wird sie in einer Datenbank gespeichert?

            Noch was: Statt

            Ist es deine erste Bewerbung oder ein Upgrade?

            wären zwei Radiobuttons mit diesen Optionen intuitiver. Und der Hinweis, dass alle Felder ausgefüllt werden müssen, steht ganz am Anfang sehr klein und wird anschließend nicht mehr geprüft.

            P.S. Noch eine Frage: Obwohl ich mich registriert habe, funktioniert hier die Anmeldung nicht. Ich habe auch nach der Registrierung eine mail erhalten und dort die Registrierung sozusagen bestätigt.

            Was heißt denn „funktioniert nicht“? Ich hab deine Nachricht zusätzlich mit zu diesem Forum getaggt, damit ein Admin darauf aufmerksam wird.

            Viele Grüße
            Robert

            1. problematische Seite

              Hallo Robert,

              so sieht mein php Mailer aus. Die Nachricht kommt bei mir als e-mail an. Wie du siehst, gibt es eine thankyou.html, aber die erscheint eben nicht.

              Liebe Grüße Jenny

              <?php 
              
              // Universaler Formularmailer GDW 2005
              // Die Formulardaten werden mit action="gdwmailer.php" an diese Datei geschickt und ausgewertet
              // In das Formular müssen am Anfang versteckte Formularfelder eingefuegt werden:
              // <input type="hidden" name="subject" value="EVALUATION">
              // <input type="hidden" name="return" value="http://mondfrau.eu/thankyou.html">
              // <input type="hidden" name="empfaenger" value="info@mondfrau.eu">
              
              
              $trennzeichen= ":\t ";
              $mailto=$_POST["empfaenger"];
              $subject=$_POST["subject"];
              if (isset($_POST["Email"]) && !empty($_POST["Email"])){
              $mail=$_POST["Email"];
              }
              else{
              $mail="Dein Formularmailer<Dein Formularmailer>";
              }
              
              $header="From: $mail";
               
              $mailtext="";
              
              while(list($_POST["name"], $value) = each($_POST))
              {
              if ($_POST["name"] !="return" && $_POST["name"] != "subject" && $_POST["name"] != "empfaenger")
              {
              if(is_array($value))
              {
              foreach($value as $value_array)
              {
              $mailtext .= $_POST["name"].$trennzeichen.$value_array."\n";
              }
              }
              else $mailtext.=$_POST["name"].$trennzeichen.$value."\n";
              }
              }
              
              if(get_magic_quotes_gpc()) $mailtext = stripslashes($mailtext);
              
              mail($mailto, $subject, $mailtext, $header) or die ("Die Nachricht konnte leider nicht versendet werden!");
              
              header("Location: $return");
              
              ?>
              
              1. problematische Seite

                Hello,

                
                > $trennzeichen= ":\t ";
                > $mailto=$_POST["empfaenger"];
                > $subject=$_POST["subject"];
                
                

                Oh, jeh! Eine Spamschleuder! :-(

                Hier gehen Post-Parameter direkt in die Mailheader ein. Da kann jeder Gangster Mails an Allewelt schicken.

                Du brauchst einen neuen Mailer.

                Leider habe ich die nächsten drei Tage keine Zeit, das genauer zu beantworten. Ich werde dein Posting aber mal zum Anlass nehmen, einen neuen Artikel fürs Wiki zu verfassen zum Thema Mailer. Und dabei können wir dann deine Fragen auch so genau beleuchten, dass Du verstehen kannst, was passieren kann und was passieren soll.

                Liebe Grüße
                Tom S.

                --
                Es gibt nichts Gutes, außer man tut es!
                Das Leben selbst ist der Sinn.
              2. problematische Seite

                Hi Jenny,

                vorab: Ich empfehle den Mailer schnellstmöglich offline zu nehmen, weil er gravierende Sicherheitslücken enthält, mit denen du deine Seite zur Spamschleuder machst!

                Du kannst übrigens Code auch schön formatieren.

                <?php 
                
                // Universaler Formularmailer GDW 2005
                // Die Formulardaten werden mit action="gdwmailer.php" an diese Datei geschickt und ausgewertet
                // In das Formular müssen am Anfang versteckte Formularfelder eingefuegt werden:
                // <input type="hidden" name="subject" value="EVALUATION">
                // <input type="hidden" name="return" value="http://mondfrau.eu/thankyou.html">
                // <input type="hidden" name="empfaenger" value="info@mondfrau.eu">
                

                Das ist keine gute Idee, denn dein Skript sieht nicht so aus, als würde es prüfen, von wo aus es aufgerufen wird. Das heißt, ich kann eine eigene Seite bauen, die dein Skript mit anderen „hidden“-Parametern aufruft und damit

                • eine Mail an andere Empfänger – empfaenger
                • mit einem anderen Betreff – subject – sendet
                • und anschließend auf eine beliebige Seite – return – weiterleitet.

                Ich empfehle diese konstanten Werte in (d)einer PHP-Datei als Konstante definieren.

                Dazu missachtet dein Skript den Kontextwechsel zwischen HTTP Post und Email, wodurch möglicherweise die mail-Funktion noch weiter exploitet werden kann, zum Beispiel durch mehrere Empfänger oder zusätzliche Header-Felder.

                Hier werden die Werte aus $_POST lediglich umkopiert, aber nicht wie in der Dokumentation der mail-Funktion beschrieben maskiert:

                $mailto=$_POST["empfaenger"];
                $subject=$_POST["subject"];
                if (isset($_POST["Email"]) && !empty($_POST["Email"])){
                $mail=$_POST["Email"];
                }
                else{
                $mail="Dein Formularmailer<Dein Formularmailer>";
                }
                

                Mit $_POST['Email'] = "Dein Formularmailer\r\nReply-To: evil@example.org" ist schon gleich ein zusätzlicher Header eingefügt worden:

                $header="From: $mail";
                // …
                

                An dieser Stelle würde ich normalerweise eine Fehlermeldung erwarten:

                mail($mailto, $subject, $mailtext, $header) or die ("Die Nachricht konnte leider nicht versendet werden!");
                

                Du könntest mal das error reporting anpassen und schauen, warum mail false zurückgibt.

                Nach dem die wird das jedenfalls nicht mehr ausgegeben, wobei $return auch nirgends gesetzt worden ist:

                header("Location: $return");
                ?>
                

                Auf das schließende ?> kannst du übrigens verzichten, falls danach nichts mehr kommt.

                Viele Grüße
                Robert

                1. problematische Seite

                  Hallo Robert, hallo Jenny,

                  DAS HIER

                  Du könntest mal das error reporting anpassen und schauen, warum mail false zurückgibt.

                  war mein erster Hinweis. Bisher ist nichts passiert. Jenny, weißt Du, was mit error_reporting(E_ALL) gemeint ist?

                  Auf das schließende ?> kannst du übrigens verzichten, falls danach nichts mehr kommt.

                  Das Weglassen von ?> in Dateien, die nur PHP enthalten, ist ein PHP Coding Standard und ist eigentlich keine Option.

                  Rolf

                  --
                  sumpsi - posui - clusi
                  1. problematische Seite

                    Hallo Robert, hallo Rainer,

                    vielen Dank für eure Mühe. Ich fühl mich grad total überfordert.

                    Nein, ich weiß nicht, was mit error_reporting(E_ALL) gemeint ist.

                    Zwar hab ich viel html gelernt, aber nicht php. Den php Mailer hab ich so übernommen und nur eingefügt, was notwendig war. Es hat auch bisher immer gut funktioniert. Ich hab den php Mailer auf vielen meiner Seiten und nirgends funktioniert er mehr.

                    Sollte ich einen anderen php Mailer nehmen? Und welchen? Und könnt ihr mir bitte dabei helfen?

                    Ich wäre so froh.

                    Vielen Dank und liebe Grüße

                    Jenny

                    1. Hallo Jenny,

                      Nein, ich weiß nicht, was mit error_reporting(E_ALL) gemeint ist.

                      Das steht in Rolfs Post und meinem Hinweis.

                      Zwar hab ich viel html gelernt, aber nicht php.

                      Zumindest die Basics der verwendeten Software zu verstehen ist nicht verkehrt und PHP ist auch nicht so schwierig ;)

                      Den php Mailer hab ich so übernommen und nur eingefügt, was notwendig war.

                      Das ist aber nicht zufällig ein alter, einfacher Formmailer? Du könntest mal den „Advanced“ testen – aber mit festgelegten Werten.

                      Viele Grüße
                      Robert

                      1. Hallo Robert,

                        danke für die Antwort. Leider weiß ich nicht, wo ich error_reporting(E_ALL) finde.

                        Ich glaub, ich geb es auf und lösche den php Mailer auf allen Seiten. Hab Verständnis für meine geringen Kenntnisse, denn ich bin 79 Jahre alt und nicht mehr so fit in diesen Dingen.

                        Danke an alle und liebe Grüße Jenny

                        1. Hallo Jenny,

                          das kannst Du nicht finden - das musst Du einbauen.

                          Die Normaleinstellung für ein produktives PHP ist, dass Fehlermeldungen nicht angezeigt werden. Grund dafür ist, dass diese Meldungen Dinge über dein Projekt verraten könnten, die ein Hacker nutzen kann.

                          Zum Einschalten fügst Du vorne eine Zeile ein, vor $trennzeichen= ":\t ";, so dass es so aussieht:

                          <?php 
                          
                          // Universaler Formularmailer GDW 2005
                          // Die Formulardaten werden mit action="gdwmailer.php" an diese Datei geschickt und ausgewertet
                          // In das Formular müssen am Anfang versteckte Formularfelder eingefuegt werden:
                          // <input type="hidden" name="subject" value="EVALUATION">
                          // <input type="hidden" name="return" value="http://mondfrau.eu/thankyou.html">
                          // <input type="hidden" name="empfaenger" value="info@mondfrau.eu">
                          
                          error_reporting(E_ALL);
                          $trennzeichen= ":\t ";
                          $mailto=$_POST["empfaenger"];
                          $subject=$_POST["subject"];
                          

                          Damit können wir vielleicht herausfinden, was am aktuellen Mailer kaputt geht. Die generellen Einwände gegen diesen Mailer bleiben allerdings bestehen, er ist eigentlich ungeeignet für einen produktiven Einsatz.

                          Rolf

                          --
                          sumpsi - posui - clusi
                          1. Lieber Rolf,

                            Damit können wir vielleicht herausfinden, was am aktuellen Mailer kaputt geht.

                            wir sollten lieber herausfinden, was Jenny tatsächlich mit dem Mailer erreichen möchte, um ihr zu einer besseren Lösung zu raten, anstatt nur drauf zu hauen, dass der gegenwärtige gefährlich sei.

                            Liebe Grüße,

                            Felix Riesterer.

              3. Habe zwar hier seit Jahren nichts mehr geschrieben und ich kann hier auch nicht mehr viel beitragen, aber das muss dann doch noch mal sein: Das Script habe ich verbrochen (hier eine frühe Variante in einem SELFHTML-Artikel, ich habe in meinem Archiv noch eine aktuellere, die der von Jenny genutzten Variante noch ähnlicher ist). Aber zu meiner Verteidigung muss ich sagen, dass das eine modifizierte Variante ist — das mit dem frei definierbaren Empfänger wurde von irgendjemandem hinzugefügt. Ich bin erstaunt, dass das Script immer noch im Netz rumgeistert.

                Grüße
                Patrick

                1. Hallo Patrick,

                  Habe zwar hier seit Jahren nichts mehr geschrieben und ich kann hier auch nicht mehr viel beitragen, aber das muss dann doch noch mal sein: Das Script habe ich verbrochen […]

                  Was heißt denn verbrochen? Die von Jenny verwendete Version ist eine Verschlimmbesserung deines Skripts – und dein Skript ist in der gefundenen Form zwar nicht optimal, aber eigentlich immer noch funktionsfähig.

                  Viele Grüße
                  Robert

          2. problematische Seite

            Hallo Jenny (angemeldet als Mondfrau),

            Noch eine Frage: Obwohl ich mich registriert habe, funktioniert hier die Anmeldung nicht. Ich habe auch nach der Registrierung eine mail erhalten und dort die Registrierung sozusagen bestätigt.

            Es gibt keinen Benutzer Mondfrau. Du solltest die Registrierung einfach noch mal durchführen.

            Bis demnächst
            Matthias

            --
            Rosen sind rot.
            1. problematische Seite

              Hallo Matthias,

              ich kann die Registrierung nicht nochmal durchführen. Denn sowohl mein Name (Mondfrau) als auch meine e-mail Adresse existieren bereits, erhalte ich als Antwort.

              Nach meiner Registrierung habe ich von SELFHTM-Wiki diese Info erhalten und den Link angeklickt:

              Hallo,

              jemand mit der IP-Adresse 86.56.200.15, wahrscheinlich Sie selbst, hat das Benutzerkonto „Mondfrau“ bei SELFHTML-Wiki registriert.

              Um die E-Mail-Funktionen von SELFHTML-Wiki (wieder) zu aktivieren und um zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:

              http://wiki.selfhtml.org/wiki/Special:ConfirmEmail/7c7d8fed6b476f765ac922e157433476

              Liebe Grüße Jenny

              1. problematische Seite

                Hallo Jenny,

                Wiki-Accounts und Forum-Accounts sind zwei verschiedene Paar Schuhe, für das Forum kannst du dich hier registrieren: https://forum.selfhtml.org/users/sign_up

                Gruß
                Julius

  2. problematische Seite

    Hallo Jenny,

    ich brauch dringend eure Hilfe wegen meines php-Mailers.

    welchen denn?

    Seit Jahren hat der immer gut funktioniert, nun aber bekommen Leute, die mir eine Nachricht senden, einen Fehler angezeigt: […]

    Ist da eventuell eine neue PHP-Version auf dem Server installiert (worden)?

    Viele Grüße
    Robert

  3. problematische Seite

    Liebe Jenny,

    Du solltest umgehend mit Deinem Support Kontakt aufnehmen. Es ist möglich, dass man aus Sicherheitsgründen (Stichwort SPAM-Schleuder) dieses Script irgendwie unschädlich machen wollte und deshalb etwas eingestellt hat, was Dein Script offensichtlich nicht verträgt. Außerdem kann Dir Dein Support auch etwas zu den von PHP generierten Fehlermeldungen sagen, die der Webserver in eine Logdatei schreibt, wenn Du an diese Infos nicht selbst dran kommst.

    Hier kann man Dir nur dringendst ans Herz legen, dass Du diesen Mailer umgehend entsorgst! Das Argument "hat bisher immer tadellos getan" ist gerade in diesem Fall eine zweischneidige Sache: Die Spammer fanden das auch. Aber im Zweifelsfall haftest Du für den von Deinem Mailer versandten Spam...

    Liebe Grüße,

    Felix Riesterer.