perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




12.02.2012 / 00:20

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragperl/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

Beitragre: perl/cgi-Formular/ Premature end of script headers
Seitenanfang
Hi,

probier das mal so:


#!/usr/bin/perl

use 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-