Antworten auf deine Fragen:
Neues Thema erstellen

Kontaktformular versendet keine Mail

ProdigyFaith

Noch nicht viel geschrieben

Hallo =)

Ich hoffe einer von Euch kann mir helfen, bin langsam am Verzweifeln.

Ich habe ein Kontaktformular, welches keine E-Mail nicht verschickt. Bekomme zwar den Text "Vielen Dank! Die Mail wurde erfolgreich verschickt." aber es kommt nichts an.
Egal wie oft ich den Code auch anstarre und analysiere, der Fehler möchte sich mir einfach nicht offenbaren.

Wenn ich es auf das absolut wesentliche reduziere, dann bekomme ich eine Mail. Also liegt der Fehler definitiv in meinem Code.
Wenn ich die übermittelten Daten am Schluß als "echo" ausgebe, dann gibt er mir auch die richtigen Daten aus, aber leider werden die nicht an die Mail versand.

PHP:
<?php
#  Prüfen ob Formular abgeschickt wurde (anhand vom Namen des Submit-Buttons
#  Wenn ja wird der "mail-Teil" ausgeführt
# --------------------------------------------------------------------------
if (isset($_POST["submit"]))
	{
		
	// Empfänger der E-Mail	
	$recipient = "test@mail.de";	
	//
		
	# DATEN EINLESEN -----------------------------------------------------------
	# --------------------------------------------------------------------------
	$subject       = $_POST['betreff'];
	$vorname       = $_POST['vorname'];
	$name          = $_POST['name'];
	$mail          = $_POST['mail'];
	$nachricht     = $_POST['nachricht'];
	$header  = 'MIME-Version: 1.0' . "\r\n";
	$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
	# --------------------------------------------------------------------------
	
	if (!eregi("^[A-Za-z0-9]+((\\.|!|_|\\+|\\-)[A-Za-z0-9]+)*@([A-Za-z0-9]+(\\.|\\-))+[A-Za-z0-9]{2,4}$", $mail)){
		$valid_mail         = "no";
		$valid_mail_text    = "Bitte eine g&uuml;ltige E-Mail Adresse eingeben.";
		}
		
		if ($betreff == "" || $vorname == "" || $name == "" || $mail == "" || $nachricht == "" || $valid_mail == "no"){
			echo "<h3 class=\"menuesort3h3\">Fehler bei der &Uuml;bermittlung</h3><p style=\"font-size:12px; line-height:16px; width:432px;\">Nicht alle Felder wurden ausgef&uuml;llt</p>";
			echo "<br/>$valid_mail_text<br/>";
		
			echo "<h3 class=\"menuesort3h3\">Genauere Fehlerursache:</h3>";
			echo "<ul style=\"font-size:12px; line-height:16px; font-weight:bold;\">";
		if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
			unset($_SESSION['captcha_spam']); 
			}		
		else{
		  	echo '<li>Der Sicherheitscode wurde falsch eingegeben</li>';
			}
		if ($subject == "") {echo "<li>Die Betreffzeile wurde nicht ausgew&auml;hlt</li>";}	
		if ($vorname == "") {echo "<li>Der Vornamen wurde nicht angegeben</li>";}	
		if ($name == "") {echo "<li>Der Nachnamen wurde nicht angegeben</li>";}
		if ($mail == "" || $valid_mail == "no") {echo "<li>Die eingegebene E-Mail-Adresse ist ung&uuml;ltig</li>";}
		if ($nachricht == "") { echo "<li>Es wurde keine Nachricht eingegeben</li>";}
		echo "</ul>";
	
		# BETREFFZEILEN ABFRAGE
		# ---------------------------------------------------------------------------------------------------	
		$subject = array('betreffzeile1' => 'Betreff 1', 'betreffzeile2' => 'Betreff 2', 'betreffzeile3' => 'Betreff 3', 'betreffzeile4' => 'Betreff 4', 'betreffzeile5' => 'Betreff 5');	
		# --------------------------------------------------------------------------------------------------- 	
		
		echo "<p style=\"font-size:12px; margin-top:20px;\"><a href='javascript:history.back()'>Zur&uuml;ck zum Kontaktformular</a></p>";
		end;
	}
	else
		{
		
# SPAM-SCHUTZ
# ---------------------------------------------------------------------------------------
		$absender = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "",  $_POST['mail'] );
		$absender = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $absender );
# ---------------------------------------------------------------------------------------
		
		// Inhalt der E-Mail:
		$EndNachricht = 
			"Name: '.$vorname.' '.$name.' \n 
			E-Mail: '.$mail.' \n\n 
			Nachricht:\n '.$nachricht.' \n \n";
		
		$txt = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $EndNachricht );
		
		$txt2 = htmlspecialchars($txt, ENT_NOQUOTES);
		mail($recipient,$subject,$txt2,"FROM: $absender\n",$header);
		
		echo "<h3 class=\"menuesort3h3\">Vielen Dank!</h3>";
		echo "<p style=\"font-size:12px; width:432px;\">Die Mail wurde erfolgreich verschickt.</p>";
	}
}
else{
?>

HTML:
<div id="kontaktformular">
    <form name="form" method="post" action="<?php $_SERVER['PHP_SELF'];?>">
        <table width="400" border="0" align="left" cellpadding="3" cellspacing="0" id="teilnehmen">
            <tr>
                <td>Betreff*:</td>
                <td>
                    <select name="betreff" value="<?php echo $_POST['betreff'];?>" class="kontaktboxinput2">
                        <option value="">Bitte w&auml;hlen Sie eine Betreffzeile aus</option>
                        <option value="betreffzeile1">Betreff 1</option>
                        <option value="betreffzeile2">Betreff 2</option>
                        <option value="betreffzeile3">Betreff 3</option>
                        <option value="betreffzeile4">Betreff 4</option>
                        <option value="betreffzeile5">Betreff 5</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Vorname*:</td>
                <td>
                    <input name="vorname" type="text" value="<?php echo $_POST['vorname'];?>" class="kontaktboxinput">
                </td>
            </tr>
            <tr>
                <td>Nachname*:</td>
                <td>
                    <input name="name" type="text" value="<?php echo $_POST['name'];?>" class="kontaktboxinput">
                </td>
            </tr> 
            <tr>
                <td>E-Mail*:</td>
                <td>
                    <input name="mail" type="text" value="<?php echo $_POST['mail'];?>" class="kontaktboxinput">
                </td>
            </tr>
            <tr>
                <td style="vertical-align:text-top;">Nachricht*:</td>
                <td>
                    <textarea class="kontaktboxinput" name="nachricht" rows="7" cols="42"><?php echo $_POST['nachricht'];?></textarea>
                </td>
            </tr>
            <tr>
                <td><label for="sicherheitscode" class="input_description">Sicherheitscode:</label></td> 
                <td><img src="/shop/captcha/captcha.php" border="0" title="Sicherheitscode" alt="code" /></td>
            </tr>
            <tr>
                <td>
                    <label for="antwort-sicherheitscode" class="input_description">Eingabe Sicherheitscode:</label>
                </td>
                <td>
                    <input type="text" name="sicherheitscode" id="sicherheitscode" class="input_wide"/>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="right"> 
                    <label>
                        <input type="submit" name="submit" id="btn-mailabschicken" value="">
                        <input name="update" type="hidden" id="update" value="true" />
                    </label>
                </td>   
            </tr> 
        </table>	
    </form>
</div>
<?php } ?>
 

Robbyn-

PHP / Flex Programmierer

AW: Kontaktformular versendet keine Mail

Bringe doch mal eine Abfrage ob es wirklich versendet wurde, das machst du ja nicht, passe es mal so an:

Alte:
PHP:
mail($recipient,$subject,$txt2,"FROM: $absender\n",$header);

Neue:
PHP:
$mail = mail($recipient,$subject,$txt2,"FROM: $absender\n",$header);
if($mail === true)
{
   //Erfolgsnachricht
}
else
{
 //Fehler, echo $mail;
}
 

Robbyn-

PHP / Flex Programmierer

AW: Kontaktformular versendet keine Mail

Mir fällt in deinem Code noch was auf ^^:

Alt:
PHP:
if (!eregi("^[A-Za-z0-9]+((\\.|!|_|\\+|\\-)[A-Za-z0-9]+)*@([A-Za-z0-9]+(\\.|\\-))+[A-Za-z0-9]{2,4}$", $mail)){

Neu:
PHP:
if(!filter_var($mail, FILTER_SANITIZE_EMAIL)){
Das:
PHP:
$absender = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "",  $_POST['mail'] );
        $absender = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $absender );

dann durch das ersetzen:
PHP:
$absender = $mail;

Alt:
PHP:
$subject       = $_POST['betreff'];
    $vorname       = $_POST['vorname'];
    $name          = $_POST['name'];
    $mail          = $_POST['mail'];
    $nachricht     = $_POST['nachricht'];

Neu:
PHP:
$subject       = filter_input(INPUT_POST, 'betreff');
$vorname       = filter_input(INPUT_POST, 'vorname');
$name          = filter_input(INPUT_POST, 'name');
$mail          = filter_input(INPUT_POST, 'mail');
$nachricht     = filter_input(INPUT_POST, 'nachricht');

Dies:

PHP:
$txt2 = htmlspecialchars($txt, ENT_NOQUOTES);

Kannst du dann weglassen wenn du durch filter_input gefiltert hast.
 
Zuletzt bearbeitet:

ProdigyFaith

Noch nicht viel geschrieben

AW: Kontaktformular versendet keine Mail

Hallo Robbyn, erst einmal danke für deine Hilfe.

Habe alles angepasst, allerdings bekomme ich jetzt die Fehlermeldung "Fatal error: Call to undefined function: filter_input()" nach dem Absenden :(

Dabei bekomme ich auch eine Fehlermeldung.
PHP:
if(!filter_var($mail, FILTER_SANITIZE_EMAIL)){

Hab somit alle "filter" Befehle wieder rausgenommen. Er sendet die Mail immer noch nicht :(
 
Zuletzt bearbeitet:

Robbyn-

PHP / Flex Programmierer

AW: Kontaktformular versendet keine Mail

Ok du hast noch kein php >= 5.2 aber deine Mail dürfte doch jetzt keine Erfolgsmeldung mehr bringen oder?

Falls ja dann schreibe mal in den Kopf bereich deiner PHP Seite folgendes:

PHP:
error_reporting(E_ALL^E_NOTICE);
ini_set('display_errors',1);

danch versende noch einmal die mail und schaue was für eine Fehlermeldung kommt.
 
Zuletzt bearbeitet:

ProdigyFaith

Noch nicht viel geschrieben

AW: Kontaktformular versendet keine Mail

Musste gerade selber schauen welche PHP Version das ist.
Ist 4.4.9.

Ein Error Reporting habe ich schon drin, leider liefert es keine Fehlerausgabe.

Das Erfolgsergebnis bekomme ich dennoch, er gibt mir brav den Text "Vielen Dank! Die Mail wurde erfolgreich verschickt." aus und mein "echo" "test@mail.debetreffzeile1Name: '.Vorname.' '.Nachname.' E-Mail: '.test@test.de.' Nachricht: '.Meine Frage" auch.

Mich verwirrt das es keine Fehlermeldung gibt und ich sogar brav meine Bestätigung bekommen, nur eben nicht diese Mail -.-
 

Robbyn-

PHP / Flex Programmierer

AW: Kontaktformular versendet keine Mail

Nachdem ich mich vom Schock der 4.4.9 erhollt habe, verwundert es mich auch das er die Erfolgsmeldung bringt. Der einzigste weg zu überprüfen ob es am mail() liegt wäre eine ganz simple php Datei zu stricken die nichts enthällt als ein mail().

PHP:
<?php
mail('benutzer@example.com', 'Mein Betreff', 'Meine Testnachricht');
?>

Danach ganz genau kontrolliere ob die Mail angekommen ist, also auch Spam Ordner etc. Falls nicht würde ich sagen das es vielleicht am Mail Server liegt.

Ist das den eine lokale oder Live Testumgebung?

Und wieso hast du dort noch so eine uralte PHP Version oben? :)
 

ProdigyFaith

Noch nicht viel geschrieben

AW: Kontaktformular versendet keine Mail

Glaub mir ich war ebenso schockiert als ich die Version gesehen habe.
Die 4.4.9 ist auf dem Live Server. Lokal hat (ironischweise) 5.3.1 aber da leider keinen eingerichteten Mail Server.
Leider habe ich nicht die Möglichkeit daran etwas zu ändern :(

Die reine mail() funktioniert, sogar im Formular mit Submit-Button. Sobald ich aber wieder die anderen Anweisungen einblende geht es nicht mehr.
 

Robbyn-

PHP / Flex Programmierer

AW: Kontaktformular versendet keine Mail

Es könnte auch am header liegen, hast du denn auch ausgeblendet?

Wenn nein versuche mal alles alszublenden wie eben auch nur das du diesmal den header mit übermittelst. Ansonsten würde ich den header auf folgendes abändern:

Code:
$header= "From: $absendername <$absendermail>\n";
$header.= "Content-Type: text/html\n";
$header.= "Content-Transfer-Encoding: 8bit\n";
Damit fährt man eigentlich immer gut.




Nebenbei sehe ich gerade das dein mail 5 Parameter hat:

mail($recipient, $subject, $txt2, "FROM: $absender\n", $header);

der Standard mail hat aber nur 4 Parameter (5 Parameter ist additionalHeader).

bool mail ( $to , $subject , $message [, $additional_headers [, $additional_parameters ]])


Schaue mal da nach, vielleicht ist dort noch was falsch.
 

lachender_engel

Aktives Mitglied

AW: Kontaktformular versendet keine Mail

Wenn mail() funktioniert dann liegt es sicher am Aufruf der einzelnen Mailzeile, also an den Parametern.
Ich kann dazu raten die Parameter durch feste Variablen zu ersetzen. Und dann nach und nach die einzelnen Paramter wieder durch die Variablen zu ersetzen. Dann siehst Du bei welcher Variablen es Probleme gibt.
ich tippe darauf, dass die E-Mail-Adresse falsch ist. ersetze die doch mal im Code durch Deine reale Adresse. Wenn das klappt, dann gibt noch mal die Variable aus.
 

ProdigyFaith

Noch nicht viel geschrieben

AW: Kontaktformular versendet keine Mail

Robbyn bekomm das bitte jetzt nicht in den falschen Hals, aber ich liebe dich!

Der Header war schuld oder mein 5ter Parameter, auf jeden Fall funktioniert es jetzt :D

Ich habe gerade die absolute Glückgefühle.

Danke schön :)

@lachender_engel:
Auch dir danke schön =)
Das mit den Parametern hatte ich vorher schon ausprobiert, daher hatte ich sie als echo ausgegeben, um sicherzustellen das die Mail auch wirklich übertragen wird.
 

Robbyn-

PHP / Flex Programmierer

AW: Kontaktformular versendet keine Mail

Schön das es funktioniert, hätten wir aber auch gleich darauf kommen können :)

Aber versuche mal deinen Hoster anzuschreiben das er dir wenigstens eine PHP Version auf 5.0 aktualisiert, die 4.4.9 ist ja keinem mehr zumutbar ;)
 

ProdigyFaith

Noch nicht viel geschrieben

AW: Kontaktformular versendet keine Mail

Danke noch einmal :)

Jepp, hätte auch nicht gedacht das die Version so alt ist. Mal schauen was sich da klären lässt =)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.455
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben