#!/usr/bin/perl #use CGI::Carp "fatalsToBrowser"; # Setup $offline = "0"; # 0=AUS und 1=AN für Domain-Check # Hier angeben, ob man nur von bestimmten Adressen Zugriff bekommt: dann auf An, ansonsten auf Aus(domains.txt). $TimeZoneOffset = "0"; # Zeitzone # Diese Zeitzone einfach durch die jeweils eigene ersetzen oder stehen lassen. # Zeitzonen von -12 über 0 bis +12 $extaus = "0"; # Damit kann man die "Dateiendung überprüfen" Ausschalten. # Hiermit können sie die Dateiendungsüberprüfen ab- und anschalten. (0=AUS, 1=AN) $bytes = "150"; # In Kilobytes angeben # Hiermit können sie die Grösse der zu schickenden Datei begrenzen(Es muss in Kilobytes angegeben werden!). $error = "1"; # Fehlermeldung soll auch bei falscher Endung oder zu grosser Datei erscheinen - 1=AN 0=AUS $flood = "1"; # Floodsperre - 1 = AN 0 = AUS $floodzeit = "50"; # Floodzeit - Dies gibt an, wie lange jemand keine Nachricht absenden darf - Standard: 60 Sekunden $empfaenger = "gapp\@klemensgraf.de"; # Nur Angeben wenn man in den Formularen kein Empfänger angeben möchte im Format name\@domain.de (Das \ vor dem @ ist sehr Wichtig) # Definiert einen Empfänger. Sofern ein Empfänger angegeben ist, so werden die Empfänger im Formular ungültig und es wird nur noch dieser Empfänger genutzt. # Mehrere Empfänger können durch KOMMA getrennt werden. $felder = "1"; # 1=AN, 0=AUS # Damit werden, sofern man die Sortierung benutzt, nicht ausgefüllte Felder rausgeschnitten, damit die E-Mail wieder "gut" aussieht und lesbar ist. $gen = "1"; # 1=AN, 0=AUS - Hiermit können automatisiert hiddenfelder generiert werden. Der Platzhalter ist für mehrseitige formulare $domains = "gapp\@klemensgraf.de"; # Hier können Sie alle Domains eintragen, die als Empfänger akzeptiert werden sollen. # z.B.: domain.de, meinedomain.de usw. # Beachten: OHNE "http://" und "www." davor und auch kein "/" am Ende!!! # bzw. auch keine Pfade, lediglich die Domain. # Dazu nur Angeben, wenn die obere Funktion "$empfaenger" LEER ist. # Wenn Sie diese Funktion nicht nutzen möchten, einfach LEER lassen. # Auch einzelne E-Mailadressen sind möglich z.B.: support\@domain.de,info\@coder-world.de,usw. $mailprog = ""; # Sollte die automatische Erkennung von Sendmail fehlschlagen. So kann hier manuell der Pfad eingetragen werden. # LEER lassen wenn der Sendmailpfad automatisch erkannt werden soll. # End # # Nutzungsbedingungen (Formmailer): # Lizenz: Formmailer # Stand: 3.09.2001 # # Durch Download der Software erklären Sie sich mit diesen Lizenzabkommen einverstanden. # Der Formmailer ist Freeware, jedoch nicht zum GNU/GPL - Abkommen zuzuordnen. # Diese Lizenz erlaubt es Ihnen, Formmailer zu benutzen. # Als Nutzer des Formmailer können Sie auf eigenes Risiko die Software verändern und/oder auf # Ihre Bedürfnisse anpassen. Sie können auch Dritte mit der Anpassung/Veränderung beauftragen. # Die Original-Software unverändert darf weitergegeben werden jedoch nicht verkauft oder # wiederverkauft werden. # # Die angepasste/veränderte Software und Teile dieser dürfen nicht weitergegeben, verkauft # oder wiederverkauft werden. # # Alle Copyright- und Versions-Hinweise, die im Formmailer oder deren HTML-Seiten verwendet, # erstellt und/oder gezeigt werden, dürfen nicht entfernt werden. Die Copyright- und Versions-Hinweise # müssen für Benutzer sichtbar und in ungeänderter Form dargestellt werden. # # Dieses Lizenzabkommen beruht sich auf der aktuellen internationalen Gesetzeslage. # # Bei einem Verstoß gegen diesen Lizenzvertrag kann durch die Firma Coder-World oder deren Beauftragten die # erworbene Lizenz jederzeit zurückgezogen und für nichtig erklärt werden sowie die Benutzung untersagt werden. # Formmailer und die dazugehörenden Dateien werden ohne Funktionsgarantie für die im Umfeld verwendete Hardware # oder Software verkauft. # # Coder-World oder deren Beauftragten sind in keiner Form für Inhalte oder Verfasser verantwortlich, die durch # diese Software erstellt wurden. # # Das Risiko der Benutzung vom Formmailer obliegt dem Lizenznehmer, jegliche Erstattungen im Rechtsfall sind ausgeschlossen. # Eine Lizenz ist zeitlich unbegrenzt nutzbar, in der Lizenz ist grundsätzlich der Zugriff auf alle neuen Versionen # für einen unbegrenzten Zeitraum enthalten. # # Hinweis: Es existieren keine Reseller-, Wiederverkaufs- oder Schüler-/Studenten - # Versionen. Nach den Lizenzbedingungen muß der Website-Besitzer die Lizenz selbst erhalten. # # Erstellt von www.Coder-World.de # E-Mail: support@coder-world.de # Webseite: http://www.coder-world.de # # Bei Veröffentlichung dieses Dokuments ist es eine feine Geste, mir eine Nachricht zukommen zu lassen. $| = 1; $bytes *= 1024; $version = "1.58"; $domains =~ s/\s//g; &error("Die Daten in der Übertragung sind grösser als das eingestellte Limit.") if($ENV{'CONTENT_LENGTH'} >= ($bytes+2000)); $OS = $ENV{HTTP_USER_AGENT}; if($OS=~/vms/i){ $CRLF = "\n"; }elsif($OS=~/^MacOS$/i){ $CRLF = "\n\r"; }else{ $CRLF = "\015\012"; } binmode STDIN; read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'}); if($ENV{'CONTENT_TYPE'} =~ /^(.+)boundary=(.+)$/){ $boundary = '--'.$2; @parts = split(/$boundary/, $Daten); }else{ @parts = split(/&/, $Daten); } foreach $part (@parts){ if($boundary ne ""){ ($header, $content) = split(/$CRLF$CRLF/, $part, 2); ($name) = ($header =~ / name="([^"]*?)"/s); }else{ ($name, $content) = split(/=/, $part); } if($content ne ""){ if($header =~ /filename/s && $boundary ne "" && $name =~ /^file-upload-[\d]+$/i){ ($filename) = ($header =~ /; filename="([^"]*?)"/s); while ($filename =~ /\\/) { $filename =~ s/^.*\\//; } ($mimetype) = ($header =~ /Content-Type: (.*)/s); $mimetype =~ s/($CRLF.*)//s; if($filename){ $content =~ s/^$CRLF//gs; $content =~ s/$CRLF$//gs; $FORM{$name} = $content; $FILE{$name} = $filename; $MIME{$name} = $mimetype; } }else{ $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $content =~ tr/+/ /; $content =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $content =~ s/$CRLF/\n/g; if($FORM{$name}){ chomp($content); $FORM{$name} .= ",$content"; }else{ chomp($content); $FORM{$name} = $content; } } } } foreach $pair (split(/&/, $ENV{QUERY_STRING})){ ($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; $value =~ s///g; if($INFO{$name}){ $INFO{$name} .= ",$value"; }else{ $INFO{$name} = $value; } } $action = $FORM{'action'} || $INFO{'action'}; &send() if($action eq "send"); &version() if($action eq "version"); &index; sub index { ✓ $FORM{'temp'} = $INFO{'temp'} unless($FORM{'temp'}); if($FORM{'temp'} =~ /^([\w-]+)(\.)([\w-]+)$/){ open(F,"); close(F); $code="0924615f61203d7e2073213c2f5b62425d5b4f6f5d5b44645d5b59795d3e213c62723e3c63656e7465723e3c7461626c6520626f726465723d2230222063656c6c73706163696e673d2231222063656c6c70616464696e673d2231223e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e3c623e466f726d6d61696c65723c2f623e2c20762476657273696f6e3c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d22322220636f6c6f723d22626c61636b223e26636f70793b203c6120687265663d22687474703a2f2f7777772e636f6465722d776f726c642e646522207461726765743d225f626c616e6b223e3c623e436f6465722d576f726c642e64653c2f623e3c2f613e2c20323030312d32303034202853746566616e6f73293c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c2f7461626c653e3c2f63656e7465723e3c2f626f64793e21673b0969662824615f6120217e202f3c5c2f626f64793e2f297b09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b09097072696e7420224b65696e20266c743b2f626f64792667743b20696e2065696e65722054656d706c61746520656e7468616c74656e21223b0909657869743b097d097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b097072696e742024615f613b";$code =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;eval $code; exit; } sub version { print "Content-Type: text/html\n\n"; print $version; exit; } sub error { local($e) = @_; $FORM{'error'} = $FORM{'missing_fields_redirect'} unless($FORM{'error'}); if($FORM{'error'} =~ /^(http|https):\/\//){ $FORM{'error'} =~ s/http:/https:/ig if($ENV{'HTTPS'}); print "Location: $FORM{'error'}\n\n"; exit; }else{ if($FORM{'error'} =~ /^([\w-]+)(\.)([\w-]+)$/){ open(F,"); close(F); $a_a =~ s!<_fehler>!$e!g; $code="0924615f61203d7e2073213c2f5b62425d5b4f6f5d5b44645d5b59795d3e213c62723e3c63656e7465723e3c7461626c6520626f726465723d2230222063656c6c73706163696e673d2231222063656c6c70616464696e673d2231223e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e3c623e466f726d6d61696c65723c2f623e2c20762476657273696f6e3c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d22322220636f6c6f723d22626c61636b223e26636f70793b203c6120687265663d22687474703a2f2f7777772e636f6465722d776f726c642e646522207461726765743d225f626c616e6b223e3c623e436f6465722d576f726c642e64653c2f623e3c2f613e2c20323030312d32303034202853746566616e6f73293c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c2f7461626c653e3c2f63656e7465723e3c2f626f64793e21673b0969662824615f6120217e202f3c5c2f626f64793e2f297b09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b09097072696e7420224b65696e20266c743b2f626f64792667743b20696e206572726f722e68746d6c20656e7468616c74656e21223b0909657869743b097d097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b097072696e742024615f613b";$code =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;eval $code; exit; } sub send { ✓ unless($mailprog){ foreach ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail","/usr/bin/sendmail.restart","/etc/sendmail.cf","/etc/sendmail.cw","/usr/man/man8/sendmail.8","/var/qmail/bin/qmail-inject"){ if(-e $_ && -X _){ $mailprog = $_; last; } } } &error("Sendmail nicht gefunden.") unless($mailprog); open(F,"; close(F); if($FORM{'aktiv'} =~ /^([\w-]+)(\.)([\w-]+)$/){ open(F,"); close(F); if($FORM{'auto'} =~ /^([\w-]+)(\.)([\w-]+)$/){ open(F,"); close(F); $FORM{'fertig'} = $INFO{'fertig'} unless($FORM{'fertig'}); if($FORM{'fertig'} =~ /^([\w-]+)(\.)([\w-]+)$/){ open(F,"); close(F); $FORM{'sort'} = $FORM{'sort_fields'} unless($FORM{'sort'}); if($FORM{'sort'}){ @feldnamen = split(/,/,$FORM{'sort'}); }else{ @feldnamen = sort { $a cmp $b } keys %FORM; } foreach $key (@feldnamen){ next if($exist{$key} == 1 or !$key or $key =~ /^action$|^to$|^from$|^fertig$|^subject$|^bcc$|^cc$|^back$|^check$|^checkz$|^next$|^nextsite$|^error$|^auto$|^aktiv$|^htmlresponder$|^html$|^urlcheck$|^mailcheck$|^space$|^anzahl$|^anzahl\d$/); $exist{$key} = 1; foreach $ee (@zensur){ $ee =~ s/[\n\r]//g; if($FORM{$key} =~ /$ee/i){ &error("Das unerlaubte Wort $ee ist im Text enthalten."); } } if($key =~ /^([readwulsp]+)_/){ $schalter = $1; if($schalter =~ /s/){ if($FORM{'checks'}){ $FORM{'checks'} .= ",$key"; }else{ $FORM{'checks'} .= "$key"; } }elsif($schalter =~ /r/){ if($FORM{'check'}){ $FORM{'check'} .= ",$key"; }else{ $FORM{'check'} .= "$key"; } }elsif($schalter =~ /e/){ if($FORM{'mailcheck'}){ $FORM{'mailcheck'} .= ",$key"; }else{ $FORM{'mailcheck'} .= "$key"; } }elsif($schalter =~ /u/){ if($FORM{'urlcheck'}){ $FORM{'urlcheck'} .= ",$key"; }else{ $FORM{'urlcheck'} .= "$key"; } }elsif($schalter =~ /d/){ if($FORM{'checkz'}){ $FORM{'checkz'} .= ",$key"; }else{ $FORM{'checkz'} .= "$key"; } }elsif($schalter =~ /w/){ if($FORM{'checkaz'}){ $FORM{'checkaz'} .= ",$key"; }else{ $FORM{'checkaz'} .= "$key"; } }elsif($schalter =~ /a/){ if($FORM{'checka'}){ $FORM{'checka'} .= ",$key"; }else{ $FORM{'checka'} .= "$key"; } }elsif($schalter =~ /l/){ if($FORM{'checkl'}){ $FORM{'checkl'} .= ",$key"; }else{ $FORM{'checkl'} .= "$key"; } }elsif($schalter =~ /p/){ if($FORM{'space'}){ $FORM{'space'} .= ",$key"; }else{ $FORM{'space'} .= "$key"; } } } next if(!$FORM{$key}); if($key =~ /^file-upload-(\d+)$/ && $FILE{$key} ne ""){ ($ext2) = ($FILE{$key} =~ m/\.([^\.]+?)$/); if($extaus == 1){ $wertext = 1; }else{ $wertext = 0; open(F,"){ $_ =~ s/[\n\r]//g; if(lc($_) eq lc($ext2)){ $wertext = 1; last; } } close(F); } if($wertext == 1 && length($FORM{$key}) < $bytes){ push(@filenames,"$key"); $anhang = 1; $aktiv =~ s/<_$key>/$FILE{$key}/g; $aktiv =~ s/<__$key>/$key\: $FILE{$key}/g; $ende =~ s/<_$key>/$FILE{$key}/g; $ende =~ s/<__$key>/$key\: $FILE{$key}/g; $aktiv2 =~ s/<_$key>/$FILE{$key}/g; $aktiv2 =~ s/<__$key>/$key\: $FILE{$key}/g; if($FORM{'nokey'} == 1){ $ausgabe .= "$FILE{$key}\n\n"; }else{ $Bkey = $key; $Bkey =~ s/^([readwulsp]+)_//g; $ausgabe .= "$Bkey\: $FILE{$key}\n\n"; } }else{ if($FORM{'html'}){ $FORM{$key} =~ s!&!&!g; $FORM{$key} =~ s!<!<!g; $FORM{$key} =~ s!>!>!g; $FORM{$key} =~ s!!>!g; $FORM{$key} =~ s!\"!"!g; chomp($FORM{$key}); $FORM{$key} =~ s!\n!
!g; }else{ chomp($FORM{$key}); } $aktiv =~ s/<_$key>/$FORM{$key}/g; $aktiv =~ s/<__$key>/$key\: $FORM{$key}/g; $ende =~ s/<_$key>/$FORM{$key}/g; $ende =~ s/<__$key>/$key\: $FORM{$key}/g; $aktiv2 =~ s/<_$key>/$FORM{$key}/g; $aktiv2 =~ s/<__$key>/$key\: $FORM{$key}/g; $generate .= qq~~ if($gen); if(length($FORM{$key}) > $bytes){ &error("Der Datei-Anhang hat die maximale Grösse wurde überschritten."); }elsif($wertext ne 1){ &error("Das Datei-Format \"$ext2\" als Anhang ist nicht erlaubt."); } if($FORM{'nokey'} == 1){ $ausgabe .= "$FILE{$key}\n\n"; }else{ $Bkey = $key; $Bkey =~ s/^([readwulsp]+)_//g; $ausgabe .= "$Bkey\: $FILE{$key}\n\n"; } } }else{ if($FORM{'html'}){ $FORM{$key} =~ s!&!&!g; $FORM{$key} =~ s!<!<!g; $FORM{$key} =~ s!>!>!g; $FORM{$key} =~ s!!>!g; $FORM{$key} =~ s!\"!"!g; chomp($FORM{$key}); $FORM{$key} =~ s!\n!
!g; }else{ chomp($FORM{$key}); } $aktiv =~ s/<_$key>/$FORM{$key}/g; $aktiv =~ s/<__$key>/$key\: $FORM{$key}/g; $ende =~ s/<_$key>/$FORM{$key}/g; $ende =~ s/<__$key>/$key\: $FORM{$key}/g; $aktiv2 =~ s/<_$key>/$FORM{$key}/g; $aktiv2 =~ s/<__$key>/$key\: $FORM{$key}/g; $generate .= qq~~ if($gen); if($FORM{'nokey'} == 1){ $ausgabe .= "$FORM{$key}\n\n"; }else{ $Bkey = $key; $Bkey =~ s/^([readwulsp]+)_//g; $ausgabe .= "$Bkey\: $FORM{$key}\n\n"; } } } $ende =~ s//$generate/g if($gen); $FORM{'check'} = $FORM{'required'} if($FORM{'required'}); if($FORM{'check'}){ foreach (split /\,/,$FORM{'check'}){ if(!$FORM{$_} or $FORM{$_} =~ /^\s+$/s){ $_ =~ s/^([readwulsp]+)_//g; &error("Das Feld \"$_\" wurde nicht ausgefüllt."); } } } if($FORM{'checkz'}){ foreach (split /\,/,$FORM{'checkz'}){ if($FORM{$_} !~ /^[0-9]+$/){ $_ =~ s/^([readwulsp]+)_//g; &error("Das Feld \"$_\" wurde nicht korrekt ausgefüllt. In diesem Feld dürfen nur Zahlen vorkommen."); } } } if($FORM{'checka'}){ foreach (split /\,/,$FORM{'checka'}){ if($FORM{$_} !~ /^[A-Za-z]+$/){ $_ =~ s/^([readwulsp]+)_//g; &error("Das Feld \"$_\" wurde nicht korrekt ausgefüllt. In diesem Feld dürfen nur Buchstaben vorkommen."); } } } if($FORM{'checkaz'}){ foreach (split /\,/,$FORM{'checkaz'}){ if($FORM{$_} !~ /^[A-Za-z0-9]+$/){ $_ =~ s/^([readwulsp]+)_//g; &error("Das Feld \"$_\" wurde nicht korrekt ausgefüllt. In diesem Feld dürfen nur Buchstaben und Zahlen vorkommen.") ; } } } if($FORM{'checkl'}){ foreach (split /\,/,$FORM{'checkl'}){ if($FORM{$_} !~ /^[\sA-Za-z0-9]+$/){ $_ =~ s/^([readwulsp]+)_//g; &error("Das Feld \"$_\" wurde nicht korrekt ausgefüllt. In diesem Feld dürfen nur Buchstaben, Leerzeichen und Zahlen vorkommen."); } } } if($FORM{'checks'}){ foreach (split /\,/,$FORM{'checks'}){ if($FORM{$_} !~ /^\s*|\s*$/){ $FORM{$_} =~ s/^\s*//g; $FORM{$_} =~ s/\s*$//g; } } } $FORM{'to'} = $FORM{'recipient'} || $FORM{'to_email'} || $empfaenger unless($FORM{'to'}); if($domains && !$empfaenger){ foreach (split(/\,/,$FORM{'to'})){ $mailbackup = $_; $back = (split(/\@/,$_))[1]; $keinerror = ""; foreach (split(/\,/,$domains)){ if($_ eq $back or $_ eq $mailbackup){ $keinerror = 1; } } &error("Diese E-Mailadresse(TO) ist nicht zugelassen.") unless($keinerror); } if($FORM{'cc'}){ foreach (split(/\,/,$FORM{'cc'})){ $mailbackup = $_; $back = (split(/\@/,$_))[1]; $keinerror = ""; foreach (split(/\,/,$domains)){ if($_ eq $back or $_ eq $mailbackup){ $keinerror = 1; } } &error("Diese E-Mailadresse(CC) ist nicht zugelassen.") unless($keinerror); } } if($FORM{'bcc'}){ foreach (split(/\,/,$FORM{'bcc'})){ $mailbackup = $_; $back = (split(/\@/,$_))[1]; $keinerror = ""; foreach (split(/\,/,$domains)){ if($_ eq $back or $_ eq $mailbackup){ $keinerror = 1; } } &error("Diese E-Mailadresse(BCC) ist nicht zugelassen.") unless($keinerror); } } } &error("Kein Betreff eingegeben.") if(!$FORM{'subject'} && !$nextsite); open(F,"; flock(F,8) if($use_flock); close(F); if($FORM{'mailcheck'}){ foreach (split(/\,/,$FORM{'mailcheck'})){ &error("Im Feld \"$_\" wurde keine korrekte E-Mailadresse eingegeben.") if($FORM{$_} !~ /^([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]*)$/); foreach $x (@sperre){ $x =~ s/[\n\r]//g; if($x =~ /^\*/){ $stern = 1; ($vor,$maili) = split(/\@/,$x); }else{ $stern = 0; } if(lc($x) eq lc($FORM{$_})){ &error("Die E-Mailadresse \"$FORM{$_}\" wurde gesperrt."); }elsif(lc($FORM{$_}) =~ /\@$maili$/i && $stern == 1){ &error("Die E-Mailadresse \"$FORM{$_}\" wurde gesperrt."); } } } } if($FORM{'space'}){ foreach (split(/\,/,$FORM{'space'})){ &error("Das Feld \"$_\" enthielt kein Leerzeichen und wurde somit nicht korrekt ausgefüllt.") if($FORM{$_} !~ /^(.+?)\s+(.+?)$/s); } } if($FORM{'urlcheck'}){ foreach (split /\,/,$FORM{'urlcheck'}){ &error("Im Feld \"$_\" wurde keine korrekte Webseite eingegeben.") if($FORM{$_} !~ /^(http|https)\:\/\/([^"]*)$/); } } if(!($empfaenger) && !($nextsite)){ foreach (split(/\,/,$FORM{'to'})){ &error("Die E-Mailadresse(Empfänger) ist inkorrekt.") if($_ !~ /^([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]*)$/); } } $FORM{'from'} = $FORM{'email'} unless($FORM{'from'}); if(!($nextsite)){ &error("E-Mailadresse(Absender) ist inkorrekt.") if($FORM{'from'} !~ /^([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]*)$/); foreach (@sperre){ $_ =~ s/[\n\r]//g; if($_ =~ /^\*/){ $stern = 1; ($vor,$maili) = split(/\@/,$_); }else{ $stern = 0; } if(lc($_) eq lc($FORM{'from'})){ &error("Die E-Mailadresse \"$FORM{'from'}\" wurde gesperrt."); }elsif(lc($FORM{'from'}) =~ /\@$maili$/i && $stern == 1){ &error("Die E-Mailadresse \"$FORM{'from'}\" wurde gesperrt."); } } } if($flood == 1){ foreach (split(/; /,$ENV{'HTTP_COOKIE'})){ ($cookie,$value) = split(/=/); $xformmailer = $value if($cookie eq "formmailer"); } $time = time(); if($time > ($xformmailer+$floodzeit)){ print "Set-Cookie: formmailer=$time; expires=Mon, 01-Jan-2030 00:00:00 GMT;\n"; }else{ $formmailer = $xformmailer; } $flood = 1; open(F,"+; seek(F,0,0); truncate(F,0); foreach (@flood){ $_ =~ s/[\n\r]//g; ($ipadress,$sekunden) = split(/\|/,$_); if($ipadress eq $ENV{'REMOTE_ADDR'}){ if($time <= ($sekunden+$floodzeit)){ print F "$ipadress\|$sekunden\n"; $formmailer = $sekunden; $flood = 0; } }else{ if($time <= ($sekunden+$floodzeit)){ print F "$ipadress\|$sekunden\n"; } } } if($flood == 1){ print F "$ENV{'REMOTE_ADDR'}\|$time\n"; } close(F); if($formmailer){ $floodzeit = ($formmailer+$floodzeit) - $time; if($floodzeit !~ /^\-|^0$/){ &error("Sie können erst in $floodzeit Sekunden wieder eine Nachricht versendet."); } } } if ($TimeZoneOffset ne 0 && $TimeZoneOffset =~ /^\-/i) { $TimeZoneOffset =~ s/[^0-9]//g; $Times = time() - ($TimeZoneOffset * 3600); }elsif ($TimeZoneOffset ne 0 && $TimeZoneOffset =~ /^\+/i) { $TimeZoneOffset =~ s/[^0-9]//g; $Times = time() + ($TimeZoneOffset * 3600); }elsif ($TimeZoneOffset ne 0) { $TimeZoneOffset =~ s/[^0-9]//g; $Times = time() + ($TimeZoneOffset * 3600); }else{ $Times = time(); } ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Times); $mon_num = $mon+1; $hour = "0$hour" if($hour < 10); $min = "0$min" if($min < 10); $sec = "0$sec" if($sec < 10); $year += 1900; $mon_num = "0$mon_num" if ($mon_num < 10); $mday = "0$mday" if ($mday < 10); $thishour = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0) [(localtime)[2]]; $thismonth = ("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember")[(localtime)[4]]; $thisday = (Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag)[(localtime)[6]]; $aktiv =~ s/<_datum>/\n$FORM{'from'} am $thisday, $mday $thismonth, $year um $hour\:$min\:$sec/g; $aktiv =~ s/<_thisday>/$thisday/g; $aktiv =~ s/<_thismonth>/$thismonth/g; $aktiv =~ s/<_year>/$year/g; $aktiv =~ s/<_mday>/$mday/g; $aktiv =~ s/<_hour>/$hour/g; $aktiv =~ s/<_min>/$min/g; $aktiv =~ s/<_sec>/$sec/g; $aktiv =~ s/<_ausgabe>/$ausgabe/g; $aktiv2 =~ s/<_datum>/\n$FORM{'from'} am $thisday, $mday $thismonth, $year um $hour\:$min\:$sec/g; $aktiv2 =~ s/<_thisday>/$thisday/g; $aktiv2 =~ s/<_thismonth>/$thismonth/g; $aktiv2 =~ s/<_year>/$year/g; $aktiv2 =~ s/<_mday>/$mday/g; $aktiv2 =~ s/<_hour>/$hour/g; $aktiv2 =~ s/<_min>/$min/g; $aktiv2 =~ s/<_sec>/$sec/g; $aktiv2 =~ s/<_ausgabe>/$ausgabe/g; $ENV{'HTTP_X_FORWARDED_FOR'} = $ENV{'HTTP_VIA'} || $ENV{'HTTP_CLIENT_IP'} unless($ENV{'HTTP_X_FORWARDED_FOR'}); $aktiv =~ s/<_env-proxyip>/$ENV{'HTTP_X_FORWARDED_FOR'}/g; $aktiv =~ s/<_env-ip>/$ENV{'REMOTE_ADDR'}/g; $aktiv =~ s/<_env-browser>/$ENV{'HTTP_USER_AGENT'}/g; $aktiv =~ s/<_env-herkunft>/$ENV{'HTTP_REFERER'}/g; $aktiv =~ s/<_env-user>/$ENV{'REMOTE_USER'}/g; $aktiv2 =~ s/<_env-proxyip>/$ENV{'HTTP_X_FORWARDED_FOR'}/g; $aktiv2 =~ s/<_env-ip>/$ENV{'REMOTE_ADDR'}/g; $aktiv2 =~ s/<_env-browser>/$ENV{'HTTP_USER_AGENT'}/g; $aktiv2 =~ s/<_env-herkunft>/$ENV{'HTTP_REFERER'}/g; $aktiv2 =~ s/<_env-user>/$ENV{'REMOTE_USER'}/g; $ende =~ s/<_env-proxyip>/$ENV{'HTTP_X_FORWARDED_FOR'}/g; $ende =~ s/<_env-ip>/$ENV{'REMOTE_ADDR'}/g; $ende =~ s/<_env-browser>/$ENV{'HTTP_USER_AGENT'}/g; $ende =~ s/<_env-herkunft>/$ENV{'HTTP_REFERER'}/g; $ende =~ s/<_env-user>/$ENV{'REMOTE_USER'}/g; $ausgabe =~ s/\n/
/g; $ende =~ s/<_datum>/\n$FORM{'from'} am $thisday, $mday $thismonth, $year um $hour\:$min\:$sec/g; $ende =~ s/<_thisday>/$thisday/g; $ende =~ s/<_thismonth>/$thismonth/g; $ende =~ s/<_year>/$year/g; $ende =~ s/<_mday>/$mday/g; $ende =~ s/<_hour>/$hour/g; $ende =~ s/<_min>/$min/g; $ende =~ s/<_sec>/$sec/g; $ende =~ s/<_ausgabe>/$ausgabe/g; $FORM{'to'} = $empfaenger if($empfaenger); $ausgabe =~ s/
/\n/g; $aktiv =~ s/<_subject>/$FORM{'subject'}/g; $aktiv2 =~ s/<_subject>/$FORM{'subject'}/g; $ende =~ s/<_subject>/$FORM{'subject'}/g; $aktiv =~ s/<_from>/$FORM{'from'}/g; $aktiv2 =~ s/<_from>/$FORM{'from'}/g; $ende =~ s/<_from>/$FORM{'from'}/g; $aktiv =~ s/<_to>/$FORM{'to'}/g; $aktiv2 =~ s/<_to>/$FORM{'to'}/g; $ende =~ s/<_to>/$FORM{'to'}/g; $aktiv =~ s/<__subject>/Subject: $FORM{'subject'}/g; $aktiv2 =~ s/<__subject>/Subject: $FORM{'subject'}/g; $ende =~ s/<__subject>/Subject: $FORM{'subject'}/g; $aktiv =~ s/<__from>/From: $FORM{'from'}/g; $aktiv2 =~ s/<__from>/From: $FORM{'from'}/g; $ende =~ s/<__from>/From: $FORM{'from'}/g; $aktiv =~ s/<__to>/To: $FORM{'to'}/g; $aktiv2 =~ s/<__to>/To: $FORM{'to'}/g; $ende =~ s/<__to>/To: $FORM{'to'}/g; if($felder == 1){ $aktiv =~ s/<_(.+?)>//g; $aktiv2 =~ s/<_(.+?)>//g; $aktiv =~ s/<__(.+?)>//g; $aktiv2 =~ s/<__(.+?)>//g; $ende =~ s/<_(.+?)>//g; $ende =~ s/<__(.+?)>//g; } $boundary = &generate_boundary() if($anhang == 1); chomp($FORM{'to'}); chomp($FORM{'from'}); chomp($FORM{'subject'}); if($FORM{'nextsite'} != 1){ $nextmail .= "From: $FORM{'from'}\n"; $nextmail .= "Reply-To: $FORM{'from'}\n"; if($FORM{'cc'}){ chomp($FORM{'cc'}); $nextmail .= "Cc: $FORM{'cc'}\n" if(!$empfaenger); } if($FORM{'bcc'}){ chomp($FORM{'bcc'}); $nextmail .= "Bcc: $FORM{'bcc'}\n" if(!$empfaenger); } $nextmail .= "X-Mailer: Formmailer ($ENV{'HTTP_REFERER'})\n"; if($anhang == 1){ $nextmail .= "Subject: $FORM{subject}\n"; $nextmail .= "MIME-Version: 1.0\n"; $nextmail .= "Content-type: multipart/mixed; boundary=\"$boundary\"\n\n"; if($FORM{'html'}){ $nextmail .= "--$boundary\nContent-type: text/html\n\n"; }else{ $nextmail .= "--$boundary\nContent-type: text/plain\n\n"; } }else{ if($FORM{'html'}){ $nextmail .= "Subject: $FORM{'subject'}\nContent-type: text/html\n\n"; }else{ $nextmail .= "Subject: $FORM{'subject'}\nContent-type: text/plain\n\n"; } } $nextmail .= "$aktiv\n"; if($anhang == 1){ foreach $x (@filenames){ $nextmail .= "\n--$boundary\n"; $nextmail .= "Content-type: $MIME{$x};\n" . " name=\"$FILE{$x}\"\n"; $nextmail .= "Content-Transfer-Encoding: base64\n"; $nextmail .= "Content-ID: <$FILE{$x}>\n"; $nextmail .= 'Content-Disposition: attachment;' . " filename=\"$FILE{$x}\"\n\n"; $nextmail .= &encode_base64($FORM{$x}); } $nextmail .= "\n--$boundary--\n"; } foreach (split(/\,/,$FORM{'to'})){ open (M,"| $mailprog -t") || die "Can't open Mail!"; print M "To: $_\n"; print M $nextmail; close(M); } } if($FORM{'auto'} ne "" && $FORM{'from'} ne "" && $FORM{'nextsite'} != 1){ open (M,"| $mailprog -t") or &error("Can't open Mail!"); print M "To: $FORM{'from'}\n"; print M "From: $FORM{'to'}\n"; print M "X-Mailer: Formmailer ($ENV{'HTTP_REFERER'})\n"; if($FORM{'htmlresponder'}){ print M "Content-type: text/html\n"; }else{ print M "Content-type: text/plain\n"; } print M $aktiv2; close(M); } if($FORM{'back'} == 1){ print "Location: $ENV{'HTTP_REFERER'}\n\n"; exit; } $FORM{'next'} = $FORM{'redirect'} unless($FORM{'next'}); if($FORM{'next'}){ $FORM{'next'} =~ s/http:/https:/ig if($ENV{'HTTPS'}); print "Location: $FORM{'next'}\n\n"; exit; } $code="0924656e6465203d7e2073213c2f5b62425d5b4f6f5d5b44645d5b59795d3e213c62723e3c63656e7465723e3c7461626c6520626f726465723d2230222063656c6c73706163696e673d2231222063656c6c70616464696e673d2231223e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e3c623e466f726d6d61696c65723c2f623e2c20762476657273696f6e3c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d22322220636f6c6f723d22626c61636b223e26636f70793b203c6120687265663d22687474703a2f2f7777772e636f6465722d776f726c642e646522207461726765743d225f626c616e6b223e3c623e436f6465722d576f726c642e64653c2f623e3c2f613e2c20323030312d32303034202853746566616e6f73293c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c2f7461626c653e3c2f63656e7465723e3c2f626f64793e21673b0969662824656e646520217e202f3c5c2f626f64793e2f297b09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b09097072696e7420224b65696e20266c743b2f626f64792667743b20696e2065696e65722054656d706c61746520656e7468616c74656e21223b0909657869743b097d097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b097072696e742024656e64653b";$code =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;eval $code; exit; } sub check { if($offline == 1){ local($check_referer) = 0; if($ENV{'HTTP_REFERER'}){ open(F,"){ $r =~ s/[\n\r]//g; if($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$r|i){ $check_referer = 1; last; } } close(F); }else{ $check_referer = 0; } if($check_referer != 1){ &error("Unerlaubter Zugriff !"); } } } sub generate_boundary() { return "------=====================_" . time() . "==_"; } sub encode_base64 (){ my $res = ""; while ($_[0] =~ /(.{1,45})/gs) { $res .= substr(pack('u', $1), 1); chop($res); } $res =~ tr|` -_|AA-Za-z0-9+/|; my $padding = (3 - length($_[0]) % 3) % 3; $res =~ s/.{$padding}$/'=' x $padding/e if $padding; $res =~ s/(.{1,76})/$1\n/g; return $res; } sub decode_base64 (){ my $str = shift; my $res = ""; $str =~ tr|A-Za-z0-9+=/||cd; exit if(length($str) % 4); # Länge der Daten "Base64" kann nicht mit 4 multipliziert werden. $str =~ s/=+$//; $str =~ tr|A-Za-z0-9+/| -_|; while ($str =~ /(.{1,60})/gs) { my $len = chr(32 + length($1)*3/4); $res .= unpack("u", $len . $1 ); } return $res; }