Thread Script zum E-Mail Formular verschicken
(7 answers)
Opened by peterpan at 2010-08-03 10:52
Der eigentliche Fehler befindet sich in der HTML Seite und dem Form-Tag.
Um einen enctype="text/html" handelt es sich bei Post Daten nicht. Code: (dl
)
enctype="application/x-www-form-urlencoded" lässt CGI->param die Daten richtig auslesen. Bischen noch am Code herumgefeilt: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #!/usr/local/bin/perl use strict; use warnings; # -------> Individuelle Parameter des Skriptes - bitte anpassen! # --> SMTP-Programm zum Versenden der Mail: my $Sendmail_Prog = '/usr/lib/sendmail'; # --> Ziel-Mailadresse, an die gesendet werden soll: my $mailto = 'email-adresse'; # -------> Modul für CGI-Scripts einbinden: use CGI; use CGI::Carp qw(fatalsToBrowser); $CGI::DISABLE_UPLOADS = 0; # no uploads $CGI::POST_MAX=1024*50; # max. 50k Postings # -------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden: my $query = CGI->new(); my @names = $query->param(); # -------> interne Daten aus den erwarteten hidden-Feldern auslesen: my $delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value my $returnhtml = $query->param('return'); # ---> URL für Dankeseite my $subject = $query->param('subject'); # ---> E-Mail-Subject # -------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln # VERHINDERT sonst möglichen MISSBRAUCH des Skripts my $subject =~ s/\s/ /g; # -------> Text der E-Mail aus den Formulardaten ermitteln: my $mailtext = ""; foreach my $name (@names) { if ( !grep{ $_ eq $name }('return','subject','delimiter') ) { my @values = $query->param($name); foreach my $value (@values) { $mailtext .= $name; $mailtext .= $delimiter; $mailtext .= $value."\n"; } } } # -------> E-Mail versenden: open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n"; print MAIL "To: $mailto\n"; print MAIL "Subject: $subject\n\n"; print MAIL "$mailtext\n"; close(MAIL); # -------> Dankeseite an Browser senden: print $query->redirect('-url' => $returnhtml); Ansonsten sieh dir auch mal die Wiki hier zum Thema CGI an. |