x-VieW: CGI-Konflikt

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

  1. 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

    --
    X-Will-Answer-Email: No
    1. 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

  2. hi,

    print << "END"

    ^ da fehlt doch das ;

    besser so:
    print <<"END";
    ...
    END

    Rolf

    1. Hallo Rolf,
      Ich habe es auch mit einem Simikolon(;) ausprobiert. Es hat nichts bewirkt!!!
      Gruss
      x-VieW

  3. 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:

    Neues Objekt erstellen

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

    Ab geht die Post

    $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

    1. Hi Rolf,

      Vielen Dank für die nützliche Anweisungen.
      .....
      Ach!!! das Semikolon, werde ich nicht vergessen ;-)

      Gruss
      x-VieW