PHP-Kontaktformular: E-Mails werden doppelt verschickt
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
absender
adresse
anfrage
betreff
betriebssystem
browser
code
dank
email
fehler
file
folgende dateien
folgendes code
funktion
herkunft
host
kontakt
nachricht
type
zeile
-
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! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ohne Quellcode wirds schwer. Schickst du die Mail über die mail()-Funktion oder über SMTP?
-
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 -
Danke für die superschnellen Antworten, damit habe ich nun nicht gerechnet
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... -
Vielleicht kannst du mal etwas mehr um den betroffenen Code posten.
Ein paar Zeilen vorher und ein paar mehr Zeilen nachher. -
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. -
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 -
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 -
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:
sendet die Anfrage an den Empfängermail($recipient,$betreff,$msg,$mailheaders)
sendet eine Bestätigungsmail an den Absender der Anfrage.mail($email, $dsubject, $dmsg, $dmailheaders);
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage