Peter Dietlein: CONTENT-TYPE - immer notwendig???

Habe heute mal das Mail-Script (aus Goto Perl5 M.Schilli - netter Schmöker BTW) ausprobiert (sieh unten). Funktioniert auch ganz prima, aber erst wenn ich einen Content Type anfüge.
print "Content-type: text/html\n\n";
print "hallo\n";

Mach ich das nicht, erscheint einf Fehlermeldung. Hmh, aber das kann doch nicht angehen, daß ich jedesmal einen Text mit ausgeben muß, wenn ich über eine URL (Browser) ein Perl-Script anstoße. Oder doch? Kann man das umgehen? Auf jedenfall Danke für alle antworten, bin wie immer sehr gespannt.

cu
Peter

#!/usr/bin/perl -w

use Mail::Send;
                      
$mail=Mail::Send->new(                      # Neues Mail-Objekt
          Subject => "Wichtige Nachricht!", # Betreff
          To => 'user@remote.host.com',     # Empfänger
          Cc => 'anotheruser@site.com',     # Kopie an (optional)
          Bcc => 'yetanotheruse@site.com'); # Blindkopie an (optional)

$mail->set("From", 'me@there.com');         # Absender (optional)
$mail->set("Reply-To", 'me@there.com');     # Rückadresse (optional)

$mailhandle = $mail->open("sendmail");      # Mail-Programm starten
                        
print $mailhandle <<EOT;                    # Text erstellen
Hier kommt der
Brieftext.
EOT
                        
$mailhandle->close();                       # Schließen und senden

  1. hi!

    Mach ich das nicht, erscheint einf Fehlermeldung. Hmh, aber das kann doch nicht angehen,
    daß ich jedesmal einen Text mit ausgeben muß, wenn ich über eine URL (Browser) ein
    Perl-Script anstoße. Oder doch?

    Doch. Ohne HTTP-Header erzeugt jedes vom Browser aus aufgerufene CGI-Skript eine Fehlermeldung.

    Kann man das umgehen?

    Nein.

    bye, Frank!

    1. Doch. Ohne HTTP-Header erzeugt jedes vom Browser aus aufgerufene CGI-Skript eine Fehlermeldung.

      Kann man das umgehen?

      Nein.

      bye, Frank!

      Frank ja aber, Ausnahmen....

      zB # in diesem Fall kein "print content-type"
      $dok = "http://homepage";
      print "location: $dok";

      ... bestätigen deine oben aufgestellte Regel oder /**/

      Rolf

      1. hi!

        Doch. Ohne HTTP-Header erzeugt jedes vom Browser aus aufgerufene CGI-Skript eine
        Fehlermeldung.
        Frank ja aber, Ausnahmen....
        zB # in diesem Fall kein "print content-type"
        $dok = "http://homepage";
        print "location: $dok";

        "Location:" ist ebenfalls ein HTTP-Header. Dieses Beispiel unterstützt also meine Aussage. Abgesehen davon, dass das von dir gepostete Beispiel streng genommen gar kein HTTP-Header ist, da die abschließende Leerzeile fehlt.

        bye, Frank!

        1. "Location:" ist ebenfalls ein HTTP-Header. Dieses Beispiel unterstützt also meine Aussage. Abgesehen davon, dass das von dir gepostete Beispiel streng genommen gar kein HTTP-Header ist, da die abschließende Leerzeile fehlt.

          bye, Frank!

          Hallo Frank, Donnerwetter! Du guckst aber auch genau hin.... Stimmt da muss ne Leerzeile folgen.

          Viele Grüße, Rolf

          Literatur: http://www.jmarshall.com/easy/cgi/german/cgi_anmerkungen.html#location

          1. "Location:" ist ebenfalls ein HTTP-Header. Dieses Beispiel unterstützt also meine Aussage. Abgesehen davon, dass das von dir gepostete Beispiel streng genommen gar kein HTTP-Header ist, da die abschließende Leerzeile fehlt.

            bye, Frank!

            Hallo Frank, Donnerwetter! Du guckst aber auch genau hin.... Stimmt da muss ne Leerzeile folgen.

            Viele Grüße, Rolf

            Literatur: http://www.jmarshall.com/easy/cgi/german/cgi_anmerkungen.html#location

            Ich will ja nicht unken, aber eigentlich müssen zwei Leerzeilen folgen..., so in etwa...

            $url = "http://www.homepage.de/index.html\n\n";
            print "location: $url";

            Gruß und Danke für die Antworten
            Peter

            1. hi!

              Ich will ja nicht unken, aber eigentlich müssen zwei Leerzeilen folgen..., so in etwa...
              $url = "http://www.homepage.de/index.html\n\n";
              print "location: $url";

              Das ist eine Leerzeile. Ein \n steht nicht für eine Leerzeile, sondern für einen Zeilenvorschub ("newline"). Mit dem ersten \n springt er in die nächste Zeile, mit dem zweiten \n nochmal eine Zeile weiter. Diese Zeile bleibt dann leer, also eine Leerzeile.

              bye, Frank!