Ankündigung

Einklappen
Keine Ankündigung bisher.

Kontaktformular versendet regelmäßig leere Email

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kontaktformular versendet regelmäßig leere Email

    Guten Tag,
    ich bin ein absoluter Laie, was php angeht. Daher bitte ich um Nachsicht. Für die Erstellung einer Webseite benötigte ich auch ein Kontaktformular, welches ich im Netz gefunden hatte und es für meine Bedürfnisse angepasst habe. Es funktioniert auch tadellos bis auf eine Merkwürdigkeit: Es werden regelmäßig Emails ohne Inhalt um 11:06 Uhr versendet. Ich kann mir das nicht erklären!
    Gibt es irgendetwas, was in php so etwas auslöst?

    Hier mein php-skript:
    PHP-Code:
    <?php
    //send_email.php

     
    if($_REQUEST['submit']){
          if(empty(
    $_REQUEST['Name']) || empty($_REQUEST['Email'])
           || empty(
    $_REQUEST['Telefon']))
          {
            echo
    "Bitte gehen Sie <a href="javascript:history.back();">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus"
    ;
          }
          else{
    $email_from "absender@webseite.de";   //Absender falls keiner angegeben wurde
    $sendermail_antwort true;      //E-Mail Adresse des Besuchers als Absender. false= Nein ; true = Ja
    $name_von_emailfeld "Email";   //Feld in der die Absenderadresse steht

    $empfaenger "mail@empfaenger.de"//Empfänger-Adresse

    $betreff "Kontakt"//Betreff der Email

    $url_ok "https://www.webseite.de/Danke.html"//Zielseite, wenn E-Mail erfolgreich versendet wurde
    $url_fehler "http://www.webseite.de/fehler.php"//Zielseite, wenn E-Mail nicht gesendet werden konnte


    //Diese Felder werden nicht in der Mail stehen
    $ignore_fields = array('submit');




    //Datum, wann die Mail erstellt wurde
    $name_tag = array("Sonntag""Montag""Dienstag""Mittwoch""Donnerstag""Freitag""Samstag");
    $num_tag date("w");
    $tag $name_tag[$num_tag];
    $jahr date("Y");
    $n date("d");
    $monat date("m");
    $time date("H:i");

    //Erste Zeile unserer Email
    $msg ":: Gesendet am $tag, den $n.$monat.$jahr - $time Uhr ::\n\n";

    //Hier werden alle Eingabefelder abgefragt
    foreach($_POST as $name => $value) {
       if (
    in_array($name$ignore_fields)) {
            continue; 
    //Ignore Felder wird nicht in die Mail eingefügt
       
    }
       
    $msg .= "::: $name :::\n$value\n\n";
    }



    //E-Mail Adresse des Besuchers als Absender
    if ($sendermail_antwort and isset($_POST[$name_von_emailfeld]) and filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL)) {
       
    $email_from $_POST[$name_von_emailfeld];
    }

    $header="From: $email_from";

    if (!empty(
    $mail_cc)) {
       
    $header .= "\n";
       
    $header .= "Cc: $mail_cc";
    }

    //Email als UTF-8 senden
    $header .= "\nContent-type: text/plain; charset=utf-8";

    $mail_senden mail($empfaenger,$betreff,$msg,$header);


    //Weiterleitung, hier konnte jetzt per echo auch Ausgaben stehen

    echo 'Danke';
    if(
    $mail_senden){
      
    header("Location: ".$url_ok); //Mail wurde gesendet
      //header("Location: https://www.webseite.de/Danke.html");

      
    exit();

    } else{
      
    header("Location: ".$url_fehler); //Fehler beim Senden

      
    exit();
    }

        }
        }
         else
        {
          echo
    "Ein Fehler ist aufgetreten. Hier können Sie eine <a href="kontakt.html">Anfrage</a> an uns senden.";
        }


        
    ?>

  • #2
    Zitat von PeterQ Beitrag anzeigen
    Guten Tag,
    ich bin ein absoluter Laie, was php angeht.
    Dann solltest du nicht einfach Code kopieren und verwenden, den du nicht verstehst. Gerade bei Formularen in verbindung mit E-Mail-Versand ist das sehr gefährlich.

    Der Code ist zudem veraltet.

    Beschäftige dich mit dem Thema, verwende eine E-Mail Klasse oder lasse es von jemanden erstellen, der sich der Sicherheitsproblematik bewusst ist.

    Kommentar


    • #3
      Vielen Dank für die Antwort und bitte um Entschuldigung, dass ich nicht sofort reagiert habe. Aber ich habe mir die Antwort von protestix zu Herzen genommen und das Projekt angefangen, den phpMailer zu verwenden.

      Allerdings bin ich dann auf Schwierigkeiten gestoßen, die ich mir nicht vorstellen konnte aber irgendwie geahnt hatte. Das fing damit an, dass ich keinen ssh Zugang zu meinem Projektverzeichnis bekam, bis ich erfuhr, dass ich nur in das Basisverzeichnis mit ssh hereinkomme. Okay, das hatte ich dann mit meinem Provider geklärt.

      Das nächste was ich dann nach Anleitung tun sollte, war composer zu installieren. Dabei erfuhr ich, dass das auch nicht so einfach geht und ich nicht einfach php Befehle eingeben kann, da dabei eine veraltete php-Version benutzt wird. Daher sollte ich immer
      Code:
      /usr/bin/php7.4-cli
      voranstellen. Auch das muss man wissen.
      Jedenfalls habe ich dann Composer installieren können.
      Dann bin ich in das Projektverzeichnis gegangen und habe mit dem Befehl
      Code:
      /usr/bin/php7.4-cli ~/composer.phar require phpmailer/phpmailer
      dann phpMailer installiert.
      Code:
      composer require phpmailer/phpmailer
      hat es nicht gebracht, obwohl es so in der Anleitung stand.

      Ich hoffe dass dies nun eine tragfähige Basis wird, um mein Skript dahingehend anzupassen.

      Ich hoffe dann auch hier im Forum Unterstützung zu finden, wenn ich sie brauche.

      Kommentar


      • #4
        Warum verwendest du nicht composer einfach bei dir lokal am Rechner? Du wirst doch dort auch programmieren und nicht am Server deines Providers?

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          Warum verwendest du nicht composer einfach bei dir lokal am Rechner? Du wirst doch dort auch programmieren und nicht am Server deines Providers?
          Ich bin nur den Anleitungen gefolgt, die ich gefunden habe, und dort wurde immer davon geschrieben, dass ich Composer dort installieren soll, wo ich auch den phpmailer verwende....
          Aber wenn es noch andere Möglichkeiten gibt, und diese sind besser, dann mache ich auch das.

          Kommentar


          • #6
            Wenn ich nun das Beispiel von der github Seite https://github.com/PHPMailer/PHPMailer verwende
            PHP-Code:
              <?php //Import PHPMailer classes into the global namespace //These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception;  //Load Composer's autoloader require 'vendor/autoload.php';  //Instantiation and passing `true` enables exceptions $mail = new PHPMailer(true);  try {     //Server settings     $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output     $mail->isSMTP();                                            //Send using SMTP     $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through     $mail->SMTPAuth   = true;                                   //Enable SMTP authentication     $mail->Username   = 'user@example.com';                     //SMTP username     $mail->Password   = 'secret';                               //SMTP password     $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged     $mail->Port       = 587;                                    //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above      //Recipients     $mail->setFrom('from@example.com', 'Mailer');     $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient     $mail->addAddress('ellen@example.com');               //Name is optional     $mail->addReplyTo('info@example.com', 'Information');     $mail->addCC('cc@example.com');     $mail->addBCC('bcc@example.com');      //Attachments     $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments     $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name      //Content     $mail->isHTML(true);                                  //Set email format to HTML     $mail->Subject = 'Here is the subject';     $mail->Body    = 'This is the HTML message body <b>in bold!</b>';     $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';      $mail->send();     echo 'Message has been sent'; } catch (Exception $e) {     echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }
            dann trage ich dort mein Passwort ein. Ist dieses Passwort von allen (bzw den versierten) dann einsehbar?

            Kommentar


            • #7
              Soweit bin ich gekommen, dass ich meine Formularfelder gesendet bekomme. Leider werden Umlaute und Sonderzeichen nicht korrekt gesendet. Ich hatte einiges ausprobiert, war aber nicht erfolgreich. Vielleicht kann hier jemand einen Tipp geben?

              Jetzt sieht mein Skript so aus:
              PHP-Code:
              <?php
              use PHPMailer\PHPMailer\PHPMailer;
              use 
              PHPMailer\PHPMailer\SMTP;
              use 
              PHPMailer\PHPMailer\Exception;
              $name=$_POST['name'];
              $message=$_POST['message'];
              $email=$_POST['email'];
              $betreff=$_POST['betreff'];
              //Load Composer's autoloader
              require 'vendor/autoload.php';

              if(isset(
              $_POST["submit"]))
              {


                  
              $mail = new PHPMailer;
                  
              $mail->IsSMTP();        //Sets Mailer to send message using SMTP
                  
              $mail->Host 'smtp.xyz.de';  //Sets the SMTP hosts
                  
              $mail->Port 587;        //Sets the default SMTP server port
                  
              $mail->SMTPAuth true;       //Sets SMTP authentication. Utilizes the Username and Password variables
                  
              $mail->Username 'mail@beispiel.de';     //Sets SMTP username
                  
              $mail->Password 'Passwort';     //Sets SMTP password
                  
              $mail->SMTPSecure PHPMailer::ENCRYPTION_STARTTLS;       //Sets connection prefix. Options are "", "ssl" or "tls"
                  
              $mail->From $_POST["email"];     //Sets the From email address for the message
                  
              $mail->FromName $_POST["name"];    //Sets the From name of the message
                  
              $mail->AddAddress('mail@empfaenger.de''Name');//Adds a "To" address
                  //$mail->AddCC($_POST["email"], $_POST["name"]); //Adds a "Cc" address
                  
              $mail->WordWrap 50;       //Sets word wrapping on the body of the message to a given number of characters
                  
              $mail->IsHTML(true);       //Sets message type to HTML
                  
              $mail->Subject "test"//$_POST["subject"];    //Sets the Subject of the message
                  
              $mail->Body "Hallo".$name.",<br>".$email.",<br>".$betreff.",<br>".$message;    //An HTML or plain text message body



                
              if($mail->Send())        //Send an Email. Return true on success or false on error
                
              {
                    echo 
              "<span style='color: green'>E-Mail erfolgreich verschickt!</span>";
                }
                else
                {
                    echo 
              "<span style='color: red'>Error!</span>{$mail->ErrorInfo}";
                }
              }

              ?>

              Kommentar


              • #8
                PHP-Code:
                $mail->CharSet 'UTF-8'
                Vor dem Senden einfügen. Das Script muss auch als UTF-8 ohne BOM abgespeichert sein. Näheres dazu unter https://php-de.github.io/jumpto/utf-8/

                Kommentar


                • #9
                  Super und vielen Dank.

                  Ich habe da noch eine kleine Bitte: wenn die Email erfolgreich versandt wurde, kommt ja das Echo "E-Mail erfolgreich verschickt!". Ich möchte gerne da auf eine neue Seite kommen. Wie binde die ich am besten ein?

                  Kommentar


                  • #10
                    Weiterleitungen in PHP macht man mit header().

                    Kommentar


                    • #11
                      Zitat von PeterQ Beitrag anzeigen
                      dann trage ich dort mein Passwort ein. Ist dieses Passwort von allen (bzw den versierten) dann einsehbar?
                      Nein, wenn der Webserver nicht falsch konfiguriert ist nicht.

                      sorry, shift-taste kaputt

                      Kommentar


                      • #12
                        Nochmals vielen Dank. Dann warte ich ab, ob die leeren Emails nun ausbleiben.

                        Kommentar


                        • #13
                          Jetzt noch eine Rückmeldung. Die leeren Emails bleiben aus! Danke für die Hilfe.
                          Damit ich diesen Thread als gelöst markieren kann, möchte ich noch wissen, ob jemand eine Erklärung hat, warum dieses alte Skript ohne weiteres diese leeren Emails verschickt.

                          Kommentar


                          • #14
                            Über die Ursache kann man nur spekulieren.
                            Eine Möglichkeit ist, das Bots versuchen dein Skript als Spamschleuder zu nutzen. $_REQUEST wertet ja auch neben $_POST auch $_GET mit aus. Das ist wie eine Einladung dies zu versuchen.
                            Trotz Verwendung des PHPMailers würde ich empfehlen alles was vom Client kommt zu prüfen bevor du es dem PHPMailer übergibst.
                            Ebenso gibt es zahlreiche Ansätze zur Bot- und Spamabwehr ohne gleich deine Nutzer mit Captchas zu nerven. Dafür mal ein wenig die Suche hier im Forum bemühen.

                            Kommentar


                            • #15
                              OK, danke, muss ich mir mal anschauen.
                              Wie kann ich diesen Thread als erledigt markieren?

                              Kommentar

                              Lädt...
                              X