pet
Threadersteller
Dabei seit: 08.06.2006
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 08.06.2006 00:10
Titel Formmail.pl - Weisse Seite nach Abschicken |
|
|
Hallo,
ich habe eine Frage zu einem Script, es geschehen eigenartige Dinge damit! Es scheint ausgefürht zu werden. Jedenfalls bekomme ich die Meldung, welche Felder fehlen, auch wenn die eingegeben wurden. Wenn ich den Teil ->
<INPUT TYPE=HIDDEN name="required" value="Name, Firma, eMail">
heraus nehme passiert gar nichts und ich habe einfach ein leere Seite wenn ich auf "Abschicken" gehe (?!)
Habe Rechte ausgegeben und auch eine Seite angelegt, die ein "Danke für die Mail" anzeigt, aber nichts passiert..gaaaaaanz leer bleibts .. und ich verzweifle nicht nur langsam. Was könnte as Problem sein?
Vielen Dank für die Hilfe im vorraus.
Pet
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ergoline . happy sun concept .</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="keywords" content="Sonnenbank, Ergoline, Sonne, Sun, Spaß, Bräune, Körper, Wellness, Sonnenstudio, Erholung, Lifestyle" />
<meta name="description" content="Mit welchem Eindruck man ein Sonnenstudio verlässt, hängt durchaus damit zusammen, mit welchem Eindruck man es betritt. Ergoline .happy sun concept." />
<link rel="stylesheet" type="text/css" href="../sun.css">
</head>
<body bgcolor="#eae9e8" topmargin="0" marginheight="0">
<form name="mail" method="POST" action="/cgi-bin/mailer/mailer.cgi">
<INPUT TYPE=HIDDEN name="redirect" value="http://www.happy-sun-concept.de/inhalte/form_danke.htm">
<INPUT TYPE=HIDDEN name="recipient" value="post@petra-gerlach.de">
<INPUT TYPE=HIDDEN name="sender_email" value="Email">
<INPUT TYPE=HIDDEN name="subject" value="Happy Sun Concept Kontakt">
<INPUT TYPE=HIDDEN name="required" value="Name, Firma, eMail">
<INPUT TYPE=HIDDEN name="export_file" value="kontakt.data">
<INPUT TYPE=HIDDEN name="export_fields" value="Name,Email">
<table class="table" border="0" cellspacing="1" cellpadding="3">
<tr>
<td colspan="2" class="head" height="17" width="100%" align="left">
<span class="headline">Kontakt<br />
</span></td>
</tr>
<tr>
<td class="text" colspan="2" height="16" width="100%">
<span class="font-small">Bitte füllen Sie alle mit * markierten Felder aus. (Pflichtfelder)</span></td></tr><tr><td class="text" width="30%"><p class="align">Name*</p></td>
<td class="text"><input class="form" type="text" name="Name" size="28" /></td>
</tr>
<tr><td class="text" width="30%"><p class="align">Firma*</p></td>
<td class="text">
<input class="form" type="text" name="Firma" size="28"></td></tr>
<tr><td class="text" width="30%"><p class="align">Strasse</p></td>
<td class="text"><input class="form" type="text" name="absender_strasse" size="28" /></td>
</tr>
<tr><td class="text" width="30%"><p class="align">PLZ / Ort</p></td>
<td class="text">
<input class="form" type="text" name="absender_ort" size="28"></td></tr>
<tr><td class="text" width="30%"><p class="align">eMail*</p></td>
<td class="text">
<input class="form" type="text" name="eMail" size="28"></td></tr>
<tr><td class="text" width="30%"><p class="align">Ihre Nachricht </p></td>
<td class="text">
<textarea class="form" type="text" name="Mail-Text" cols="25" rows="5"></textarea></td></tr>
<tr>
<td rowspan="2" valign="top" > </td>
</tr>
<tr>
<td align="left" valign="middle">
<input name="submit" type="submit" style="BORDER: #6b6760 1px solid; COLOR: #6b6760; FONT-FAMILY: Arial; FONT-COLOR: #c0bebb; FONT-SIZE: 9px" value="Abschicken" />
<input type="reset" value="Löschen" style="BORDER: #6b6760 1px solid; COLOR: #6b6760; FONT-FAMILY: Arial; FONT-COLOR: #c0bebb; FONT-SIZE: 9px" name="reset" /> </td>
</tr>
</table>
</div></form>
</body>
</html>
-->
Script
#!/usr/bin/perl
############################################################################
#
# (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 = ( 'petra-gerlach.de' , 'happy-sun-concept.de' ) ;
#Subjekt der Mail, wenn das Hidden-Feld nicht definiert ist
my $stdsub = "Subject: Mail von www.happy-sun-concept.de";
#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 = 1 ;
#############################################################################
# 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'}) ;
}
#############################################################################
# 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=\"ff0000\">$require</font><br>" ;
$fehlfeld=1 ;
}
}
foreach my $require ('recipient','redirect') {
if (!$MAILHEADER{$require}) {
$mussfelder.= "<font color=\"ff0000\">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 ;
###
#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 "Location: $redirect\n\r\n\r" ;
}
}
############################################################################
# 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
#############################################################################
[edit]
Titel geändert
Zuletzt bearbeitet von tacker am Do 08.06.2006 10:44, insgesamt 1-mal bearbeitet
|
|