ich habe zur Zeit folgendes vorgefertigtes Script. Es funktioniert soweit einwandfrei. Ich möchte nun, dass die eingegebenen Formulardaten nicht nur per Mail bei mir ankommen, sondern auch noch einmal auf der "Dankeseite" erscheinen, welcher der User dann sieht. In der SUB "return_html" habe ich schon einmal engefangen und testweise eine Variable ausgegeben. Dort sollen nun die Daten aus dem Formular ausgegeben werden. Also jeweils der Feldname und der Eintrag (z.B. "Name: Nicole") Ich weiß jedoch nicht, wie ich darauf zugreife :( Habe sonst keine Erfahrungen mit Perl, vll. kann mir ja jemand einen Tipp geben??? Danke
#!/usr/bin/perl -w
############################################################################
#
# (c) Markus Wolf, 1998-2003
#
############################################################################
#
# mailer.cgi
# COPYRIGHT NOTICE
# Copyright 2002 Markus Wolf
# All Rights Reserved.
#
# EMail : support@perlunity.de
# URL : http://www.perlunity.de
#
# mailer.cgi darf von jedermann kostenlos benutzt und ge?ndert werden,
# solange dieser Copyright-Verweis und die restlichen Kommentare erhalten
# bleiben. Mit dem Einsatz dieses Skripts akzeptieren Sie, da? Markus Wolf
# von jeglicher Haftung und Gew?hrleistung hinsichtlich des Einsatzes
# befreit ist.
#
# Der Verkauf und die Verbreitung dieses Skripts, auch in modifizierter
# Form, ist ohne vorherige Absprache ausdr?cklich untersagt. Mit anderen
# Worten: Bitte fragen Sie mich, bevor Sie versuchen, mit meinem Skript
# Geld zu verdienen.
#
# Um dieses Skript ?ber das Internet oder irgendein anderes Medium
# weiterzuverbreiten, ben?tigen Sie vorher meine Erlaubnis. In jeden
# Fall m?ssen der Copyright-Verweis und die restlichen Kommentare
# erhalten bleiben.
#
########################################################################################################################################################
# Systemeinstellungen
############################################################################
#Wechsel in das aktuelle Verzeichnis
$0 =~ /^(.*)[\/\\].*/ && chdir ($1) ;
#Module
use lib "libs/" ;
use strict ;
use CGI::Carp qw(fatalsToBrowser) ;
use Tie::IxHash ;
use Net::SMTP ;
############################################################################
# Variablendefinition (m?ssen alle angepa?t werden)
############################################################################
#Sendmail-Pfad (Unix)
my $mailprog = "/usr/sbin/sendmail" ;
#SMTP-Server (Windows) - nur eintragen, wenn ?ber smtp verschickt werden
my $smtpserver = "" ;
#SMTP-Debugging (0-nein / 1-ja)
my $smtpdebug = 0 ;
#SICHERHEIT : Hostnamen die Mail empfangen d?rfen -> recipient-Parameter
my @recihosts = ( 'kerzelsklassikmaschinen.de', 'gmx.net' ) ;
#Subjekt der Mail, wenn das Hidden-Feld nicht definiert ist
my $stdsub = "Subject: Mail ueber das Formular";
#Zeitverschiebung in Stunden (+ oder -)
my $zeitverH = 0 ;
#Offline-Modus zum Testen (1=Mail speichern/0=Mail verschicken)
my $offline = 0 ;
#File-Locking (Win9x=0/sonst=1)
my $lock = 0 ;
#############################################################################
# Hauptprogramm starten
#############################################################################
&send_mail() ;
#############################################################################
# Mail verschicken
#############################################################################
sub send_mail {
my $datum=&date_time() ;
###
#Formfelder parsen
my ($MAILHEADER,$MAILFORM,$fehlfeld,$mussfelder)=&parse_form() ;
###
#Fehlercode verarbeiten
unless ($fehlfeld==1) {
###
#Mail verschicken
my ($mailcc,$mailbcc) ;
my $referer = ($ENV{'HTTP_REFERER'}||'kein REFERER vorhanden!') ;
my $absendermail = ($MAILFORM->{$MAILHEADER->{'sender_email'}}||$MAILHEADER->{'recipient'}) ;
my $mailsub = $stdsub ;
my $mailheader = "To: $MAILHEADER->{'recipient'}\n";
$mailheader .= "From: $absendermail\n";
$mailheader .= "X-Mailer: perlunity.de FormMailer \n";
if ($MAILHEADER->{'recipient_cc'}) {
$mailcc = $MAILHEADER->{'recipient_cc'} ;
$mailheader .= "Cc: $MAILHEADER->{'recipient_cc'}\n";
}
if ($MAILHEADER->{'recipient_bcc'}) {
$mailbcc = $MAILHEADER->{'recipient_bcc'} ;
$mailheader .= "Bcc: $MAILHEADER->{'recipient_bcc'}\n";
}
if ($MAILHEADER->{'subject'}) {
$mailsub = $MAILHEADER->{'subject'} ;
}
$mailheader .= "Subject: $mailsub\n\n";
my $mailtext = "-" x 72 . "\n";
$mailtext .= "Mail wurde am $datum verschickt\n";
$mailtext .= "-" x 72 . "\n\n";
foreach my $fn (keys %{$MAILFORM}) {
$mailtext .= "[$fn]\n" ;
$mailtext .= "$MAILFORM->{$fn}\n\n" ;
}
$mailtext .= "-" x 72 . "\n";
$mailtext .= "Script wurde von der IP $ENV{'REMOTE_ADDR'} aufgerufen:\n$referer\n" ;
$mailtext .= "-" x 72 . "\n";
###
#Mail verschicken
&mailing($MAILHEADER->{'recipient'},$absendermail,$mailcc,$mailbcc,$mailsub,$mailheader,$mailtext) ;
###
#Mailadresse speichern
if ($MAILFORM->{$MAILHEADER->{'sender_email'}}) {
open (DAT , ">> data/emails.data") ;
flock(DAT,2) if ($lock==1) ;
print DAT "$MAILFORM->{$MAILHEADER->{'sender_email'}}\n" ;
close (DAT) ;
}
###
#Counter
open (COUNT , "+< data/emails.counter") ;
flock(COUNT,2) if ($lock==1) ;
my $counter=<COUNT>;
seek(COUNT,0,0);
$counter++ ;
print COUNT $counter ;
close (COUNT) ;
###
#Export, wenn definiert
if ($MAILHEADER->{'export_file'} && $MAILHEADER->{'export_fields'}) {
my $export ;
foreach my $ex ( split(/,/,$MAILHEADER->{'export_fields'}) ) {
$MAILFORM->{$ex} =~ s/(\n|\012|\015)+/ /g ;
$export .= $MAILFORM->{$ex}.";" ;
}
open (DAT , ">> data/$MAILHEADER->{'export_file'}") ;
flock(DAT,2) if ($lock==1) ;
print DAT qq($export\n) ;
close(DAT) ;
}
}
###
#R?ckgabeseite nach der Mailzustellung
#&return_html($fehlfeld,$mussfelder,$MAILHEADER->{'redirect'}) ;
$return_html($fehlfeld,$mussfelder,$feldnamen,$MAILHEADER->{'redirect'}) ;
}
#############################################################################
# Formulardaten werden ausgelesen
#############################################################################
sub parse_form {
my (%MAILHEADER,%MAILFORM) ;
my (@required,$buffer,$mussfelder) ;
my $fehlfeld=0 ;
tie %MAILHEADER , "Tie::IxHash" ;
tie %MAILFORM , "Tie::IxHash" ;
###
#Buffer lesen
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
###
#Werte verarbeiten
foreach my $paar (split(/&/, $buffer)) {
my ($feldnamen, $wert) = split(/=/, $paar);
$feldnamen =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$feldnamen =~ tr/+/ /;
$wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$wert =~ tr/+/ /;
$wert =~ s/<!--(.|\n)*-->//g;
if ( $wert && (
$feldnamen eq 'recipient' ||
$feldnamen eq 'recipient_cc' ||
$feldnamen eq 'recipient_bcc' ||
$feldnamen eq 'subject' ||
$feldnamen eq 'redirect' ||
$feldnamen eq 'sender_email' ||
$feldnamen eq 'export_file' ||
$feldnamen eq 'export_fields'
) ) {
$feldnamen =~ s/(\015\012|\015|\012|\n|\r)/ /g ;
$wert =~ s/(\015\012|\015|\012|\n|\r)/ /g ;
$MAILHEADER{$feldnamen} = $wert;
} elsif ($feldnamen eq 'required') {
@required = split(/\|/ , $wert);
} else {
$MAILFORM{$feldnamen} = $wert if ($feldnamen !~ /button/i) ;
}
}
###
#Empf?nger-Host checken
my $hosttest1=0 ;
my $hosttest2=0 ;
my $hosttest3=0 ;
foreach my $recihosts (@recihosts) {
if ($MAILHEADER{'recipient'} =~ /$recihosts$/i) {
$hosttest1=1 ;
}
if ($MAILHEADER{'recipient_cc'} && $MAILHEADER{'recipient_cc'} =~ /$recihosts$/i ) {
$hosttest2=1 ;
}
if ($MAILHEADER{'recipient_bcc'} && $MAILHEADER{'recipient_bcc'} =~ /$recihosts$/i ) {
$hosttest3=1 ;
}
}
if ($hosttest1==0) {
$mussfelder = "<font color=\"ff0000\">Mailempf?nger nicht zugelassen!</font><br>" ;
$fehlfeld=1 ;
}
if ($hosttest2==0 && $MAILHEADER{'recipient_cc'}) {
$mussfelder = "<font color=\"ff0000\">Mailempf?nger (CC) nicht zugelassen!</font><br>" ;
$fehlfeld=1 ;
}
if ($hosttest3==0 && $MAILHEADER{'recipient_bcc'}) {
$mussfelder = "<font color=\"ff0000\">Mailempf?nger (BCC) nicht zugelassen!</font><br>" ;
$fehlfeld=1 ;
}
###
#Mussfelder checken
foreach my $require (@required) {
if (!$MAILFORM{$require}) {
$mussfelder.= "<font color=\"F89329\">$require</font><br>" ;
$fehlfeld=1 ;
}
}
foreach my $require ('recipient','redirect') {
if (!$MAILHEADER{$require}) {
$mussfelder.= "<font color=\"F89329\">Systemfeld: $require</font><br>" ;
$fehlfeld=1 ;
}
}
###
#Spamcheck
foreach my $key (keys %MAILHEADER) {
if ($MAILHEADER{$key} =~ /\n/) {
$mussfelder.= "<font color=\"ff0000\">Systemfeld: $key (NEWLINE NOT ALLOWED)</font><br>" ;
$fehlfeld=1 ;
}
}
foreach my $key (keys %MAILFORM) {
if ($MAILFORM{$key} =~ /(to|from|cc|bcc)\:\s+/i) {
$mussfelder.= "<font color=\"ff0000\">NOSPAM: $key</font><br>" ;
$fehlfeld=1 ;
}
}
###
#R?ckgabe Form-Felder
return(\%MAILHEADER,\%MAILFORM,$fehlfeld,$mussfelder) ;
}
#############################################################################
# R?ckgabeseite ausgeben
#############################################################################
sub return_html {
my $fehlfeld=shift ;
my $mussfelder=shift ;
my $redirect=shift ;
my $line ;
my $test = "TEST";
###
#R?ckgabeseite ausgeben
if ($fehlfeld==1) {
###
#Fehler
print "Content-Type: text/html\n\n" ;
open(RE , "< tmpl/stdfehl.htm") || die "Kann das Fehlertemplate -tmpl/stdfehl.htm- nicht laden !" ;
while ($line=<RE>) {
if ($line =~ /<!--mussfelder-->/i) {
print "$mussfelder";
} else {
print $line ;
}
} close(RE) ;
} else {
###
#Dank-Seite
print "Content-Type: text/html\n\n" ;
open(RE , "< tmpl/stddank.htm") || die "Kann das Fehlertemplate -tmpl/stddank.htm- nicht laden !" ;
while ($line=<RE>) {
if ($line =~ /<!--feldnamen-->/i) {
print $test;
} else {
print $line ;
}
} close(RE) ;
}
}
############################################################################
# Das eigentliche Mailing ( UNIX/Linux - Sendmail | Windows - SMTP )
############################################################################
sub mailing {
my ($mailto,$mailfrom,$mailcc,$mailbcc,$mailsub,$mailheader,$mailtext) = @_ ;
###
#Absender-Mail checken
unless ($mailfrom =~ /^.*?\@.*?\..*?$/) {
$mailfrom=$mailto ;
}
###
#SMTP-Debug
if ($smtpserver && $smtpdebug==1) {
print "Content-Type: text/html\n\n<pre>" ;
print "$mailto,$mailfrom,$mailsub,$mailheader" ;
}
###
#Mail-Versand
if($offline==1) {
###
#Mail in Datei schreiben (cgi-bin/shop/mail)
open(MAIL,"> ./temp/mail.txt") ;
print MAIL $mailheader ;
print MAIL $mailtext ;
close (MAIL) ;
} else {
if($smtpserver) {
###
#Mail per SMTP unter NT verschicken
my $smtp = Net::SMTP->new( $smtpserver, Hello => $smtpserver , Debug => $smtpdebug );
my $header=qq(To: $mailto\nFrom: $mailfrom\nSubject: $mailsub\n) ;
$smtp->mail($mailfrom);
$smtp->to($mailto , {SkipBad=>1} ) ;
$smtp->to($mailcc , {SkipBad=>1} ) if($mailcc) ;
$smtp->to($mailbcc , {SkipBad=>1} ) if($mailbcc) ;
$smtp->data();
$smtp->datasend($mailheader."\n\n");
$smtp->datasend($mailtext);
$smtp->dataend();
$smtp->quit();
} else {
###
#Mail per SENDMAIL unter Unix verschicken
open(MAIL,"| $mailprog -t") || die "Kann die E-Mail ?ber -$mailprog- nicht verschicken. Es ist eventl. der falsche sendmail-Pfad eingestellt." ;
print MAIL $mailheader ;
print MAIL $mailtext ;
close (MAIL) ;
}
}
}
#############################################################################
# Aktuelles Datum und Uhrzeit zur?ckgeben
#############################################################################
sub date_time {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+(3600*$zeitverH));
###
#Formatierung
my $datum = sprintf "%02d.%02d.%04d um %02d:%02d" , $mday , $mon+=1 ,$year+=1900 , $hour , $min ;
###
#R?ckgabe Datum
return($datum) ;
}
#############################################################################
# ENDE
#############################################################################