perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 04:09

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl/CGI: Scripts des Perl-Archiv zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragFormular-Email
Seitenanfang
Aktuelle Situation:
Ich habe ein Kontaktformular, dass aus aus mehreren Eingabefeldern (Text- und Radio-Buttons) besteht. Die in dem Formular eingegebenen Daten werden per Email durch ein CGI-Skript an eine Email-Adresse (z. B. info@...de) geleitet. Die Email(s) werden mit dem Email-Programm von Netscape abgerufen.

Problemstellung:
Die von dem Formular gesendeten Emails, die bei Netscape ankommen enthalten in der Zeile "AN:" und "VON:" jeweils die gleiche EMail-Adresse (z. B. info@...de). Das heisst, wenn ich auf die Email antworten möchte, würde ich mir selber eine Nachricht senden (bei einer Beantwortung der EMail würde in der Zeile "AN:" wieder info@...de stehen).

Gibt es eine Möglichkeit (wenn machbar per CGI/ Perl-Code), in der Zeile "VON:" die Email-Adresse aus dem Kontakformular einzutragen (z. B. test@...de), so dass bei einer Beantwortung der Email in Netscape gleich die richtige Empfangsemailadr. enthalten ist (Es muss also in der Zeile "AN:" statt info@...de z. B. test@...de stehen)?

Vielen Dank für Eure Hilfe!!!

Datum: 22.03.2006-13:12

Beitragre: Formular-Email
Seitenanfang
Da muss ja dann ein Fehler im CGI Skript vorliegen. Ich schätze mal dass die Person, die Kontakt wünscht, im Formular seine eMail Adresse angeben muss. Und diese wird vor dem Versenden nicht korrekt im VON Header eingetragen.

Poste doch mal den relevanten Code.

-uw

Datum: 24.03.2006-15:40

Beitragre: Formular-Email
Seitenanfang
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

Beitragre: Formular-Email
Seitenanfang
Kann mir jemand zu meinem Problem helfen und mir Tips geben bzw. mir mitteilen wo der Fehler liegt. Es wäre gut wenn ich möglichst bald eine Antwort bekäme, da das Problem etwas eilt! Den Quellcode habe ich bei meiner vorigen Mitteilung gehostet.
Vielen Dank!!!

Datum: 29.03.2006-11:22

-






-
-