Ankündigung

Einklappen
Keine Ankündigung bisher.

Email aus Formular kontrollieren will nicht so recht...

Einklappen

Neue Werbung 2019

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

  • Email aus Formular kontrollieren will nicht so recht...

    Hier mein Code:
    Code:
    <?php
    include 'Empfaenger.php';
    
    if($_REQUEST['Send'])
    {
    	if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) && ereg("^[a-zA-Z]{1,}[-_a-zA-Z0-9]{0,}\.{0,1}[-_a-zA-Z0-9]{0,}@{1}[-a-zA-Z0-9]{2,}\.{1}[a-zA-Z]{2,4}$", $_REQUEST['Email']) || empty($_REQUEST['Nachricht']) )
    	{
    		echo"Bitte f�llen Sie alle Felder richtig aus!
    ";
                     echo 'Fenster schlie�en';
    	}
    	else
    	{
    		$Mailbetreff = "Kundenemail: ";
    		$Mailbetreff .= $_REQUEST['Betreff'];
    
    		$Trenner = md5(uniqid(time()));
    
    		$Header = "Von: ".$_REQUEST['Email'];
    		$Header .= "\n";
    		$Header .= "MIME-Version: 1.0";
    		$Header .= "\n";
    		$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
    		$Header .= "\n\n";
    		$Header .= "This is a multi-part message in MIME format";
    		$Header .= "\n";
    		$Header .= "--$Trenner";
    		$Header .= "\n";
    		$Header .= "Content-Type: text/plain";
    		$Header .= "\n";
    		$Header .= "Content-Transfer-Encoding: 8bit";
    		$Header .= "\n\n";
    		$Header .= "Sie haben folgende Nachricht erhalten: \n\n";
                     $Header .= "Sender IP: $_SERVER[REMOTE_ADDR]\n\n";
                    while(list($Formularfeld, $Wert)=each($_REQUEST))
    		{
    			if($Formularfeld!="Send" && $Formularfeld!="Anhang")
    			{
    			   $Header .= $Formularfeld.": ".$Wert."\n";
    			}
                     }
    
    		$Header .= "\nDatum/Zeit: ";
    		$Header .= date("d.m.Y H:i:s");
    		$Header .= "\n";
                     if (is_uploaded_file($Anhang))
                     {
                     $Header .= "--$Trenner";
    		$Header .= "\n";
                     $Header .= "Content-Type: ";
    		$Header .= $_FILES['Anhang']['type'];
    		$Header .= "; name=";
    		$Header .= $_FILES['Anhang']['name'];
    		$Header .= "\n";
    		$Header .= "Content-Transfer-Encoding: base64";
    		$Header .= "\n";
    		$Header .= "Content-Disposition: attachment; filename=";
    		$Header .= $_FILES['Anhang']['name'];
    		$Header .= "\n\n";
    		$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
    		$Header .= chunk_split(base64_encode($Dateiinhalt));
    		$Header .= "\n";
    		$Header .= "--$Trenner--";
                     echo "Ihre Datei ".$Anhang."hat die Gr��e ".$Anhang_size." und wurde erfolgreich verschickt.";
                     }
    		mail($Empfaenger, $Mailbetreff, "", $Header);
                     echo "Vielen Dank f�r Ihre eMail! 
    Wir werden Sie in K�rze kontaktieren!
    ";
                     echo 'Fenster schlie�en';
               }
    
    }
    ?>
    Das Problem ist: Formular an sich funktioniert prima, gibt man eine falsche email im Formular an, wird diese mit ereg jedoch nicht richtig gepr�ft.
    Au�erdem wird die Standardemail des Servers als Versandadresse eingesetzt, egal ob man ein File mitschickt oder nicht.

    Vermutung daher, dass hier die Servermail gepr�ft wird, die nat�rlich die richtige Syntax hat.
    Kann ich das irgendwie umgehen? Eigentlich sollte er ja die email aus dem Formular pr�fen oder habe ich einen Denkfehler drin?

    MFG
    shapeshifta

  • #2
    Deine IF Bedinung ist Falsch.

    empty($_REQUEST['Email']) && ereg(...)

    Diese gibt nur true zurück, wenn die E-Mail Variable leer ist. Wenn sie gesetzt ist, gibt zwar eventuell das ereg(...) true zurück, aber empty(...) ist dann false.
    Dadurch ist dein if bei eingebener E-Mail, egal ob gültig oder nicht, immer false und er springt zum else.

    Tip: Strukturiere die IF Bedingung neu und benutze Klammern, denn das && hat eine höhere Priorität wie ||. Das heißt: (x=y || x=y && x=y) ist gleichbedeutend mit (x=y || (x=y && x=y)). Du willst glaube ich eher ( (x=y || x=y) ) && x=y)

    Beim falschen Absender tippe ich mal auf einen Fehler in deiner Header Definition.

    "Von: ".$_REQUEST['Email']; vielleicht "FROM: ".$_REQUEST['Email']; ?

    Kommentar


    • #3
      ich habs jetzt in
      if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || !ereg("^[a-zA-Z]{1,}[-_a-zA-Z0-9]{0,}\.{0,1}[-_a-zA-Z0-9]{0,}@{1}[-a-zA-Z0-9]{2,}\.{1}[a-zA-Z]{2,4}$", $_REQUEST['Email']) || empty($_REQUEST['Nachricht']) )
      geändert. Läuft!
      Mit dem Absender hab ich mich wohl missverständlich geäußert, wenn man eine falsche mail angibt, dann kommt die Standardmail, aber das wird ja nun verhindert!
      Vielen Dank für das Augenöffnen.
      :wink:

      Noch ne Idee, wie man die Sicherheit verbessern kann?

      Kommentar


      • #4
        Zitat von shapeshifta
        Noch ne Idee, wie man die Sicherheit verbessern kann?
        Deine Überprüfung ist, sorry, völliger Quatsch. Lese


        15.11. Wie kann ich feststellen, ob eine Mailadresse äußerlich gültig ist?
        http://www.php-faq.de/q/q-mail-adresse-gueltig.html

        und beachte die Folgelinks.

        Gruß
        phpfan

        Kommentar


        • #5
          Wieso quatsch? Ich prüfe doch nur das Formular auf Eingaben und dabei die mail auf richtige Syntax. Gut, laut Deinem Artikel da ist das überholt, aber bei den "älteren Adressen" funktioniert sie ohne Probleme und wird auch auf vielen Seiten im Netz so angegeben...

          Kommentar


          • #6
            Probiere Domains bzw. eMail-Adressen mit Umlauten und was ist mit .museum?

            Gruß
            phpfan

            Kommentar


            • #7
              ich sagte bereits, dass sie vielleicht überholt ist, aber sie deswegen als Quatsch zu bezeichnen...

              Kommentar


              • #8
                Es ist Quatsch, wenn du gültige E-Mail-Adressen nicht akzeptierst und das ist bei dir ja der Fall!
                Lieber ein paar falsche E-Mails zuviel als eine richtige zuwenig! Und wenn jemand seine E-Mail nicht preisgeben will, dann gibt er eben eine syntaktisch richtige E-Mail-Adresse an.

                Kommentar

                Lädt...
                X