perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| Hallo perlUNers, bin leider noch Perl-Anfänger und ich habe mir die Beiträge zu diesem Thema bereits angeschaut und kämpfe doch seit Tagen, das unten stehende mailformular zum Laufen zu bringen, hat jemand eine Idee, wo der Haken liegen könnte? ---------- #!/usr/bin/perl print "Content-type: text/html\n\n"; print header; $mailto = "mattfisc@gmx.de"; $Sendmail_Prog = "/usr/sbin/sendmail"; use CGI; $query = new CGI; @names = $query->param; # interne Daten aus den erwarteten hidden-Feldern auslesen: $delimiter = $query->param('delimiter'); # --> Begrenzerzeichen $returnhtml = $query->param('return'); # --> Dankeseite $subject = $query->param('subject'); # --> E-Mail-Subject $| = 1; # this will make STDOUT unbuffered # Text der E-Mail aus den Formulardaten ermitteln: $mailtext = " "; foreach(@names) { $name = $_; @values = " "; @values = $query->param($name); if($name ne "mailto" && $name ne "return" && $name ne "subject" && $name ne "delimiter") { foreach $value (@values) { $mailtext = $mailtext.$name; $mailtext = $mailtext.$delimiter; $mailtext = $mailtext.$value."\n"; } } } # E-Mail versenden: open(MAIL, "|$Sendmail_Prog -t") || print STDERR "Mailprogramm kann 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 "Location: $returnhtml\n\n";
Datum: 08.03.2006-16:48

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| Hi, probier das mal so:
#!/usr/bin/perluse strict; use warnings; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use CGI qw(:standard); print "Content-type: text/html\n\n"; my $mailto = "mattfisc@gmx.de"; my $sendmail = "/usr/bin/sendmail"; my $query = CGI->new(); my %params = $query->Vars(); my $mailtext = ""; foreach (keys %params) { next if($_ eq "delimiter"); next if($_ eq "return"); next if($_ eq "subject"); $mailtext .= "$_: $params{$_}".$params{'delimiter'}; } # Obwohl Du den hier nicht wirklich brauchst. # Der Schalter ist für die Ausgabe auf der Shell # gedacht. $| = 1; if(! open(MAIL, "|$sendmail -t") ) { # Ein print auf STDERR bekommt man nur zu sehen, # wenn ein Programm auf der Shell ausgeführt # wird. Bei CGI bringt das gar nichts. print "Fehler: MTA konnte nicht gestartet werden. $!\n"; } else { print MAIL "To: $mailto\n;"; print MAIL "Subject: $params{'subject'}\n"; print MAIL "$mailtext"; close(MAIL); print "Location: $return\n\n"; exit 0;
Ganz wichtig! Immer "use strict" und "use warnings" verwenden. ;-)Schau Dir in jedem Falle mal das Perlhandbuch an! http://www.perlunity.de/perl/tutorial/index.shtml -uw
Datum: 08.03.2006-18:24

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| Tausend Dank, aber noch nicht ganz: Software error: Global symbol "@gmx" requires explicit package name at /is/htdocs/wp1017375_N0NT43HFLV/www/cgi-bin/form-mail.cgi line 10. Global symbol "$return" requires explicit package name at /is/htdocs/wp1017375_N0NT43HFLV/www/cgi-bin/form-mail.cgi line 41. Execution of /is/htdocs/wp1017375_N0NT43HFLV/www/cgi-bin/form-mail.cgi aborted due to compilation errors. -MF
Datum: 08.03.2006-19:14

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| Sorry, ich bin aber auch ein Matthirn. Zu 1:
# Das klappte nicht, weil er @gmx als array sah. # Deshalb muss das in einfache Ticks, damit das @ ausgeschaltet wird. my $mailto = 'mattfisc@gmx.de';
Zu 2:
# und hier muss natürlich der hash abgegriffen werden. print "Location: $params{'return'}\n\n";
-uw
Datum: 08.03.2006-19:26

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| nochmals tausend dank, es fehlte noch ein curly bracket zum Ende ... Nun kommen allerdings immer noch keine mails bei mir an und die Danke Seite wird auch nicht aufgerufen, stattdessen ein schnödes Location: /danke.html -MF
Datum: 08.03.2006-19:55

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| Wenn ich's recht bedenke... Kommentier mal die Zeile, in der der Content-type gesendet wird aus, dann funktioniert der Location Header. Aber, dann funktioniert die Fehlermeldung nicht, falls Sendmail nicht geöffnet werden kann. Warum keine emails ankommen, ist eine andere Geschichte. Wie ist denn Deine Umgebung? Ein beispiel: Ich habe meinen Webserver an einem privaten Anschluss und kann somit nur eMails über meinen Provider senden. Bei dem muss ich mich aber authentifizieren, sonst kann sendmail nichts wegschicken. Sprich, ich musste erst die exim Konfiguration darauf anpassen. -uw
Datum: 08.03.2006-20:04

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| mit aus kommentieren meinst Du # und so? die Umgebung ist derart, dass eine Webseite ein Formular enthält und jeder das dort vorhandene sendmail benutzen soll, die mail-Adresse ist momentan meine eigene, um prüfen zu können, was ankommt, kommt aber nichts an ... -MF
Datum: 08.03.2006-20:28

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
Zu 1: Ja Raute kommentiert aus.Zu 2: Verstehe ich Dich also richtig? Deine Webseite ist auf einem HostigServer, auf dem Du auch CGI Skripte laufen lassen kannst? In dem Falle solltest Du Dich mit dem Anbieter in Verbindung setzen, wie das bei denen mit dem Versand vpn eMail läuft. Ich habe zum Beispiel einen FreeWebspace bei tripos.lycos.com und darf sendmail direkt nicht benutzen. Die stellen ein Modul zur Verfügung, dass ich dort benutzen muss. -uw
Datum: 08.03.2006-20:32

|
re: perl/cgi-Formular/ Premature end of script headers
|
Seitenanfang |
| leider funktioniert das immer noch nicht, trotz auskommentierung, nun gibt es keine Fehlermeldung, sondern ein /danke.html im Framefenster, statt Aufruf der Dankeseite. Zudem kommen keine e-mails bei mir an, der Provider sagt aber alles wäre in Ordnung Hier noch die entsprechenden html-Zeilen: <body> <form action="/cgi-bin/form-mail.cgi" method="post"> <input type="hidden" name="return" value="/danke.html"> <input type="hidden" name="delimiter" value=": "> <input type="hidden" name="subject" value="Feedback-Formular"> Wäre nett, wenn nochmals jemals drüber schaut! Dank im voraus! mattfi
Datum: 18.03.2006-16:06

|