Andreas: Perl -> Sendmail -> Fehler: "Illegal Seek"

Hi,

bei mir klappt das Versenden von eMails via Perl -> Sendmail nicht mehr. Dieses einfache Testscript erzeugt den Fehler:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Sendmail öffnen...";
$!="";
open(MAIL,"|/usr/lib/sendmail -t");
print "Fehlermeldung: $!<br>\n";
print "Sende Mailheader...<br>\n";
print MAIL "To: az@softengine.de\n";
print MAIL "From: webmaster@softengine.de\n";
print MAIL "Subject: Testmail\n\n";
print "Sende Mailbody...<br>\n";
print MAIL "Test\n\n";
print "Schliesse Sendmail...";
$!="";
close(MAIL);
print "Fehlermeldung: $!<br>\n";
exit;

Ausgabe des Scripts:

Sendmail öffnen...Fehlermeldung: Illegal seek
Sende Mailheader...
Sende Mailbody...
Schliesse Sendmail...Fehlermeldung:

Die eMail wird nicht verschickt.Wer kennt eine Lösung für dieses Problem?

Ciao
Andreas

  1. Hallo,

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "Sendmail öffnen...";
    $!="";
    open(MAIL,"|/usr/lib/sendmail -t");
    print "Fehlermeldung: $!<br>\n";
    print "Sende Mailheader...<br>\n";
    print MAIL "To: az@softengine.de\n";
    print MAIL "From: webmaster@softengine.de\n";
    print MAIL "Subject: Testmail\n\n";
    print "Sende Mailbody...<br>\n";
    print MAIL "Test\n\n";
    print "Schliesse Sendmail...";
    $!="";
    close(MAIL);
    print "Fehlermeldung: $!<br>\n";
    exit;

    Das mit dem -> »» $!=""; kommt mir sowieso irgendwie spanisch vor. Vielleicht ist es etwas, was ich noch nicht kenne, aber gesehen hab ichs vorher noch nie. Versuch mal den Ausschnitt von mir, das funktioniert ,zumindest auf meinem Server, bestimmt. Ggf. musst du noch den sendmail Pfad ändern.

    open (MAIL, "| /usr/sbin/sendmail -t") or die "Cant send mail : $!\n";
       print MAIL "From: fakeserver@mydomain.com\n";
       print MAIL "To: $email\n";
       print MAIL "Subject: $subject\n\n";
       print MAIL "$text\n";
       close MAIL;

    $xNeTworKx.

    1. $! ist eine dieser Kurzen Standardvariablen von Perl. $OS_ERROR ist die lange Schreibweise.

      Im PerlFAQ steht folgendes:

      $OS_ERROR
      $ERRNO
      $!
      If used numerically, yields the current value of the C errno variable, with all the usual caveats. (This means that you shouldn't depend on the value of $! to be anything in particular unless you've gotten a specific error return indicating a system error.) If used an a string, yields the corresponding system error string. You can assign a number to $! to set errno if, for instance, you want "$!" to return the string for error n, or you want to set the exit value for the die() operator. (Mnemonic: What just went bang?)
      Also see Error Indicators.

      Zur Fehlermeldung: Kann es sein, dass der Pfad zu sendmail nicht (mehr) stimmt?

      1. $! ist eine dieser Kurzen Standardvariablen von Perl. $OS_ERROR ist die lange Schreibweise.

        Das weis ich, sonst hätt ich es wohl nicht verwendet, aber $!="" hab ich in der Form noch nie gesehen.

        $xNeTworKx.

      2. Hi,

        leider stimmt der Path zu Sendmail. Wenn ich dort einen falschen Path angebe, steht in $! der Fehler "No such file or directory"...

        Ciao
        Andreas

    2. Hi,

      mit dem $!="" will ich nur sichergehen, dass in der Variable keine Fehlermeldung steht, die Nichts mit dem Befehl zum Öffnen oder Schließen zu tun hat. Ansonsten ist das nur eine vielleicht etwas paranoide Anweisung.

      Ciao
      Andreas