Im Formular muss eine E-Mail-Adresse hinterlegt werden. Diese soll dann auch nach Möglichkeit in der versandten Email in der Zeile "VON" auftauchen. So dass der Empfänger (hier info@hotel-schwanenwik.de) gleich darauf antworten kann.******** Hier der Code der Perl-Konfigurationsdatei: ****************
# Konfigurationsdatei
# Formular URL
$formurl = 'http://www.hotel-schwanenwik.de/deutsch/kontakt.html';
# Empfaenger Name
$empfaenger = 'Albert Russnak';
# Empfaenger Mail
$empfaengermail = 'info@hotel-schwanenwik.de';
# Weiterleitungs URL
$forwardurl = 'http://www.hotel-schwanenwik.de/deutsch/affirm.html';
# Weiterleitungs zeit
$forwardtime = "1";
# Floodsperre
$noflood = "5";
1;
*********** Hier der Code der CGI-Datei: ****
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
require "mailsetup.pl";
&formparser;
# ----- 20-03-2006, kpSE - AUSKOMMENTIERT ------
#foreach ("/usr/sbin/sendmail -t","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/var/qmail/bin/sendmail","/usr/bin/sendmail.restart","/etc/sendmail.cf","/etc/sendmail.cw","/usr/man/man8/sendmail.8","/var/qmail/bin/qmail-inject"){
#if(-e $_ && -X _){
#$mailprogamm = $_;
#last;
#}
#}
# ----------------------------------------------
###################################################
# alle Formfelder
$Name = &maildatensaver($FORM{'Name'});
$Vorname = &maildatensaver($FORM{'Vorname'});
$Strasse = &maildatensaver($FORM{'Strasse'}); # 20-03-2006, kpSE - neu hinzugefügt
$PLZ = &maildatensaver($FORM{'PLZ'}); # 20-03-2006, kpSE - neu hinzugefügt
$Ort = &maildatensaver($FORM{'Ort'}); # 20-03-2006, kpSE - neu hinzugefügt
$Telefon = &maildatensaver($FORM{'Telefon'});
$Email = &maildatensaver($FORM{'E_Mail'});
$Anfrage = &maildatensaver($FORM{'AnBu'});
$Buchung = &maildatensaver($FORM{'AnBu'});
$Anreise = &maildatensaver($FORM{'Anreise'});
$Abreise = &maildatensaver($FORM{'Abreise'});
$uebernachtungen = &maildatensaver($FORM{'Anzahl_Uebernachtungen'});
$Zimmer = &maildatensaver($FORM{'Anzahl_Zimmer'});
$Zimmerart = &maildatensaver($FORM{'Zimmerart'});
$Nachricht = &maildatensaver($FORM{'Nachricht'});
###################################################
# Fehlerbehandlung Anfang
$fehlermeldung = "" ;
$fehler_gefunden = "" ;
#--------CHECK fuer: Name-----------------------------
$errormeldung = "<li>Das Feld \"Name\" wurde nicht oder nicht mit korrekten Daten ausgefüllt.\n" ;
if ($Name eq '') {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Vorname-----------------------------
$errormeldung = "<li>Das Feld \"Vorname\" darf nur Buchstaben von A-Z und a-z beinhalten.\n" ;
if ($Vorname =~ /[^a-zA-Z]/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
# ------- 20-03-2006, kpSE - NEU hinzugefügt ---------
#--------CHECK fuer: Strasse-----------------------------
#$errormeldung = "<li>Das Feld \"Vorname\" darf nur Buchstaben von A-Z und a-z beinhalten.\n" ;
#if ($Vorname =~ /[^a-zA-Z]/) {
#$fehlermeldung = $fehlermeldung.$errormeldung ;
#$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: PLZ-----------------------------
$errormeldung = "<li>Das Feld \"PLZ\" darf nur Zahlen von 0 - 9 beinhalten.\n" ;
if ($PLZ =~ /[^0-9]/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Ort-----------------------------
$errormeldung = "<li>Das Feld \"Ort\" darf nur Buchstaben von A-Z und a-z beinhalten.\n" ;
if ($Vorname =~ /[^a-zA-Z]/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
# ------- ENDE - 20-03-2006, kpSE - NEU hinzugefügt ---------
#--------CHECK fuer: Telefon-----------------------------
$errormeldung = "<li>Das Feld \"Telefon\" darf nur Zahlen von 0 - 9 beinhalten.\n" ;
if ($Telefon =~ /[^0-9]/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Email-----------------------------
$errormeldung = "<li>Das Feld \"Email\" muss eine gültige E-Mail Adresse beinhalten.\n";
if ($Email !~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Anfrage-----------------------------
#$errormeldung = "<li>Bitte wählen Sie beim Feld \"Anfrage\" eine Option.\n" ;
#if ($Anfrage eq '') {
#$fehlermeldung = $fehlermeldung.$errormeldung ;
#$fehler_gefunden = 1 ;
#}
#-------------------------------------
#--------CHECK fuer: Buchung-----------------------------
#$errormeldung = "<li>Bitte wählen Sie beim Feld \"Buchung\" eine Option.\n" ;
#if ($Buchung eq '') {
#$fehlermeldung = $fehlermeldung.$errormeldung ;
#$fehler_gefunden = 1 ;
#}
#-------------------------------------
#--------CHECK fuer: Anzahl Zimmer-----------------------------
$errormeldung = "<li>Das Feld \"Anzahl Zimmer\" darf nur Zahlen von 0 - 9 beinhalten.\n" ;
if ($Zimmer =~ /[^0-9]/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Zimmerart-----------------------------
$errormeldung = "<li>Das Feld \"Zimmerart\" darf nur Buchstaben von A-Z und a-z beinhalten.\n" ;
if ($Zimmerart =~ /[^a-zA-Z]/) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
if ($fehler_gefunden) {
&fehlerausgabe;
exit;
}
# Fehlerbehandlung Ende
###################################################
&floodcheck;
&datumsroutine;
&mailsenden;
&bestaetigung;
sub mailsenden {
# Mail senden
# ------- 20-03-2006, kpSE - VARIBALEN Strasse, PLZ u. Ort hinzugefügt ------
my $mailbodykontakt = <<MBT;
$Name
$Vorname
$Strasse
$PLZ
$Ort
$Telefon
$Email
$Anfrage
$Buchung
$Anreise
$Abreise
$uebernachtungen
$Zimmer
$Zimmerart
$Nachricht
MBT
if (!$email) {
$email = $empfaengermail;
}
if (!$betreff) {
$betreff = "Mail von Ihrem Feedbackformular";
}
open (MAIL, "| /usr/sbin/sendmail -t") || die $!;
#open (MAIL, "|$mailprogamm") || die $!;
print MAIL "To: $empfaengermail ($empfaenger)\n";
print MAIL "From: $email \n";
print MAIL "Subject: $betreff\n\n";
print MAIL $mailbodykontakt;
print MAIL "\n\n";
print MAIL "Gesendet am: $datumlang\n";
close(MAIL);
}
###################################################
sub bestaetigung {
print "Content-type: text/html\n\n";
$meta = qq~<meta http-equiv="refresh" content="$forwardtime; URL=$forwardurl">~;
$titeltext = "Nachricht erfolgreich versendet";
$statustext = qq~<b>Vielen Dank für Ihre Nachricht.</b><br><br>
Sie werden in $forwardtime Sekunden zur Hauptseite weitergeleitet.
Sollte dies nicht funktionieren klicken Sie bitte untenstehen Link.<br><br>
<div align="center"><a href="$forwardurl">Zurück zur Hauptseite</a></div>
<br><br>
~;
print &tparser("header.html");
print &tparser("mailstatus.html");
print &tparser("footer.html");
exit;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Fehlerausgabe
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub fehlerausgabe {
print "Content-type: text/html\n\n";
$meta = '';
$titeltext = "Fehler festgestellt!";
$statustext = qq~<b>Beim ausfüllen haben Sie folgendes vergessen:</b>
<ol>
$fehlermeldung
</ol><br><br>
<div align="center">Bitte gehen Sie « <a href="javascript:history.go(-1)">zurück</a></div>
~;
print &tparser("header.html");
print &tparser("mailstatus.html");
print &tparser("footer.html");
exit;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Formdatenparser
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub formparser {
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $input);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Templateroutine
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub tparser {
my $templatedatei = shift;
my $OUTPUT;
local($/);
open (FILE, "<$templatedatei") or die "Kann Template $templatedatei nicht oeffnen $!\n";
$OUTPUT = <FILE>;
close(FILE);
# Skalarwerte ersetzen
$OUTPUT =~ s/<__\$([\w\-]+)__>/${$1}/g;
# Hashwerte ersetzen
$OUTPUT =~ s/<__\%([\w\-]+)\{([\w\-]+)\}__>/${$1}{$2}/g;
# Arraywerte ersetzen
$OUTPUT =~ s/<__\$([\w\-]+)\[([\w\-]+)\]__>/${$1}[$2]/g;
# Werte ersetzen in der Form $lang{user}
$OUTPUT =~ s/<__\$([\w\-]+)\{([\w\-]+)\}__>/${$1}{$2}/g;
# Werte ersetzen in der Form $input{'action'} oder $lang{'hallo du'}
$OUTPUT =~ s/<__\$([\w\-]+)\{'([\w\- ]+)\'}__>/${$1}{$2}/g;
return $OUTPUT;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Datumsroutine
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub datumsroutine {
@tagekurz = ('So','Mo','Di','Mi','Do','Fr','Sa');
@monatekurz = ('Jan.','Feb.','März','Apr.','Mai.','Jun.','Jul.','Aug.','Sept.','Okt.','Nov.','Dez.');
@tage = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
@monate = ('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
($sec, $min, $stunde, $mtag, $mon, $jahr, $tag, $nr_tag, $isdst) = localtime(time);
$monat = $mon+1;
if($monat < 10) { $monat = "0$monat"; }
if($stunde < 10) { $stunde = "0$stunde"; }
if ($min < 10) { $min = "0$min"; }
if ($sec < 10) { $sec = "0$sec"; }
$jahr = 1900 + $jahr;
# Ausgabe z.B. Sonntag, 14. Juli , 2002 um 17:39:43 Uhr
$datumlang = " $tage[$tag], $mtag. $monate[$mon] $jahr um $stunde:$min:$sec Uhr";
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Floodsperre
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub floodcheck {
$wartezeit = "1.0";
$sperrlistenlaenge = 15;
my $IP_Nummer = $ENV{'REMOTE_ADDR'};
my $aktionszeit = time();
open(ZEITLIMIT, "floodsperre.dat");
@letzte_eintraege = <ZEITLIMIT>;
close(ZEITLIMIT);
foreach (@letzte_eintraege) {
if (/^$IP_Nummer/){
($junk,$letzte_aktionszeit) = split(/\|!!\|/,$_);
chomp($letzte_aktionszeit);
last;
}
} # ende foreach
$wartezeit *= $noflood; # zeit in sek bis neu gepostet werden darf
$floodfehler = 0;
if ( int(($aktionszeit - $letzte_aktionszeit) < $wartezeit)){
$floodfehler = 1;
# Fehlerpruefung
$fehlermeldung = "" ;
$fehler_gefunden = "" ;
# -----------------------------------------------------------------------
$errormeldung = "<li>Sie müssen $wartezeit Sekunden warten bis Sie wieder eine E-Mail absenden können.\n" ;
if ($floodfehler) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
# -----------------------------------------------------------------------
if ($fehler_gefunden) {
&fehlerausgabe;}
exit;
}
else {
if (unshift(@letzte_eintraege, "$IP_Nummer|!!|$aktionszeit\n") > $sperrlistenlaenge){
$#letzte_eintraege = $sperrlistenlaenge;
}
open(ZEITLIMIT, ">floodsperre.dat");
print ZEITLIMIT @letzte_eintraege;
close(ZEITLIMIT);
}
return 1;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Maildaten vorbereiten
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub maildatensaver {
$_[0] =~ s/^\s+//;
$_[0] =~ s/\s+$//;
$_[0] =~ s/`//g;
$_[0] =~ s/\r//g;
$_[0] =~ s/\|//g;
$_[0] =~ s/\n/\n/ig;
return($_[0]);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
Datum: 25.03.2006-12:46
