kostenloser Webspace werbefrei: lima-city


PHP-Kontaktformular: E-Mails werden doppelt verschickt

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t*******s

    Hallo miteinander,

    ich habe ein PHP-Kontaktformular (http://www.michatronic.de/scripts/script-mt-kontaktformular-Script-V.3.0-PHP.html) auf meiner Seite eingebaut, das soweit auch funktioniert.
    Ich habe nur folgendes Problem: Eine Nachricht wird sowohl an die Absender- als auch die Empfänger-Adresse doppelt verschickt. Soll heißen, die selbe Nachricht taucht zwei Mal in meinem Postfach auf (und zwei Mal beim Absender). Ich habe bereits verschiedene E-Mail Adressen ausprobiert, selbe Phänomen. Auch mit einem anderen PHP-Kontaktformular habe ich dieses Ergebnis.

    Eine Anfrage an den Betreiber des Scripts ergab, dass es wahrscheinlich am Exchange-Server meines Webhosters liegen würde. Daher nun diese Frage an euch. Ich hoffe Ihr könnt mir weiterhelfen!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ohne Quellcode wirds schwer. Schickst du die Mail über die mail()-Funktion oder über SMTP?
  4. Ich würd mal sagen das ist gewollt.
    Im quelltext steht folgendes:

    if (mail($recipient,$betreff,$msg,$mailheaders)) {
    mail($email, $dsubject, $dmsg, $dmailheaders);


    Mach daraus einfach:

    mail($recipient,$betreff,$msg,$mailheaders);


    (kontakt.php, Zeile:307)

    Beitrag zuletzt geändert: 6.12.2009 22:35:22 von crackcheck
  5. Autor dieses Themas

    t*******s

    Danke für die superschnellen Antworten, damit habe ich nun nicht gerechnet :thumb:

    Leider habe ich keine Ahnung von PHP. Die Datei, die Probleme macht, kann eigentlich nur folgende sein: http://www.traumalos.lima-city.de/kontakt/kontakt.php (wie crackcheck erkannt hat). Allerdings hat sein Vorschlag

    crackcheck schrieb: Ich würd mal sagen das ist gewollt.
    Im quelltext steht folgendes:

    if (mail($recipient,$betreff,$msg,$mailheaders)) {
    mail($email, $dsubject, $dmsg, $dmailheaders);


    Mach daraus einfach:

    mail($recipient,$betreff,$msg,$mailheaders);


    (kontakt.php, Zeile:307)


    dazu geführt, dass der Absender keine Bestätigungsmail mehr erhält. Allerdings habe ich die Anfrage auch nicht mehr doppelt erhalten. Schon sehr interessant, ich werde noch etwas mit der Datei rumspielen...
  6. Vielleicht kannst du mal etwas mehr um den betroffenen Code posten.
    Ein paar Zeilen vorher und ein paar mehr Zeilen nachher.
  7. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.


    if (mail($recipient,$betreff,$msg,$mailheaders)) {
    mail($email, $dsubject, $dmsg, $dmailheaders);



    Nich nötig: Hier wirds zuerst versendet und wenn die Funktion true zurück liefert, wirds nochmals versendet.
  8. Autor dieses Themas

    t*******s

    Ja, zwei Mails sollen ja auch versendet werden. Eine Bestätigungsmail an den Absender und eben die an den Empfänger (mich). Wenn ich die zweite Zeile aus

    if (mail($recipient,$betreff,$msg,$mailheaders)) {
    mail($email, $dsubject, $dmsg, $dmailheaders);


    lösche erhält der Absender keine Bestätigunsmail mehr. Der Code um die Stelle herum lautet (etwas ausführlicher):

    // wenn kein Fehler, wird eine E-Mail versendet
       if (!isset($fehler))
       {
    
    // Kopf der E-Mail
       $recipient = ""; // Bitte tragen Sie hier Ihre E-Mail Adresse ein. (zwischen den Anführungszeichen)
       $betreff = "".$_POST["betreff"]."";
       $mailheaders = "From: \"".stripslashes($_POST["name"])."\" <".$_POST["email"].">\n";
       $mailheaders .= "Reply-To: <".$_POST["email"].">\n";
       $mailheaders .= "X-Mailer: PHP/" . phpversion() . "\n";
    
    // Darstellung der E-Mail
       $msg  = "Folgendes wurde am ". $date ." Uhr per Formular geschickt:\n" . "-------------------------------------------------------------------------\n\n";
       $msg .= "Name: " . $name . "\n";
       $msg .= "E-Mail: " . $email . "\n";
       $msg .= "Homepage: " . $homepage . "\n";
       $msg .= "Herkunft: " . $herkunft . "\n";
       $msg .= "\nBetreff: " . $betreff . "\n";
       $msg .= "Nachricht:\n" . $_POST['nachricht'] = preg_replace("/\r\r|\r\n|\n\r|\n\n/","\n",$_POST['nachricht']) . "\n";
       "-------------------------------------------------------------------------\n\n";
     if (count($uploadedFiles) > 0) {
    	   if ($cfg['UPLOAD_ACTIVE']) {
           	   $msg .= 'Es wurden folgende Dateien hochgeladen:'."\n";
    	       foreach ($uploadedFiles as $file) {
    	           $msg .= ' - '.$cfg['DOWNLOAD_URL'].'/'.$cfg['UPLOAD_FOLDER'].'/'.$file."\n";
    	       }
    	   } else {
    		   $msg .= 'Es wurden folgende Dateien als Attachment angehängt:'."\n";
    		   foreach ($uploadedFiles as $file) {
    	           $msg .= ' - '.$file."\n";
    	       }
    	   }
       }
       $msg .= "\n\nIP Adresse: " . $ip . "\n";
       $msg .= "Host: " . $host . "\n";
       $msg .= "Browser und Betriebssystem: " . $UserAgent . "\n";
       
    	// Zusammenstellen der Email-Attachments
    	// Wird nur benötigt, wenn kein Upload erwünscht ist
    	if (!$cfg['UPLOAD_ACTIVE'] && count($uploadedFiles) > 0) {
    		$attachments = array();
    		for ($i = 0; $i < $cfg['NUM_ATTACHMENT_FIELDS']; $i++) {
    		   	if ($_FILES['f']['name'][$i] == UPLOAD_ERR_NO_FILE) {
    				continue;
    			}
    			$attachments[] = $_FILES['f']['tmp_name'][$i];
    		}
    		$boundary = md5(uniqid(rand(), true));
    		$mailheaders .= "MIME-Version: 1.0\n";
    		$mailheaders .= "Content-Transfer-Encoding: 8bit\n";
    		$mailheaders .= "Content-Type: multipart/mixed;\n\tboundary=\"".$boundary."\"\n";
    		$mailheaders .= "\n--".$boundary."\n";
    		$mailheaders .= "Content-Type: text/plain;\n\tcharset=\"iso-8859-1\"\n";
    		$mailheaders .= "Content-Transfer-Encoding: 8bit\n";
    		for ($i = 0; $i < count($uploadedFiles); $i++) {
    			$file = fopen($attachments[$i],"r");
    			$content = fread($file,filesize($attachments[$i]));
    			fclose($file);
    			$encodedfile = chunk_split(base64_encode($content));
    			$msg .= "\n\n--".$boundary."\n";
    			$msg .= "Content-Type: application/octet-stream;\n\tname=\"".$uploadedFiles[$i]."\"\n";
    			$msg .= "Content-Transfer-Encoding: base64\n";
    			$msg .= "Content-Disposition: attachment;\n\tfilename=\"".$uploadedFiles[$i]."\"\n\n";
    			$msg .= $encodedfile."\n\n";
    		}
    		$msg .= "\n\n--".$boundary."--";
    	}
    
    
       $msg = strip_tags ($msg);
    
       // Dankes E-Mail
       $dsubject = "Ihre Anfrage"; // Betreff der Nachricht
       $dmailheaders = "From: <".$recipient.">\n";
       $dmailheaders .= "Reply-To: <".$recipient.">\n";
       $dmsg  = "Vielen Dank für Ihre E-Mail. Wir werden schnellstmöglich darauf antworten.\n\n";
       $dmsg .= "Zusammenfassung: \n" .
      "-------------------------------------------------------------------------\n\n";
       $dmsg .= "Name: " . $name . "\n";
       $dmsg .= "E-Mail: " . $email . "\n";
       $dmsg .= "Homepage: " . $homepage . "\n";
       $dmsg .= "Herkunft: " . $herkunft . "\n";
       $dmsg .= "\nBetreff: " . $betreff . "\n";
       $dmsg .= "Nachricht:\n" . $_POST['nachricht'] = preg_replace("/\r\r|\r\n|\n\r|\n\n/","\n",$_POST['nachricht']) . "\n";
       
       if (count($uploadedFiles) > 0) {
           $dmsg .= 'Sie haben folgende Dateien übertragen:'."\n";
           foreach ($uploadedFiles as $file) {
               $dmsg .= ' - '.$file."\n";
           }
       }
       $dmsg .= "\n\nIP Adresse: " . $ip . "\n";
       $dmsg .= "Host: " . $host . "\n";
       $dmsg .= "Browser und Betriebssystem: " . $UserAgent . "\n";
       $dmsg = strip_tags ($dmsg);
    
    
    if (mail($recipient,$betreff,$msg,$mailheaders)) {
    mail($email, $dsubject, $dmsg, $dmailheaders);
    
    // Danke-Seite, wenn E-Mail versendet wurde
    header ("location: danke.php");
    exit;
     
    }
    }
    }
    
    ?>
    <?php // Schleife, um Formular-Überschrift bei Fehler nicht zu zeigen
    if ($fehler) {
    }
       
    ?>


    Beitrag zuletzt geändert: 8.12.2009 11:06:27 von traumalos
  9. Versuchs mal so:
    if (mail($email,$dsubject,$dmsg,$dmailheaders)) {
    
    // Danke-Seite, wenn E-Mail versendet wurde
    header ("location: danke.php");
    exit;



    Beitrag zuletzt geändert: 7.12.2009 17:28:17 von karpfen
  10. Autor dieses Themas

    t*******s

    Das Problem liegt anscheinend darin, dass zweimal die Funktion mail() aufgerufen wird. Denn wenn ich wie vorgeschlagen eine der mail()-Zeilen rausnehme landet die Nachricht nur 1x im Postfach. Allerdings haben beide mail() ihre Daseinsberechtigung:

    mail($recipient,$betreff,$msg,$mailheaders)
    sendet die Anfrage an den Empfänger

    mail($email, $dsubject, $dmsg, $dmailheaders);
    sendet eine Bestätigungsmail an den Absender der Anfrage.

    Ich möchte niemandem auf die Füße treten, aber es kann eigentlich auch kein Fehler im Code vorliegen... Dieses Skript wird bereits seit einiger Zeit entwickelt und wurde schon massig runtergeladen. Und das gleiche Problem tritt auch bei einem anderen PHP-Skript, das eine Bestätigunsmail versendet, auf.

    Ich denke ich benutze weiterhin mein einfaches Kontaktformular, mich hatte an diesem das Captcha gereizt. Aber trotzdem Danke für eure Mühen!!!

    Beitrag zuletzt geändert: 8.12.2009 0:01:37 von traumalos
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!