From d30a679aaebd16d4bef1f883f0ab63fbf1c2ecb2 Mon Sep 17 00:00:00 2001 From: Patrick Canterino Date: Fri, 2 Dec 2011 20:05:44 +0000 Subject: [PATCH] Form E-Mail 3.4.1 hinzugefuegt --- changes.htm | 218 ++++++++++ form-email/XFILES.TTF | Bin 0 -> 21036 bytes form-email/captcha.php | 112 +++++ form-email/class.Template.php | 796 ++++++++++++++++++++++++++++++++++ form-email/config.php | 107 +++++ form-email/fatal.htm | 11 + form-email/functions.php | 157 +++++++ form-email/mail.txt | 3 + form-email/mailer.php | 345 +++++++++++++++ form-email/sent.htm | 10 + form-email/user_error.htm | 25 ++ formular.htm | 28 ++ license.txt | 127 ++++++ readme.htm | 555 ++++++++++++++++++++++++ 14 files changed, 2494 insertions(+) create mode 100644 changes.htm create mode 100644 form-email/XFILES.TTF create mode 100644 form-email/captcha.php create mode 100644 form-email/class.Template.php create mode 100644 form-email/config.php create mode 100644 form-email/fatal.htm create mode 100644 form-email/functions.php create mode 100644 form-email/mail.txt create mode 100644 form-email/mailer.php create mode 100644 form-email/sent.htm create mode 100644 form-email/user_error.htm create mode 100644 formular.htm create mode 100644 license.txt create mode 100644 readme.htm diff --git a/changes.htm b/changes.htm new file mode 100644 index 0000000..1953bab --- /dev/null +++ b/changes.htm @@ -0,0 +1,218 @@ + + + + + +Versionshistorie + + + + + +

Versionshistorie

+ +

Neu in Version 3.4.1 (vom 27.2.2011)

+ + + +

Neu in Version 3.4 (vom 25.1.2009)

+ + + +

Neu in Version 3.3a (vom 14.4.2007)

+ + + +

Neu in Version 3.3 (vom 11.4.2007)

+ + + +

Neu in Version 3.2.2 (vom 9.6.2006)

+ + + +

Neu in Version 3.2.1 (vom 18.6.2005)

+ + + +

Neu in Version 3.2 (vom 29.8.2004)

+ + + +

Neu in Version 3.1 (vom 20.1.2004)

+ + + +

Neu in Version 3.0 (vom 1.9.2003)

+ + + +
+ +

Die Liste der Änderungen bis zur Version 3.0 finden Sie auf der Form E-Mail-Infoseite!

+ +
+ +

ReadMe-Datei

+ +
+ +

© 2002-2011 Patrick Canterino

+ + + + + + + + + + +
Homepage:http://www.patshaping.de/
E-Mail:patrick@patshaping.de
+ + \ No newline at end of file diff --git a/form-email/XFILES.TTF b/form-email/XFILES.TTF new file mode 100644 index 0000000000000000000000000000000000000000..c034793e999372913f136b3a08f9bae567a1a178 GIT binary patch literal 21036 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 Jf&cpTzW@wFDB=JB literal 0 HcmV?d00001 diff --git a/form-email/captcha.php b/form-email/captcha.php new file mode 100644 index 0000000..f796b46 --- /dev/null +++ b/form-email/captcha.php @@ -0,0 +1,112 @@ + +# Letzte Aenderung: 11.1.2009 +# +# Copyright (C) 2002-2011 Patrick Canterino +# +# Diese Datei kann unter den Bedingungen der "Artistic License 1.0" +# weitergegeben und / oder veraendert werden. +# Siehe: +# http://www.opensource.org/licenses/artistic-license-1.0.php +# + +require('config.php'); +require('functions.php'); +require('class.Template.php'); + +if($captcha_enable) +{ + session_start(); + + if($captcha_max && isset($_SESSION['captcha_failed']) && $_SESSION['captcha_failed'] >= $captcha_max) + { + show_fatal($err_captcha_max); + } + else + { + unset($_SESSION['captcha']); + + # Zufaellige Zeichenkette erzeugen + + $captcha_string = ''; + + $x = 0; + srand(); + + while($x<$captcha_length) + { + $rand = rand(0,strlen($captcha_possible)-1); + $captcha_string .= $captcha_possible[$rand]; + + $x++; + } + + $_SESSION['captcha'] = $captcha_string; + + # Ein Bild mit dem generierten Text erzeugen + + if($captcha_image_bg && file_exists($captcha_image_bg)) + { + # Es wurde ein Hintergrundbild angegeben + + $captcha_img = imagecreatefrompng($captcha_image_bg); + + $image_size = getimagesize($captcha_image_bg); + $captcha_width = $image_size[0]; + $captcha_height = $image_size[1]; + } + else + { + # Es wurde kein Hintergrundbild angegeben + + $captcha_img = imagecreate($captcha_width,$captcha_height); + } + + $white = imagecolorallocate($captcha_img,$captcha_color_bg[0],$captcha_color_bg[1],$captcha_color_bg[2]); + $black = imagecolorallocate($captcha_img,$captcha_color_text[0],$captcha_color_text[1],$captcha_color_text[2]); + + $angle = rand($captcha_angle[0],$captcha_angle[1]); + $t_x = rand($captcha_x[0],$captcha_y[1]); + $t_y = rand($captcha_y[0],$captcha_y[1]); + + imagettftext($captcha_img,$captcha_font_size,$angle,$t_x,$t_y,$black,$captcha_font,$captcha_string); + + # Zufaellige Linien einfuegen + + $y = 0; + + while($y<$captcha_lines) + { + $begin_x = rand(0,$captcha_width); + $begin_y = rand(0,$captcha_height); + $end_x = rand(0,$captcha_width); + $end_y = rand(0,$captcha_height); + + imageline($captcha_img,$begin_x,$begin_y,$end_x,$end_y,$black); + + $y++; + } + + # Bild ausgeben + + header('Content-type: image/png'); + imagepng($captcha_img); + + imagedestroy($captcha_img); + } +} +else +{ + show_fatal($err_captcha_disabled); +} + +# +### Ende ### + +?> \ No newline at end of file diff --git a/form-email/class.Template.php b/form-email/class.Template.php new file mode 100644 index 0000000..ad6dc0e --- /dev/null +++ b/form-email/class.Template.php @@ -0,0 +1,796 @@ + +# Letzte Aenderung: 3.7.2006 +# + +class Template +{ + var $file; + var $template; + var $original; + var $vars = array(); + var $defined_vars = array(); + var $loop_vars = array(); + + # get_template() + # + # Kompletten Vorlagentext zurueckgeben + # + # Parameter: -keine- + # + # Rueckgabe: Kompletter Vorlagentext (String) + + function get_template() + { + return $this->template; + } + + # set_template() + # + # Kompletten Vorlagentext aendern + # + # Parameter: Vorlagentext + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function set_template($text) + { + $this->template = $text; + } + + # add_text() + # + # Vorlagentext ans Template-Objekt anhaengen + # + # Parameter: Vorlagentext + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function add_text($text) + { + $this->set_template($this->get_template().$text); + } + + # read_file() + # + # Einlesen einer Vorlagendatei und {INCLUDE}-Anweisungen ggf. verarbeiten + # (Text wird an bereits vorhandenen Text angehaengt) + # + # Parameter: 1. Datei zum Einlesen + # 2. Status-Code (Boolean): + # true => {INCLUDE}-Anweisungen nicht verarbeiten + # false => {INCLUDE}-Anweisungen verarbeiten (Standard) + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function read_file($file,$not_include=0) + { + $this->file = $file; + + if(filesize($file) > 0) + { + $fp = fopen($file,'r'); + if(!$fp) die; + $content = fread($fp,filesize($file)); + fclose($fp); + } + else $content = ''; + + $this->add_text($content); + $this->save_state(); + + if(!$not_include) $this->parse_includes(); + } + + # set_var() + # + # Wert einer Variable setzen + # + # Parameter: 1. Name der Variable + # 2. Wert, den die Variable erhalten soll + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function set_var($var,$content) + { + $this->vars[$var] = $content; + } + + # get_var() + # + # Wert einer Variable zurueckgeben + # + # Parameter: (optional) Variablenname + # + # Rueckgabe: Wert der Variable; + # wenn die Variable nicht existiert, false; + # wenn kein Variablenname angegeben wurde, wird ein + # Array mit den Variablennamen zurueckgegeben + + function get_var($var=false) + { + if($var !== false) + { + if(isset($this->vars[$var])) + { + return $this->vars[$var]; + } + else + { + return false; + } + } + else + { + return array_keys($this->vars); + } + } + + # set_loop_data() + # + # Daten fuer eine Schleife setzen + # + # Parameter: 1. Name der Schleife + # 2. Array mit den Arrays mit den Variablen fuer + # die Schleifendurchgaenge + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function set_loop_data($loop,$data) + { + $this->loop_vars[$loop] = $data; + } + + # add_loop_data() + # + # Daten fuer einen Schleifendurchgang hinzufuegen + # + # Parameter: 1. Name der Schleife + # 2. Array mit den Variablen fuer den + # Schleifendurchgang + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function add_loop_data($loop,$data) + { + if(isset($this->loop_vars[$loop]) && is_array($this->loop_vars[$loop])) + { + array_push($this->loop_vars[$loop],$data); + } + else + { + $this->loop_vars[$loop] = array($data); + } + } + + # parse() + # + # In der Template definierte Variablen auslesen, Variablen + # ersetzen, {IF}- und {TRIM}-Bloecke parsen + # + # Parameter: -nichts- + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function parse() + { + # Zuerst die Schleifen parsen + + if(is_array($this->loop_vars) && ($loops = array_keys($this->loop_vars))) + { + foreach($loops as $loop) + { + $this->parse_loop($loop); + } + } + + # Normale Variablen durchgehen + + if(($vars = $this->get_var()) !== false && is_array($vars)) + { + foreach($vars as $var) + { + $val = $this->get_var($var); + + $this->parse_if_block($var,$val); + + if(is_array($val)) + { + $this->fillin_array($var,$val); + } + else + { + $this->fillin($var,$val); + } + + unset($val); + } + } + + # Jetzt dasselbe mit denen, die direkt in der Template-Datei definiert + # sind, machen. Ich weiss, dass das eine ziemlich unsaubere Loesung ist, + # aber es funktioniert + + $this->get_defined_vars(); + + foreach($this->defined_vars as $var) + { + $val = $this->get_var($var); + + $this->parse_if_block($var,$val); + $this->fillin($var,$val); + + unset($val); + } + + # {TRIM}-Bloecke entfernen + + $this->parse_trim_blocks(); + } + + # fillin() + # + # Variablen durch Text ersetzen + # + # Parameter: 1. Variable zum Ersetzen + # 2. Text, durch den die Variable ersetzt werden soll + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function fillin($var,$text) + { + $template = $this->get_template(); + $template = str_replace('{'.$var.'}',$text,$template); + + $this->set_template($template); + } + + # fillin_array() + # + # Variable durch Array ersetzen + # + # Parameter: 1. Variable zum Ersetzen + # 2. Array, durch das die Variable ersetzt werden soll + # 3. Zeichenkette, mit der das Array verbunden werden soll + # (Standard: '') + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function fillin_array($var,$array,$glue='') + { + $this->fillin($var,implode($glue,$array)); + } + + # to_file() + # + # Template in Datei schreiben + # + # Parameter: Datei-Handle + # + # Rueckgabe: Status-Code (Boolean) + + function to_file($handle) + { + return @fwrite($handle,$this->get_template()); + } + + # reset() + # + # Den gesicherten Stand des Template-Textes sichern + # + # Parameter: -nichts- + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function reset() + { + $this->template = $this->original; + } + + # save_state() + # + # Aktuellen Stand des Template-Textes sichern + # (alte Sicherung wird ueberschrieben) + # + # Parameter: -nichts- + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function save_state() + { + $this->original = $this->template; + } + + # parse_loop() + # + # Eine Schleife parsen + # + # Parameter: Name der Schleife + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function parse_loop($name) + { + $template = $this->get_template(); + if(strpos($template,'{LOOP '.$name.'}') === false) return; + + $offset = 0; + $name_len = strlen($name); + + while(($begin = strpos($template,'{LOOP '.$name.'}',$offset)) !== false) + { + if(($end = strpos($template,'{ENDLOOP}',$begin+6+$name_len)) !== false) + { + $block = substr($template,$begin,$end+9-$begin); + $content = substr($block,$name_len+7,-9); + + $parsed_block = ''; + + for($x=0;$xloop_vars[$name]);$x++) + { + $loop_data = $this->loop_vars[$name][$x]; + $loop_vars = array_keys($loop_data); + + $ctpl = new Template; + $ctpl->set_template($content); + + foreach($loop_vars as $loop_var) + { + $ctpl->set_var($name.'.'.$loop_var,$loop_data[$loop_var]); + } + + $ctpl->parse(); + $parsed_block .= $ctpl->get_template(); + + unset($ctpl); + } + + $template = str_replace($block,$parsed_block,$template); + $offset = $begin+strlen($parsed_block); + } + else break; + } + + $this->set_template($template); + } + + # get_defined_vars() + # + # In der Template-Datei definierte Variablen auslesen + # + # Parameter: -nichts- + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function get_defined_vars() + { + $template = $this->get_template(); + if(strpos($template,'{DEFINE ') === false) return; + + $offset = 0; + + while(strpos($template,'{DEFINE ',$offset) !== false) + { + $begin = strpos($template,'{DEFINE ',$offset)+8; + $offset = $begin; + + $name = ''; + $content = ''; + + $var_open = 0; + $name_found = 0; + $define_block = 0; + + for($x=$begin;$xget_var($name) === false) + { + # Die Variable wird nur gesetzt, wenn sie nicht bereits gesetzt ist + + $this->set_var($name,$content); + array_push($this->defined_vars,$name); + } + + # {DEFINE}-Block entfernen + + $pre = substr($template,0,$begin-8); + $post = substr($template,$x+2); + + $template = $pre.$post; + + # Fertig! + + $offset = strlen($pre); + break; + } + } + elseif($template[$x] == '\\') + { + # Ein Backslash wurde gefunden, er dient zum Escapen von Zeichen + + if($template[$x+1] == 'n') + { + # "\n" in Zeilenumbrueche umwandeln + + $content .= "\n"; + } + else $content .= $template[$x+1]; + + $x++; + } + else $content .= $template[$x]; + } + else + { + if($name_found == 1) + { + if($var_open == 0) + { + if($template[$x] == '"') $var_open = 1; + else break; + } + } + else + { + # Variablennamen auslesen + + if($template[$x] == '}' && $name != '') + { + # Wir haben einen {DEFINE}-Block + + $name_found = 1; + $define_block = 1; + + # Alles ab hier sollte mit dem Teil verbunden werden, der das + # {DEFINE} in einer Zeile verarbeitet + + # Der Parser fuer {DEFINE}-Bloecke ist nicht rekursiv, was auch + # nicht noetig sein sollte + + if(($end = strpos($template,'{ENDDEFINE}',$x)) !== false) + { + $x++; + + $content = substr($template,$x,$end-$x); + + if($this->get_var($name) === false) + { + # Die Variable wird nur gesetzt, wenn sie nicht bereits gesetzt ist + + $this->set_var($name,$content); + array_push($this->defined_vars,$name); + } + + $pre = substr($template,0,$begin-8); + $post = substr($template,$end+11); + + $template = $pre.$post; + + # Fertig! + + $offset = strlen($pre); + break; + } + else break; + } + elseif($template[$x] != ' ') + { + $name .= $template[$x]; + } + elseif($name != '') + { + $name_found = 1; + } + else break; + } + } + } + } + + $this->set_template($template); + } + + # parse_if_block() + # + # IF-Bloecke verarbeiten + # + # Parameter: 1. Name des IF-Blocks (das, was nach dem IF steht) + # 2. Status-Code (true => Inhalt anzeigen + # false => Inhalt nicht anzeigen + # 3. true => Verneinten Block nicht parsen + # false => Verneinten Block parsen (Standard) + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function parse_if_block($name,$state,$no_negate=0) + { + $template = $this->get_template(); + + $count = 0; + + while(strpos($template,'{IF '.$name.'}') !== false) + { + # Das alles hier ist nicht wirklich elegant geloest... + # ... aber solange es funktioniert... ;-) + + $count++; + + $start = strpos($template,'{IF '.$name.'}'); + $tpl_tmp = substr($template,$start); + $splitted = explode('{ENDIF}',$tpl_tmp); + + $block = ''; # Kompletter bedingter Block + $ifs = 0; # IF-Zaehler (wird fuer jedes IF erhoeht und fuer jedes ENDIF erniedrigt) + + # {IF} + + for($x=0;$xfile.'"'); + + $ifs += substr_count($splitted[$x],'{IF '); # Zum Zaehler jedes Vorkommen von IF hinzuzaehlen + $ifs--; # Zaehler um 1 erniedrigen + $block .= $splitted[$x].'{ENDIF}'; # Daten zum Block hinzufuegen + + if($ifs == 0) + { + # Zaehler wieder 0, also haben wir das Ende des IF-Blocks gefunden :-)) + + break; + } + } + + $if_block = substr($block,strlen($name)+5,-7); # Alles zwischen {IF} und {ENDIF} + + # {ELSE} + + $else_block = ''; # Alles ab {ELSE} + $ifs = 0; # IF-Zaehler + + $splitted = explode('{ELSE}',$if_block); + + for($x=0;$xset_template($template); + + # Evtl. verneinte Form parsen + + if(!$no_negate) + { + $this->parse_if_block('!'.$name,!$state,1); + } + } + + # parse_trim_blocks() + # + # {TRIM}-Bloecke parsen + # + # Dieser Parser ist nicht rekursiv, was auch nicht + # noetig sein sollte. + # + # Parameter: -nichts- + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function parse_trim_blocks() + { + $template = $this->get_template(); + if(strpos($template,'{TRIM}') === false) return; + + $offset = 0; + + while(($begin = strpos($template,'{TRIM}',$offset)) !== false) + { + if(($end = strpos($template,'{ENDTRIM}',$begin+6)) !== false) + { + $block = substr($template,$begin,$end+9-$begin); + $content = substr($block,6,-9); + + $trimmed = trim($content); + + $template = str_replace($block,$trimmed,$template); + + $offset = $begin+strlen($trimmed); + } + else break; + } + + $this->set_template($template); + } + + # parse_condtag() + # + # Bedingungstags in einem Vorlagentext verarbeiten + # + # Parameter: 1. Tagname + # 2. Status-Code (true => Tag-Inhalt anzeigen + # false => Tag-Inhalt nicht anzeigen + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function parse_condtag($condtag,$state) + { + $template = $this->get_template(); + + while(strpos($template,'<'.$condtag.'>') !== false) + { + $start = strpos($template,'<'.$condtag.'>'); # Beginn des Blocks + $end = strpos($template,'')+strlen($condtag)+3; # Ende des Blocks + + $extract = substr($template,$start,$end-$start); # Kompletten Bedingungsblock extrahieren... + + $replacement = ($state) ? substr($extract,strlen($condtag)+2,0-strlen($condtag)-3) : ''; + + $template = str_replace($extract,$replacement,$template); # Block durch neue Daten ersetzen + } + $this->set_template($template); + } + + # parse_includes() + # + # {INCLUDE}-Anweisungen verarbeiten + # + # Parameter: -nichts- + # + # Rueckgabe: -nichts- (Template-Objekt wird modifiziert) + + function parse_includes() + { + $template = $this->get_template(); + if(strpos($template,'{INCLUDE ') === false) return; + + $offset = 0; + + $y = 0; + + while(($begin = strpos($template,'{INCLUDE ',$offset)) !== false) + { + $y++; + + $start = $begin+9; + $offset = $start; + $long = 0; + + if($template[$start] == '"') + { + $long = 1; + $start++; + } + + $file = ''; + $skip = 0; + + for($x=$start;$xfile)) $dir = dirname($this->file); + else $dir = '.'; + + $dir = str_replace('\\','/',$dir); + + if(!preg_match('!/+$!',$dir)) $dir .= '/'; + + $filepath = $dir.$file; + } + + if(is_file($filepath)) + { + $inc = new Template; + $inc->read_file($filepath); + + $end = ($long == 1) + ? $start + strlen($file) + 2 + : $start + strlen($file) + 1; + + $pre = substr($template,0,$begin); + $post = substr($template,$end); + + $template = $pre.$inc->get_template().$post; + $offset = strlen($pre)+strlen($inc->get_template()); + + unset($inc); + } + } + } + + $this->set_template($template); + } +} + +# +### Ende ### + +?> \ No newline at end of file diff --git a/form-email/config.php b/form-email/config.php new file mode 100644 index 0000000..cee87df --- /dev/null +++ b/form-email/config.php @@ -0,0 +1,107 @@ + +# Letzte Aenderung: 11.1.2009 +# +# Copyright (C) 2002-2011 Patrick Canterino +# +# Diese Datei kann unter den Bedingungen der "Artistic License 1.0" +# weitergegeben und / oder veraendert werden. +# Siehe: +# http://www.opensource.org/licenses/artistic-license-1.0.php +# + +# Empfaenger - wichtigste Einstellung + +$mailto = ''; +$aliases = array(); + +# Allgemeines + +$default_subject = 'E-Mail geliefert von Form E-Mail'; +$friendly_sender = 2; +$line_break = 0; +$add_header = 1; +$timeformat = '%d.%m.%Y um %H:%M:%S'; +$return_url = ''; +$no_tld = 0; +$allowed_envs = array('HTTP_USER_AGENT','REMOTE_ADDR'); +$charset = 'iso-8859-1'; +$timezone = 'Europe/Berlin'; + +# Laengenueberpruefung + +$name_min = 0; +$subject_min = 0; +$text_min = 0; + +$name_max = 0; +$subject_max = 0; +$text_max = 0; + +# Sicherheit + +$only_post = 0; +$check_referer = 0; +$referer_ok = ''; + +# Captcha + +$captcha_enable = 0; +$captcha_case = 1; +$captcha_max = 0; +$captcha_length = 6; +$captcha_width = 120; +$captcha_height = 40; +$captcha_angle = array(-5,10); +$captcha_x = array(5,30); +$captcha_y = array(30,35); +$captcha_possible = 'ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'; +$captcha_font = 'XFILES.TTF'; +$captcha_font_size = 15; +$captcha_lines = 4; +$captcha_color_bg = array(255,255,255); +$captcha_color_text = array(0,0,0); +$captcha_image_bg = ''; + +# Fehlermeldungen + +$err_nothing = 'Es wurden keine Daten eingeben!'; +$err_no_name = 'Sie haben keinen Namen angegeben!'; +$err_no_email = 'Sie haben keine E-Mail-Adresse angegeben!'; +$err_invalid_email = 'Die von Ihnen eingegebene E-Mail-Adresse ist ungültig!'; +$err_no_text = 'Sie haben keinen Text für die E-Mail eingegeben!'; + +$err_name_short = 'Der eingegebene Name ist zu kurz!'; +$err_subject_short = 'Der eingegebene Betreff ist zu kurz!'; +$err_text_short = 'Der eingegebene Text ist zu kurz!'; + +$err_name_long = 'Der eingegebene Name ist zu lang!'; +$err_subject_long = 'Der eingegebene Betreff ist zu lang!'; +$err_text_long = 'Der eingegebene Text ist zu lang!'; + +$err_send_error = 'Beim Versenden der Mail ist ein Fehler aufgetreten!'; +$err_only_post = 'Dieser Form-Mailer kann leider nur mit POST aufgerufen werden.'; +$err_referer_not_ok = 'Der im HTTP-Referer angegebene Host darf keine Mails versenden.'; + +$err_captcha_incorrect = 'Der eingegebene Sicherheitscode ist nicht korrekt!'; +$err_captcha_max = 'Sie haben den Sicherheitscode zu oft falsch eingegeben!'; +$err_captcha_disabled = 'Captchas sind nicht aktiviert!'; +$err_captcha_session_failure = 'Keine gültige Session!'; + +# Templates + +$tpl_mail = 'mail.txt'; +$tpl_sent = 'sent.htm'; +$tpl_user_error = 'user_error.htm'; +$tpl_fatal = 'fatal.htm'; + +# +### Ende ### + +?> \ No newline at end of file diff --git a/form-email/fatal.htm b/form-email/fatal.htm new file mode 100644 index 0000000..8891c23 --- /dev/null +++ b/form-email/fatal.htm @@ -0,0 +1,11 @@ + + +Fehler + + + +

Fehler

+ +

{ERROR}

+ + \ No newline at end of file diff --git a/form-email/functions.php b/form-email/functions.php new file mode 100644 index 0000000..9f5937d --- /dev/null +++ b/form-email/functions.php @@ -0,0 +1,157 @@ + +# Letzte Aenderung: 11.1.2009 +# +# Copyright (C) 2002-2011 Patrick Canterino +# +# Diese Datei kann unter den Bedingungen der "Artistic License 1.0" +# weitergegeben und / oder veraendert werden. +# Siehe: +# http://www.opensource.org/licenses/artistic-license-1.0.php +# + +# formdata() +# +# Formulardaten bei deaktiviertem register_globals auslesen +# +# Parameter: Name des Formularfeldes +# +# Rueckgabe: Inhalt des Formularfeldes (String oder Array) +# +# Bemerkungen: - Wenn der HTTP-Zugriff nicht POST oder GET ist, +# wird nichts zurueckgegeben. +# - Codierende Backslashes werden automatisch entfernt + +function formdata($param) +{ + switch($_SERVER['REQUEST_METHOD']) + { + case 'GET': + if(isset($_GET[$param])) + { + $value = $_GET[$param]; + break; + } + else return null; + + case 'POST': + if(isset($_POST[$param])) + { + $value = $_POST[$param]; + break; + } + else return null; + + default: + return null; + } + + if(get_magic_quotes_gpc()) + { + if(is_array($value)) return array_map('stripslashes',$value); + else return stripslashes($value); + } + else return $value; +} + +# plain() +# +# Text fuer HTML-Ausgabe vorbereiten (Entities, +# Zeilenumbrueche, Leerzeichen) +# +# Parameter: 1. Text +# 2. Zeilenumbruchskennung (Standard =
) +# +# Rueckgabe: Bearbeiteter Text (String) + +function &plain(&$text,$linebreak='
') +{ + $htmltext = htmlentities($text); + $htmltext = preg_replace("/\015\012|\012|\015/",$linebreak,$htmltext); + + for($x=0;$xread_file($tpl_fatal); + + $tpl->fillin('ERROR',$errmsg); + + print $tpl->get_template(); + exit; +} + +# show_user_error() +# +# Fehlermeldung anzeigen (Benutzer kann den Fehler +# aber noch korrigieren) +# +# Parameter: Fehlermeldung + +function show_user_error(&$errmsg) +{ + global $captcha_enable, $email, $name, $subject, $text, $tpl_user_error; + + $tpl = new Template; + $tpl->read_file($tpl_user_error); + + $tpl->parse_if_block('CAPTCHA',$captcha_enable); + + $tpl->set_var('EMAIL', htmlentities($email)); + $tpl->set_var('ERROR', $errmsg); + $tpl->set_var('NAME', htmlentities($name)); + $tpl->set_var('SUBJECT',htmlentities($subject)); + $tpl->set_var('TEXT', htmlentities($text)); + + $tpl->parse(); + + print $tpl->get_template(); + exit; +} + +# +### Ende ### + +?> \ No newline at end of file diff --git a/form-email/mail.txt b/form-email/mail.txt new file mode 100644 index 0000000..27db7d8 --- /dev/null +++ b/form-email/mail.txt @@ -0,0 +1,3 @@ +{NAME} ({EMAIL}) schrieb am {TIME}: + +{TEXT} \ No newline at end of file diff --git a/form-email/mailer.php b/form-email/mailer.php new file mode 100644 index 0000000..9ff120d --- /dev/null +++ b/form-email/mailer.php @@ -0,0 +1,345 @@ + +# Letzte Aenderung: 24.2.2011 +# +# Copyright (C) 2002-2011 Patrick Canterino +# +# Diese Datei kann unter den Bedingungen der "Artistic License 1.0" +# weitergegeben und / oder veraendert werden. +# Siehe: +# http://www.opensource.org/licenses/artistic-license-1.0.php +# + +# =========== +# Hauptteil +# =========== + +require('config.php'); +require('functions.php'); +require('class.Template.php'); + +if($only_post && $_SERVER['REQUEST_METHOD'] != 'POST') show_fatal($err_only_post); + +# Wenn Captchas aktiviert sind, Session starten + +if($captcha_enable) +{ + session_start(); + + # Pruefen, ob die zulaessige Zahl der Falscheingaben bei Captchas ueberschritten wurde + + if($captcha_max && isset($_SESSION['captcha_failed']) && $_SESSION['captcha_failed'] >= $captcha_max) + { + show_fatal($err_captcha_max); + } +} + +# Bestimmte Werte in Integers umwandeln + +$name_min = intval($name_min); +$subject_min = intval($subject_min); +$text_min = intval($text_min); +$name_max = intval($name_max); +$subject_max = intval($subject_max); +$text_max = intval($text_max); +$line_break = intval($line_break); + +# Formulardaten auslesen + +$email = formdata('email'); +$name = formdata('name'); +$recipient = formdata('recipient'); +$subject = formdata('subject'); +$text = formdata('text'); + +# Pruefen, ob ueberhaupt was ausgefuellt wurde + +if(!$name && !$email && !$text) show_user_error($err_nothing); + +# Pruefen, ob alle wichtigen Formular-Felder ausgefuellt wurden + +if(!$name) show_user_error($err_no_name); +if(!$email) show_user_error($err_no_email); +if(!$text) show_user_error($err_no_text); + +if(!$subject) $subject = $default_subject; # Standard-Betreff + +# Pruefen, ob Name, Betreff und Text lang genug sind + +if($name_min && strlen($name) < $name_min) show_user_error($err_name_short); +if($subject_min && strlen($subject) < $subject_min) show_user_error($err_subject_short); +if($text_min && strlen($text) < $text_min) show_user_error($err_text_short); + +# Pruefen, ob Name, Betreff und Text nicht zu lang sind + +if($name_max && strlen($name) > $name_max) show_user_error($err_name_long); +if($subject_max && strlen($subject) > $subject_max) show_user_error($err_subject_long); +if($text_max && strlen($text) > $text_max) show_user_error($err_text_long); + +# Pruefen, ob eingegebene E-Mail-Adresse gueltig ist +# Danke an "ich" aus dem SELFHTML Forum fuer die Muehe + +$mail_regexp = ($no_tld) + ? '/^([a-z0-9]+([\.]?|[-]?|[_]?)?)*([a-z0-9]+([\.]?[_]?)?)@([a-z0-9]+([\.]?|[-]?)?)*[a-z0-9]$/i' + : '/^([a-z0-9]+([\.]?|[-]?|[_]?)?)*([a-z0-9]+([\.]?[_]?)?)@([a-z0-9]+([\.]?|[-]?)?)*[a-z0-9]+\.{1}[a-z]{2,6}$/i'; + +if(!preg_match($mail_regexp,$email)) show_user_error($err_invalid_email); + +# Captcha ueberpruefen + +if($captcha_enable) +{ + $captcha_input = formdata('captcha'); + $captcha_incorrect = false; + + if(isset($_SESSION) && isset($_SESSION['captcha'])) + { + if($captcha_case) + { + if(!$captcha_input || empty($captcha_input) || $captcha_input != $_SESSION['captcha']) $captcha_incorrect = true; + } + else + { + if(!$captcha_input || empty($captcha_input) || strtolower($captcha_input) != strtolower($_SESSION['captcha'])) $captcha_incorrect = true; + } + + if($captcha_incorrect) + { + if($captcha_max) + { + if(isset($_SESSION['captcha_failed']) && $_SESSION['captcha_failed']) + { + $_SESSION['captcha_failed']++; + } + else + { + $_SESSION['captcha_failed'] = 1; + } + } + + if($captcha_max && isset($_SESSION['captcha_failed']) && $_SESSION['captcha_failed'] >= $captcha_max) + { + show_fatal($err_captcha_max); + } + else + { + show_user_error($err_captcha_incorrect); + } + } + } + else + { + show_fatal($err_captcha_session_failure); + } +} + +# Referer ueberpruefen + +if($check_referer) +{ + $referer_ok = semicolon_split($referer_ok); + + $referer_parts = parse_url($_SERVER['HTTP_REFERER']); + $referer_host = $referer_parts['host']; + + if(in_array($referer_host,$referer_ok) === false) show_fatal($err_referer_not_ok); +} + +# Zeilenumbrueche in Namen und Betreff durch Leerzeichen ersetzen + +$name = preg_replace("/\015\012|\012|\015/",' ',$name); +$subject = preg_replace("/\015\012|\012|\015/",' ',$subject); + +# Uhrzeit formatieren + +date_default_timezone_set($timezone); +$time = strftime($timeformat); + +# Header der Mail + +$header = ''; + +if($friendly_sender) +{ + if($friendly_sender == 2) + { + if(preg_match("/[\200-\377]/",$name)) + { + # Absendernamen mit Base64 codieren + + $encoded_name = base64_encode($name); + $encoded_name = wordwrap($encoded_name,56,"\015\012",1); + $encoded_name = "=?$charset?B?$encoded_name?="; + $encoded_name = str_replace("\015\012","?=\015\012 =?$charset?B?",$encoded_name); + } + else + { + # Bestimmte Zeichen im Absendernamen codieren + + $encoded_name = str_replace('"','\"',$name); + $encoded_name = str_replace('(','\\(',$encoded_name); + $encoded_name = str_replace(')','\\)',$encoded_name); + $encoded_name = '"'.$encoded_name.'"'; + } + + $header = "From: $encoded_name <$email>\n"; + } + else $header = "From: $email\n"; +} + +if($add_header) +{ + if(!$friendly_sender) $header .= "Reply-To: $email\n"; + $header .= 'Content-Type: text/plain; charset="'.$charset.'"'."\n"; + $header .= 'Content-Transfer-Encoding: 8bit'."\n"; + $header .= 'MIME-Version: 1.0'."\n"; + $header .= 'X-Mailer: Form E-Mail 3.4.1'."\n"; + $header .= 'X-Sender-IP: ['.$_SERVER['REMOTE_ADDR'].']'; +} +else $header .= "Reply-To: $email"; + +$header = preg_replace("/\015\012|\012|\015/","\n",$header); + +# Betreff mit Base64 codieren, wenn er Zeichen enthaelt, +# die nicht aus dem ASCII-Zeichensatz stammen + +if(preg_match("/[\200-\377]/",$subject)) +{ + $encoded_subject = base64_encode($subject); + $encoded_subject = wordwrap($encoded_subject,56,"\015\012",1); + $encoded_subject = "=?$charset?B?$encoded_subject?="; + $encoded_subject = str_replace("\015\012","?=\015\012 =?$charset?B?",$encoded_subject); +} +else $encoded_subject = $subject; + +# Mailtext formatieren... + +$mtpl = new Template; +$mtpl->read_file($tpl_mail); + +$mtpl->set_var('EMAIL', $email); +$mtpl->set_var('NAME', $name); +$mtpl->set_var('SUBJECT',$subject); +$mtpl->set_var('TIME', $time); + +# ... Umgebungsvariablen einfuegen + +if(isset($allowed_envs) && is_array($allowed_envs)) +{ + foreach($allowed_envs as $allowed_env) + { + if(isset($_SERVER[$allowed_env])) + { + $mtpl->set_var('ENV_'.$allowed_env,$_SERVER[$allowed_env]); + } + else + { + $mtpl->set_var('ENV_'.$allowed_env,''); + } + } +} + +$mtpl->set_var('TEXT',$text); + +$mtpl->parse(); + +$mailtext = $mtpl->get_template(); + +if($line_break) $mailtext = wordwrap($mailtext,$line_break); + +$mailtext = preg_replace("/\015\012|\012|\015/","\n",$mailtext); + +# ... und die Mail abschicken (bei einem Fehler erscheint eine Meldung) + +if($recipient && is_array($aliases) && $aliases[$recipient]) +{ + # Empfaenger mit Alias-Namen + + $mailto = $aliases[$recipient]; +} + +$mailto = semicolon_split($mailto); + +for($x=0;$xread_file($tpl_sent); + + $stpl->set_var('EMAIL', plain($email)); + $stpl->set_var('MAIL', plain($mailtext)); + $stpl->set_var('NAME', plain($name)); + $stpl->set_var('SUBJECT',plain($subject)); + $stpl->set_var('TEXT', plain($text)); + $stpl->set_var('TIME', plain($time)); + + $stpl->parse(); + + print $stpl->get_template(); +} + +# +### Ende ### + +?> \ No newline at end of file diff --git a/form-email/sent.htm b/form-email/sent.htm new file mode 100644 index 0000000..d91c0ce --- /dev/null +++ b/form-email/sent.htm @@ -0,0 +1,10 @@ + + + + + +

Die Mail wurde erfolgreich versendet.

+ +

{MAIL}

+ + \ No newline at end of file diff --git a/form-email/user_error.htm b/form-email/user_error.htm new file mode 100644 index 0000000..117101a --- /dev/null +++ b/form-email/user_error.htm @@ -0,0 +1,25 @@ + + +Fehler + + + +

Fehler

+ +

{ERROR}

+ +
+

Dein Name:
+

+

Deine E-Mail-Adresse:
+

+

Betreff für die Mail:
+

+

Dein Kommentar:
+

+ + +
+ + \ No newline at end of file diff --git a/formular.htm b/formular.htm new file mode 100644 index 0000000..1c37bfb --- /dev/null +++ b/formular.htm @@ -0,0 +1,28 @@ + + + + + + +
+

Dein Name:
+ +

+ +

Deine E-Mail-Adresse:
+

+ +

Betreff für die Mail:
+

+ +

Dein Kommentar:
+

+ +

Sicherheitscode eingeben:

+ + + +
+ + \ No newline at end of file diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..699679e --- /dev/null +++ b/license.txt @@ -0,0 +1,127 @@ + The "Artistic License" + + Preamble + +The intent of this document is to state the conditions under which a +Package may be copied, such that the Copyright Holder maintains some +semblance of artistic control over the development of the package, +while giving the users of the package the right to use and distribute +the Package in a more-or-less customary fashion, plus the right to make +reasonable modifications. + +Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes + of the Copyright Holder as specified below. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. + + "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people involved, + and so on. (You will not be required to justify it to the + Copyright Holder, but only to the computing community at large + as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications +derived from the Public Domain or from the Copyright Holder. A Package +modified in such a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided +that you insert a prominent notice in each changed file stating how and +when you changed that file, and provided that you do at least ONE of the +following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or + an equivalent medium, or placing the modifications on a major archive + site such as uunet.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict + with standard executables, which must also be provided, and provide + a separate manual page for each non-standard executable that clearly + documents how it differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or +executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where + to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) give non-standard executables non-standard names, and clearly + document the differences in manual pages (or equivalent), together + with instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this +Package. You may not charge a fee for this Package itself. However, +you may distribute this Package in aggregate with other (possibly +commercial) programs as part of a larger (possibly commercial) software +distribution provided that you do not advertise this Package as a +product of your own. You may embed this Package's interpreter within +an executable of yours (by linking); this shall be construed as a mere +form of aggregation, provided that the complete Standard Version of the +interpreter is so embedded. + +6. The scripts and library files supplied as input to or produced as +output from the programs of this Package do not automatically fall +under the copyright of this Package, but belong to whoever generated +them, and may be sold commercially, and may be aggregated with this +Package. If such scripts or library files are aggregated with this +Package via the so-called "undump" or "unexec" methods of producing a +binary executable image, then distribution of such an image shall +neither be construed as a distribution of this Package nor shall it +fall under the restrictions of Paragraphs 3 and 4, provided that you do +not represent such an executable image as a Standard Version of this +Package. + +7. C subroutines (or comparably compiled subroutines in other +languages) supplied by you and linked into this Package in order to +emulate subroutines and variables of the language defined by this +Package shall not be considered part of this Package, but are the +equivalent of input as in Paragraph 6, provided these subroutines do +not change the language in any way that would cause it to fail the +regression tests for the language. + +8. Aggregation of this Package with a commercial distribution is always +permitted provided that the use of this Package is embedded; that is, +when no overt attempt is made to make this Package's interfaces visible +to the end user of the commercial distribution. Such use shall not be +construed as a distribution of this Package. + +9. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End \ No newline at end of file diff --git a/readme.htm b/readme.htm new file mode 100644 index 0000000..cf59179 --- /dev/null +++ b/readme.htm @@ -0,0 +1,555 @@ + + + + + +ReadMe für Form E-Mail 3.4.1 + + + + + + +

ReadMe für Form E-Mail 3.4.1

+ +

+Was ist Form E-Mail?
+Einrichten von Form E-Mail
+Einstellungen
+Templates anpassen +

+ +

Was ist Form E-Mail?

+ +

Form E-Mail ist ein in PHP programmierter Form-Mailer, der speziell darauf ausgerichtet ist, ein Kontaktformular zu verarbeiten. Unter Kontaktformular verstehe ich ein Formular mit Feldern für Name und E-Mail-Adresse des Absenders, eines für den Betreff und ein weiteres für den Text der Mail.
+Auf diese Weise müssen Sie zum Beispiel nicht überall auf Ihrer Homepage Ihre E-Mail-Adresse angeben und sie so nicht der Gefahr aussetzen, ein Opfer von Spammern zu werden.

+ +

Nach oben

+ +

Einrichten von Form E-Mail

+ +

Sie brauchen als erstes ein HTML-Formular. Dieses muss mindestens diese Felder enthalten:

+ + + + + + + + + + + + + + + + + + +
FeldnameZweck
emailE-Mail-Adresse des Absenders
nameName des Absenders
textText der E-Mail
+ +

Sie können außerdem noch ein Feld namens subject anlegen. Hier kann ein Betreff für die Mail eingegeben werden. Wenn Sie auf dieses Feld verzichten, erhalten die E-Mails automatisch den in $default_subject definierten Betreff (s.u.).
+Weiterhin ist noch ein Feld namens recipient möglich. Dieses Feld enthält einen Alias-Empfänger. Wie das funktioniert, können Sie bei der Beschreibung der Einstellung $aliases lesen.

+ +

Wenn Sie Captchas (zufällige Zeichenfolgen, die der Benutzer vor dem Absenden des Formulars eingeben muss, um Spambots auszuschließen) benutzen wollen (siehe unten), müssen Sie im Formular die Datei captcha.php als Bild einbinden (<img>-Tag). Bedenken Sie, dass Sie diese Datei auch in den Templates einbinden müssen!

+ +

Das Formular muss noch die Daten an die Datei mailer.php (oder wie Sie die Datei genannt haben) senden. Ob Sie dafür GET oder POST verwenden, ist egal (es sei denn, Sie haben Form E-Mail so eingestellt, dass es nur POST erlaubt).

+ +

Ein beispielhaftes Formular finden Sie in der Datei formular.htm.

+ +

Die Adresse, an der die mit Form E-Mail erzeugte Mail gesendet werden soll, wird in der Datei config.php festgelegt. Öffnen Sie die Datei mit einem beliebigen Editor und suchen Sie nach dieser Zeile:

+ +

$mailto = '';

+ +

Geben Sie zwischen den einfachen Anführungszeichen die Adresse an, an die die Mail gehen soll. Wenn die Mail an mehrere Empfänger gehen soll, so trennen Sie die einzelnen E-Mail-Adressen ganz einfach durch Semikolons.

+ +

Das war es im Grunde genommen. Aber Form E-Mail lässt sich noch weiter konfigurieren. Mehr dazu finden Sie in den nächsten beiden Abschnitten.

+ +

Nach oben

+ +

Einstellungen

+ +

Empfänger

+ + + + + + + + + + + + + + +
EinstellungBeschreibung
$mailtosiehe oben
$aliasesHier können Sie eine Alias-Namen für Empfänger angeben. Soll einem Alias mehrere Empfänger zugeordnet werden, gilt dasselbe wie für $mailto.
+Die Aliase werden mit Hilfe eines assoziativen PHP-Arrays definiert. Da es wohl einige gibt, die von so etwas keine Ahnung haben und ich es nicht gut erklären kann, hier ein Beispiel:

+array('info' => 'info@IhreDomain.xyz', 'support' => 'support@IhreDomain.xyz',
+      'alle' => 'info@IhreDomain.xyz; support@IhreDomain.xyz')
+ +

Allgemeines

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EinstellungBeschreibung
$default_subjectDer Standard-Betreff. Dieser wird verwendet, wenn der Benutzer keinen Betreff für seine Mail angegeben hat.
$friendly_senderWenn 1, wird die E-Mail-Adresse des Autors der Mail als Absender angegeben. Bei 0 erscheint das, was der Server als Absender einträgt. Wenn 2, wird zusätzlich noch der Name als Absender angegeben.
+Bitte setzen Sie diese Option nur auf 0, wenn es wirklich sein muss!
$line_breakLegt fest, ab wievielen Zeichen ein automatischer Zeilenumbruch durchgeführt werden soll (0 für keine Zeilenumbrüche).
$add_headerLegt beim Wert 1 fest, ob Form E-Mail Informationen zur Zeichencodierung, MIME-Version usw. in den Mail-Header schreiben soll.
+Bitte setzen Sie diese Option nur auf 0, wenn es wirklich sein muss!
$timeformatLegt das Aussehen der Zeitangaben der Mail fest. Was hier alles möglich ist, finden Sie im PHP-Handbuch bei der Beschreibung zu strftime().
+Beachten Sie bitte, dass bei neueren PHP-Versionen, trotz deutscher Spracheinstellungen, die Namen von Wochentagen und Monaten englisch dargestellt werden. Es handelt sich hierbei aber um ein allgemeines Problem.
$return_urlGeben Sie hier die URL einer Seite an, auf die nach dem erfolgreichen Versenden einer Mail weitergeleitet werden soll. Wenn Sie hier nichts angeben, wird eine per Template formatierte Seite angezeigt.
+Achtung: Benutzen Sie hier nach Möglichkeit absolute URLs! Ich habe zwar etwas eingebaut, was hier relative URLs in absolute umwandelt, um dem HTTP-Standard gerecht zu werden, aber ich garantiere nicht, dass diese Umwandlung immer einwandfrei funktioniert. Seien Sie bei relativen URLs also sehr vorsichtig und verwenden Sie im Fehlerfall absolute.
$no_tldSetzen Sie diese Option auf 1, wenn der Absender auch E-Mail-Adressen ohne Top-Level-Domain angeben darf.
$allowed_envsGeben Sie hier die Server-Umgebungsvariablen, die im Mailtext angezeigt werden dürfen, als normales PHP-Array an (siehe auch die Erläuterungen zur Template-Datei mail.txt).
+Beispiel: array('HTTP_USER_AGENT','REMOTE_ADDR')
$charsetGeben Sie hier den Zeichensatz, der für die E-Mail verwendet werden soll, an.
$timezoneGeben Sie hier Ihre Zeitzone an (dies ist bei neueren PHP-Versionen nötig, da ansonsten eine Fehlermeldung auftreten kann).
+ +

Längenüberprüfungen

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EinstellungBeschreibung
$name_minGeben Sie hier an, wie lang der vom Benutzer eingebene Name mindestens sein muss (0 = beliebig lang)
$subject_minGeben Sie hier an, wie lang der vom Benutzer eingebene Betreff mindestens sein muss (0 = beliebig lang)
$text_minGeben Sie hier an, wie lang der vom Benutzer eingebene Text mindestens sein muss (0 = beliebig lang)
$name_maxGeben Sie hier an, wie lang der vom Benutzer eingebene Name höchstens sein darf (0 = beliebig lang)
$subject_maxGeben Sie hier an, wie lang der vom Benutzer eingebene Betreff höchstens sein darf (0 = beliebig lang)
$text_maxGeben Sie hier an, wie lang der vom Benutzer eingebene Text höchstens sein darf (0 = beliebig lang)
+ +

Sicherheit

+ + + + + + + + + + + + + + + + + + +
EinstellungBeschreibung
$only_postWenn > 0, kann Form E-Mail nur mit der HTTP-Zugriffsmethode POST aufgerufen werden
$check_refererWenn > 0, überprüft Form E-Mail die Host-Angabe im HTTP-Referer. Das ist nützlich, wenn Sie verhindern wollen, dass irgendjemand Ihr Script für sich ausnutzt.
$referer_okGeben Sie hier die Hosts an, von denen Form E-Mail aus aufgerufen werden darf (zum Beispiel www.IhreDomain.xyz). Trennen Sie mehrere Hosts durch Semikolons.
+Achtung: Mit einer Referer-Prüfung kann man zwar unbedarfte Anwender abschrecken, aber wirklich zuverlässig ist diese Methode nicht, da sich der Referer fälschen lässt oder auch komplett fehlen kann.
+ +

Captchas

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EinstellungBeschreibung
$captcha_enableWenn > 0, wird die Captcha-Überprüfung aktiviert.
$captcha_caseWenn 1, wird bei Captchas auf Groß- und Kleinschreibung geachtet. Beachten Sie bitte, dass bei deaktiverter Einstellung im Captcha selbst immer noch Groß- und Kleinbuchstaben angezeigt werden - lediglich bei der Auswertung wird die Groß- und Kleinschreibung nicht berücksichtigt.
$captcha_maxWenn > 0, ist nur eine bestimmte Anzahl von Fehlversuchen bei der Eingabe des Captcha-Texts möglich.
$captcha_lengthGeben Sie hier die Länge des Captcha-Textes an.
$captcha_widthGeben Sie hier die Breite des Captcha-Bilds an (in Pixeln). Dieser Wert wird überschrieben, wenn $captcha_image_bg gesetzt ist.
$captcha_heightGeben Sie hier die Höhe des Captcha-Bilds an (in Pixeln). Dieser Wert wird überschrieben, wenn $captcha_image_bg gesetzt ist.
$captcha_angleGeben Sie hier den Winkel-Bereich an, in dem der Captcha-Text ausgerichtet werden soll. Es wird ein zufälliger Wert aus diesem Bereich ausgewählt.
$captcha_xGeben Sie hier den Bereich an, in dem sich der horizontale Startpunkt des Captcha-Texts befinden soll. Es wird ein zufälliger Wert aus diesem Bereich ausgewählt.
$captcha_yGeben Sie hier den Bereich an, in dem sich der vertikale Startpunkt des Captcha-Texts befinden soll. Es wird ein zufälliger Wert aus diesem Bereich ausgewählt.
$captcha_possibleGeben Sie hier die möglichen Zeichen des Captcha-Texts an. Standardmäßig vorgegeben ist 'ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.
$captcha_fontSchriftart für den Captcha-Text. Geben Sie hier den Pfad zu einer .ttf-Datei an. Standardmäßig ist hier die mitgelieferte XFILES.TTF angegeben.
$captcha_font_sizeGeben Sie hier die Schriftgröße des Captcha-Textes an.
$captcha_linesWenn > 0, werden zufällige Störlinien in das Captcha-Bild eingefügt.
$captcha_color_bgGeben Sie hier die RGB-Werte (in Form eines PHP-Arrays) der Hintergrundfarbe des Captcha-Bilds an.
$captcha_color_textGeben Sie hier die RGB-Werte (in Form eines PHP-Arrays) der Textfarbe des Captcha-Bilds an.
$captcha_image_bgHier können Sie, wenn Sie möchten, ein Hintergrundbild für das Captcha-Bild angeben. Diese Option überschreibt $captcha_length und $captcha_height mit den Angaben aus dem Bild.
+ +

Fehlermeldungen

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EinstellungBeschreibung
$err_nothingDer Benutzer hat überhaupt nichts eingegeben
$err_no_nameDer Benutzer hat keinen Namen angegeben
$err_no_emailDer Benutzer hat keine E-Mail-Adresse angegeben
$err_invalid_emailDer Benutzer hat eine von der Syntax her ungültige E-Mail-Adresse angegeben
$err_no_textDer Benutzer hat keinen Text angegeben
$err_name_shortDer vom Benutzer eingegebene Name ist nicht lang genug
$err_subject_shortDer vom Benutzer eingegebene Betreff ist nicht lang genug
$err_text_shortDer vom Benutzer eingegebene Text ist nicht lang genug
$err_send_errorDie Mail konnte nicht versendet werden
$err_only_postForm E-Mail darf nur mit POST aufgerufen werden
$err_referer_not_okDer im HTTP-Referer angegebene Host darf keine Mails über das Script senden
$err_captcha_incorrectDer vom Benutzer eingegebene Captcha-Code ist nicht korrekt
$err_captcha_maxDer Benutzer hat den Captcha-Code zu oft falsch eingegeben
$err_captcha_disabledWird angezeigt, wenn captcha.php aufgerufen wird und Captchas eigentlich deaktiviert sind.
$err_captcha_session_failureWird angezeigt, wenn keine Session-Variablen gefunden werden konnten.
+ +

Pfade zu Templates

+ + + + + + + + + + + + + + + + + + + + + + +
EinstellungBeschreibung
$tpl_mailTemplate für die Mail
$tpl_sentDie Mail wurde erfolgreich versendet
$tpl_user_errorDer Benutzer hat etwas falsch gemacht
$tpl_fatalEs ist ein Fehler aufgetreten, den der Benutzer nicht mehr beheben kann
+ +

Nach oben

+ +

Templates anpassen

+ +

Die Anpassung der Ausgaben von Form E-Mail erfolgt über Templates (englisch für "Vorlagen"). Jede der Templates enthält Variablen der Form {VARIABLENNAME}, die dann von Form E-Mail durch entsprechende Daten ersetzt werden.

+ +

Hier nun eine Auflistung der einzelnen Templates und der verwendeten Variablen (ohne geschweifte Klammern):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
DateiZweckVerwendete Variablen
fatal.htmWird angezeigt, wenn ein Fehler aufgetreten ist, den der Benutzer nicht mehr beheben kann +
    +
  • ERROR
    +Die Fehlermeldung
  • +
+
mail.txtLegt das Aussehen der Mail fest +
    +
  • EMAIL
    +Die eingegebene E-Mail-Adresse
  • +
  • NAME
    +Der eingegebene Name
  • +
  • SUBJECT
    +Der Betreff der Mail
  • +
  • TEXT
    +Der eingegebene Mail-Text
  • +
  • TIME
    +Die formatierte Zeitangabe
  • +
+ +Zusätzlich können Sie hier durch Variablen, die mit ENV_ beginnen, Server-Umgebungsvariablen im Text einfügen (siehe auch Konfigurationsvariable $allowed_envs. +
sent.htmWird angezeigt, wenn die Mail erfolgreich versendet wurde +
    +
  • EMAIL
    +Die eingegebene E-Mail-Adresse
  • +
  • MAIL
    +Die komplette Mail, so wie sie versendet wurde (natürlich ohne Header)
  • +
  • NAME
    +Der eingegebene Name
  • +
  • SUBJECT
    +Der Betreff der Mail
  • +
  • TEXT
    +Der eingegebene Mail-Text
  • +
  • TIME
    +Die formatierte Zeitangabe
  • +
+
user_error.htmWird angezeigt, wenn der Benutzer einen Fehler gemacht hat, der sich aber noch beheben lässt (zum Beispiel wenn ein Formularfeld nicht ausgefüllt wurde) +
    +
  • EMAIL
    +Die eingegebene E-Mail-Adresse
  • +
  • ERROR
    +Die Fehlermeldung
  • +
  • NAME
    +Der eingegebene Name
  • +
  • SUBJECT
    +Der Betreff der Mail
  • +
  • TEXT
    +Der eingegebene Mail-Text
  • +
+ +Zusätzlich ist es möglich, einen Bereich, der nur angezeigt werden soll, wenn Captchas aktiviert sind, anzuzeigen, indem Sie diesen in folgenden Block einschließen (der {ELSE}-Teil ist optional):
+
+{IF CAPTCHA}Captchas sind aktiviert{ELSE}Captchas sind nicht aktiviert{ENDIF} +
+ +

 

+ +
+ +

Versionshistorie

+ +
+ +

© 2002-2011 Patrick Canterino

+ + + + + + + + + + +
Homepage:http://www.patshaping.de/
E-Mail:patrick@patshaping.de
+ + \ No newline at end of file -- 2.34.1