PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
   » Gästebuch
   » Logfiles
   » Sitemap
   » Login
   » Login Sessions
   » Login Sessions +
      Dateien

   » Links anklickbar
   » Counter
   » Dateiupload
   » Formular mailer
   » Cookies

» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
Mathe Nachhilfe
Suchmaschinenoptimierung
PHP Forum

Formularmailer

Heute bauen wir einen kleinen Formmailer. Dieser Formmailer erkkennt später automatisch alle Felder unseres Formular, und setzt die Eingaben zu einer Mail zusammen und schickt sie dann zum Empfänger. Da dieser Mailer alle Eingabefelder kennt, ist es erstmal egal, wie das Formular aussieht.

Hier jetzt der Script:


1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
<?php

$email_from
= "absender@domain.de";   //Absender falls keiner angegeben wurde
$sendermail_antwort = 1;      //E-Mail Adresse des Besuchers als Absender. 0= Nein ; 1 = Ja
$name_von_emailfeld = "Email";   //Feld in der die Absenderadresse steht


//$send_dat ist ein mehrdimensionales Array, in dem zuerst die Empfängeradresse steht,
//dann die CC-Adresse, dann der Betreff und dann die URL, auf die der Besucher weitergeleitet
//wird, wenn die Mail gesendet wurde und zum Schluss die URL, auf die der Besucher weitergeleitet
//wird, wenn ein Fehler beim senden auftrat
$send_dat = array(

"dat1" => array("empf@domain.de", "cc@empf.de", "Betreff","www.url.de/ok.php", "http://www.url.de/fehler.php"),

"dat2" => array("empf@domain.de", "cc@empf.de", "Betreff2","http://www.url.de/ok.php", "http://www.url.de/fehler.php"),

);


//Diese Felder werden nicht in der Mail stehen
$ignore_fields = array('send_index','Submit','senden_y');

//Hier wird ausgehwählt, welcher "Datensatz" aus $send_dat die Mail bekommt
$send_index = $HTTP_POST_VARS['send_index'];

//Wenn kein send_index gesetzt wurde, bekommt der 1 Datensatz die Mail
if ($send_index!="")
    {
   
$st="$send_index";
    }
else
    {
   
$st="dat1";
    }


$mailto = $send_dat[$st][0];   //An diese Adresse geht die Email
$mail_cc = $send_dat[$st][1];  //Das ist der CC-Empfänger
$subject = $send_dat[$st][2];  //Betreff der Mail





//Datum, wann die Mail erstellt wurde
$name_tag[0] = "Sonntag";
$name_tag[1] = "Montag";
$name_tag[2] = "Dienstag";
$name_tag[3] = "Mittwoch";
$name_tag[4] = "Donnerstag";
$name_tag[5] = "Freitag";
$name_tag[6] = "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 <<<br><br>";

//Hier werden alle Eingabefelder abgefragt
while (list($name,$value) = each($HTTP_POST_VARS))
    {
   if (
in_array($name, $ignore_fields))
        {
        continue;
//Ingnore Feld wird nicht in die Mail eingefügt
        
}
    
$msg .= ">> $name << <br>$value<br><br>";
}

$msg = str_replace("<br>", "\n", $msg);
$msg = stripslashes($msg);

//E-Mail Adresse des Besuchers als Absender
if ($sendermail_antwort==1 and isset($HTTP_POST_VARS["$name_von_emailfeld"]))
    {
   
$email_from = $HTTP_POST_VARS["$name_von_emailfeld"];
    }

$header="From: $email_from";


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



$mail_senden = mail ($mailto,$subject,$msg,$header);

//Weiterleitung, hier konnte jetzt per echo auch Ausgaben stehen
if($mail_senden == true)
    {
   
Header("Location: ".$send_dat[$st][3]); //Mail wurde gesendet
    
}
else
    {
    
Header("Location: ".$send_dat[$st][4]); //Fehler beim Senden
   
}
?>

Die Erklärung

Als erstes geben wir eine gültige Absenderadresse, am besten die vom Server selber an, denn manche Mailanbieter (z.B. GMX) benötigen eine gültige Mailadresse als Absendern. In $sendermail_antwort = 1; geben wir an, ob der Wert aus dem Feld Email ($name_von_emailfeld) als Absender gelten soll.

$send_dat
$send_dat ist ein mehrdimensionales Array, sprich es ist ein Array, welches ein 2 Array enthält. Dies 2. Array enthält die Werte, die für die Mail wichtig ist.
Empfänger, CC-Empfänger, Betreff, Zieladresse wenn Mail gesendet wurde, Zieladresse wenn ein Fehler auftrat.
Falls du 2 Formular hat, und die sollen einen anderen Datensatz benutzen, dann musst du ein hidden Feld haben mit dem Namen: send_index, und dieser muss dann z.B. den Wert haben: dat2.

Du kannst mehrere Datensätze anlegen, indem du einfach folgendes Kopierst, und nach dem letzen Datensatz wieder einfügst:
"dat1" => array("empf@domain.de", "cc@empf.de", "Betreff","www.url.de/ok.php", "http://www.url.de/fehler.php"),

Hierbei musst du nur dat1 ändern, und aus der 1 einen anderen Wert machen, z.B. dat3. Das Feld send_index muss dann den Wert haben, damit man den Datensatz benutzt.

$ignore_fields
Hier geben wir Felder an, die nicht abgefragt werden soll, und somit tauchen sie auch nicht in der Mail auf.

$send_index
Hier fragen wir ab, wie das Feld heißt, welches Auswählt, an welchen Datensatz die Mail gehen soll. Das Feld muss send_index heißen, und kann z.B. den Wert dat1 enthalten.

Danach ermittelt man noch das Datum und fügt das als erstes in die Mail ein.

while (list($name,$value) = each($HTTP_POST_VARS))
        {
   if (in_array($name, $ignore_fields))
                {
                continue;
                }
        $msg .= ">> $name << <br>$value<br><br>";
}
Dies ist das Kernstück des Formmailer, denn hier fragen wir alle Felder ab, und speichern sie in $msg.
Falls ein ignore Feld dabei ist, wird es übersprungen.

Zum Schluss senden wir die Email und senden den Besucher an die angegebende URL weiter. Außerdem wird überprüft, ob die Mail gesendet werden konnte.

Autor Andavos

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Prinzip des Kampfsystemes kurz un ...

» Facebook Connect

» Geometrische Formen verlinken







© PHP-Einfach.de 2003 - 2010