Hallo, danke für eure Hilfsbereitschaft und eure Tipps. Aber ich weiß nicht genau, bei welchem "to" ich das eintragen muss. Mein Namensfeld heißt "Nachname"Hier der Code:
#!/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 = ( 'meinedomain.at' , '' , '' ) ;
#Subjekt der Mail, wenn das Hidden-Feld nicht definiert ist
my $stdsub = "Subject: ";
#Zeitverschiebung in Stunden (+ oder -)
my $zeitverH = +1 ;
#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";
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 .= "Die Anmeldung 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
#############################################################################
Datum: 14.03.2006-09:31
