|
 |
|
| Autor |
Nachricht |
ReneSachse Neuer [User]

Anmeldung: 21.08.08 Beiträge: 2 Wohnort: Altenberge ...
|
Verfasst am: 21.08.2008, 17:56 Titel: Problem mit mailform.cgi / Kontaktformular |
|
|
Hallo,
ich möchte ein Kontaktformular auf meiner Webseite einbinden (http://www.grogners-restaurant.de -> Kontakt).
Dazu möchte ich das CGI-Tool Mailform nutzen. Leider bekomme ich immer "internal server error" Meldungen, wenn ich das Formular ausführen möchte.
Ich habe die Pfadangaben in der Datei mailform.pl richtig gesetzt, alle Dateien des Scripts in mein CGI-BIN Verzeichnis im ASCI-Modus hochgeladen und die Rechte auf 775 gesetzt. Auch das Perl-Verzeichnis ist richtig angegeben (#!/usr/bin/perl).
Ich kann leider den Fehler nicht finden.
Vielleicht hat jemand einen Tipp.
Hier die HTML-Datei (Ausschnitt) mit dem Kontaktformular:
kontakt.html
| Code: | <form action="http://www.grogners-restaurant.de/cgi-bin/form/mailform.cgi" method="POST">
<div align="left">
<table cellspacing="1" cellpadding="0" border="0" class="tb" width="550">
<tr>
<td class="tc" colspan="2">Bitte füllen Sie alle Felder aus<br><br></td>
</tr>
<tr>
<td class="tc" width="50%">Ihr Name </td>
<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="Name" size="30" maxlength="50"></td>
</tr>
<tr>
<td class="tc" width="50%">Ihr Vorname </td>
<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="IhrVorname" size="30" maxlength="50"></td>
</tr>
<tr>
<td class="tc" width="50%">Ihre E-Mail Adresse </td>
<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="email" size="30" maxlength="50"></td>
</tr>
<tr>
<td class="tc" width="50%">Telefon </td>
<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="Telefon" size="30" maxlength="50"></td>
</tr>
<tr>
<td class="tc" width="50%" valign="top">Ihre Nachricht an uns </td>
<td class="tc" width="50%" valign="top"><textarea name="Nachricht" class="mb" style="width: 250px; height: 80px;" cols="30" rows="5"></textarea><br><br></td>
</tr>
<tr>
<td class="ttop" colspan="2" align="center"><input style="width: 100px;" class="los" type="submit" value="Absenden"></td>
</tr>
</table>
</div>
</form> |
Hier die mail-Setup-Datei aus dem Verzeichnis cgi-bin/form
mailsetup.pl
| Code: | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Konfigurationsdatei
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Formular URL
$formurl = 'http://www.grogners-restaurant.de/cgi-bin/form';
# Empfaenger Name
$empfaenger = 'Jos Luhukay';
# Empfaenger Mail
$empfaengermail = 'kontakt@grogners-restaurant.de';
# Weiterleitungs URL
$forwardurl = 'http://www.grogners-restaurant.de/danke.html';
# Weiterleitungs zeit
$forwardtime = "0";
# Floodsperre
$noflood = "100";
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
1;
|
Und zu letzt die Mailform-CGI-Datei ebenfalls aus dem Verzeichnis cgi-bin/form
mailform.cgi
| Code: | #!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
require "mailsetup.pl";
&formparser;
foreach ("/usr/sbin/sendmail","/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'});
$IhrVorname = &maildatensaver($FORM{'IhrVorname'});
$email = &maildatensaver($FORM{'email'});
$Telefon = &maildatensaver($FORM{'Telefon'});
$Nachricht = &maildatensaver($FORM{'Nachricht'});
###################################################
# Fehlerbehandlung Anfang
$fehlermeldung = "" ;
$fehler_gefunden = "" ;
#--------CHECK fuer: Ihr Name-----------------------------
$errormeldung = "<li>Das Feld \"Ihr 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\" wurde nicht oder nicht mit korrekten Daten ausgefüllt.\n" ;
if ($IhrVorname eq '') {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Ihre E-Mail Adresse-----------------------------
$errormeldung = "<li>Das Feld \"Ihre E-Mail Adresse\" 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: Ich interessiere mich für-----------------------------
$errormeldung = "<li>Das Feld \"Telefonnummer\" wurde nicht oder nicht mit korrekten Daten ausgefüllt.\n" ;
if ($Telefon eq '') {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
#--------CHECK fuer: Ihre Nachricht an uns-----------------------------
$errormeldung = "<li>Das Feld \"Ihre Nachricht an uns\" wurde nicht oder nicht mit korrekten Daten ausgefüllt.\n" ;
if ($Nachricht eq '') {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
#-------------------------------------
if ($fehler_gefunden) {
&fehlerausgabe;
exit;
}
# Fehlerbehandlung Ende
###################################################
&floodcheck;
&datumsroutine;
&mailsenden;
&bestaetigung;
sub mailsenden {
# Mail senden
my $mailbodykontakt = <<MBT;
Hallo Grogners Restaurant-Team,
Sie haben eine neue Kontaktanfrage über Ihre Homepage www.grogners-restaurant.de erhalten.
Der Abesender hat folgende Informationen hinterlassen:
Vorname: $IhrVorname
Name: $Name
E-Mail: $email
Telefon: $Telefon
Nachricht: $Nachricht
MBT
if (!$email) {
$email = $empfaengermail;
}
if (!$betreff) {
$betreff = "Mail von Ihrem Feedbackformular";
}
open (MAIL, "|$mailprogamm -t") || 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]);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # :( :( |
|
|
| Nach oben |
|
 |
placido Helfer [User]

Anmeldung: 16.10.07 Beiträge: 194
|
Verfasst am: 22.08.2008, 19:40 Titel: |
|
|
Mh.. wieso benutzt du kein PHP Script zum versenden eines Kontaktformulars?
Wenns auf die Weise wie du es machst nicht funktioniert kann ich dir eine andere Methode anbieten  _________________ Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele
|
|
| Nach oben |
|
 |
ReneSachse Neuer [User]

Anmeldung: 21.08.08 Beiträge: 2 Wohnort: Altenberge ...
|
Verfasst am: 24.08.2008, 08:51 Titel: |
|
|
Okay, dann biete mir doch mal eine bessere Variante an 
|
|
| Nach oben |
|
 |
|
|
 |
|
Alle Zeiten sind GMT + 1 Stunde
|
| Seite 1 von 1 |
|  |