CGI-Konflikt
x-VieW
- perl
Guten Morgen allerseits,
Ich habe folgende Script auf NT-Maschienen getestet. Der Script lief problemlos. Aber, als ich diesen Script auf dem Server vom Provider getan habe, lief das ganze nicht mehr. Der Provider benutzt Unix-Server.
Die error.log-Datei zeigt folgender Fehlermeldung an:
error.log:
---------
[Tue Dec 3 09:10:50 2002] [error] [client 212.55.xxx.xxx] Premature end of script headers: /home/xxx.ch/cgi/mail.cgi
---------
CGI-Script:
-----------
#!/usr/bin/perl
use CGI ':standard';
use Net::SMTP;
$username = param('name');
$uservname = param('vname');
$addstr = param('str');
$addhnr = param('hnr');
$addplz = param('plz');
$addort = param('ort');
$addland = param('land');
$addtel = param('tel');
$addfax = param('fax');
$sender = param('email');
$subj = param('subject');
$text = param('comment');
$mailServer = "smtp.xxx.ch";
$empfaenger = "info@xxx.ch";
$smtp = Net::SMTP->new($mailServer);
$smtp->mail($sender);
$smtp->to($empfaenger);
$smtp->data();
$smtp->datasend("Subject: $subj\n");
$smtp->datasend("To: $empfaenger\n");
$smtp->datasend("\n");
$smtp->datasend("Persoenliche Daten\n");
$smtp->datasend("------------------------------------------\n");
$smtp->datasend("Name: $username\n");
$smtp->datasend("Vorname: $uservname\n");
$smtp->datasend("Strasse, Hausnummer: $addstr, $addhnr\n");
$smtp->datasend("PLZ, Ort: $addplz, $addort\n");
$smtp->datasend("Land: $addland\n");
$smtp->datasend("Tel.: $addtel\n");
$smtp->datasend("Fax: $addfax\n");
$smtp->datasend("-------------------------------------------\n");
$smtp->datasend("\n");
$smtp->datasend("Nachrichtkoerper\n");
$smtp->datasend("----------------\n");
$smtp->datasend("$text\n");
$smtp->datasend("\n");
$smtp->dataend();
$smtp->quit;
print << "END"
Content-type: text/html\n\n
<HTML>
<HEAD>
<TITLE>Das ist ein Test</TITLE>
</HEAD>
<BODY bgcolor="#ffffff">
<H3>Die Mail wurde verschickt</H3>
</BODY>
</HTML>
END
-------------------
Kann mir jemand sagen woran könnte es liegen???
Ich danke euch für eure Hilfe im Voraus
Gruss
x-VieW
Hi,
[Tue Dec 3 09:10:50 2002] [error] [client 212.55.xxx.xxx] Premature end of script headers: /home/xxx.ch/cgi/mail.cgi
schaue Dir die Ausgabe des Scripts an der Konsole an. Augenscheinlich wird irgendetwas ausgegeben, bevor der gültige HTTP-Header gesendet wird.
#!/usr/bin/perl
#!/usr/bin/perl -w
use strict;
Anschließend hast Du einige Fehler zu bereinigen; die meisten sind mit Hilfe von
perldoc -f my
zu lösen.
use CGI ':standard';
use Net::SMTP;
Installiert und (im letzten Fall) konfiguriert sind beide Module?
$empfaenger = "info@xxx.ch";
'info@xxx.ch'
Benutze Doublequotes _ausschließlich_ dann, wenn sie Sinn machen, also wenn Du in ihnen etwas expandieren willst. Ansonsten kosten sie nämlich Rechenzeit. Sie mag Dir zu wenig vorkommen, um beachtenswert zu sein; aber u.U. ist es durchaus spürbar. Gewöhne Dir einen optimalen Programmierstil an.
print << "END"
Content-type: text/html\n\n
Wozu gibst Du hier "\n\n" aus, wenn Du lediglich eine Leerzeile haben willst?
Cheatah
Hallo Cheatah,
Ich danke dir für die schnelle Antwort. Ich werde mich drum kümmern, die korekten Zeilen durchzuführen und bis dann ;-)
Gruss
x-VieW
hi,
print << "END"
^ da fehlt doch das ;
besser so:
print <<"END";
...
END
Rolf
Hallo Rolf,
Ich habe es auch mit einem Simikolon(;) ausprobiert. Es hat nichts bewirkt!!!
Gruss
x-VieW
hi,
wie Cheatah schon sagte: prüf mal ob die Moduls installiert sind.
zu Net::SMTP;
Mach em Besten eine statusabfrage beim Erstellen des Objects:
$s = new Net::SMTP($smtp_host) or error("Keine Verbindung zu SMTP Host *$smtp_host*");
$s -> datasend() funtkioniert nicht auf jeder Maschine, machs besser so:
$s->mail($rcpt);
$s->to( $rcpt );
$s->data( $message );
$s->quit();
Die $message baust du vorher zusammen
# format the message
my $message = <<"--MSG",
From: $from
To: $rcpt
Subject: $subject
$msg
--MSG
Und vergiss das semikolon nicht am String Termiator;-)
Ein Script was funktioniert findest du hier
http://i-netlab.de/downloads
Rolf
Hi Rolf,
Vielen Dank für die nützliche Anweisungen.
.....
Ach!!! das Semikolon, werde ich nicht vergessen ;-)
Gruss
x-VieW