Michael Vitz: Entschuldigt die Frage: warum läuft sendmail nicht

Hallo zusammen!

Ich weiss:
--ich bin Anfänger in cgi/perl
--das thema ist tausendmal behandelt worden
--ich schlage mich seit 2Stunden durchs Archiv

aber: mein script löft nicht, und ich weiss nich wieso!

#!/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my $Sendmail_Prog = "/bin/sendmail";
my $from = "ssss@gmx.de";
my $mailto = "calusp@gmx.de";
my $subject = "Dein Betreff";

open(MAIL,"|$Sendmail_Prog -T") || print "Mailprogramm error\n";
print MAIL "From: $from\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "Dein Text\n";
close(MAIL) || print "Fehler beim Mailversenden!";

ich erhalte den Fehler: Fehler beim Mailversenden!
wo kann der Fehler denn liegen?

Noch eine Frage (wo wir grad dabei sind)
was ist der Unterschied zwischen einer .cgi und einer .pl Datei, wenn jedesmal Perl drinsteckt?

Ich danke schonmal
Michael

  1. Hi,

    my $Sendmail_Prog = "/bin/sendmail";

    Vielleicht der Pfad zu sendmail, ich tippe auf so was wie:"/usr/lib/sendmail" o.ä..

    Rol

    1. Hallo!

      Ne, das is gecheckt, sonst käm ja: "Mailprogramm error\n";

      oder?

      Michael

  2. Hi,

    aber: mein script löft nicht, und ich weiss nich wieso!

    Dein Skript läßt mich daran zweifeln, daß Du es wissen willst. ;-)

    #!/bin/perl -w
    use strict;
    use CGI::Carp qw(fatalsToBrowser);

    Immerhin schon mal viele Pluspunkte. :-)

    my $Sendmail_Prog = "/bin/sendmail";

    Plattformabhängig, aber ... nun ja.

    open(MAIL,"|$Sendmail_Prog -T") || print "Mailprogramm error\n";
    close(MAIL) || print "Fehler beim Mailversenden!";

    Und zwar welcher Fehler genau? "$!" würde Dir das sagen.

    ich erhalte den Fehler: Fehler beim Mailversenden!

    Yep. Genau das und nichts anderes gibt Dein Skript aus.

    wo kann der Fehler denn liegen?

    Perl sagt es Dir - Dein Skript hört aber nicht hin.

    was ist der Unterschied zwischen einer .cgi und einer .pl Datei,
    wenn jedesmal Perl drinsteckt?

    CGI ist ein Interface, Perl eine Sprache.

    Es gibt Leute, die wollen gerne alle CGI-Anwendungen auf den ersten
    Blick als solche erkennen (egal, ob Perl oder nicht), und es gibt
    andere, die wollen gerne alle Perl-Skripte erkennen (egal, ob CGI
    oder nicht).
    Und es gibt Default-Konfigurationen von Webservern, die wiederum einer
    dieser beiden Religionen mehr anhängen als der anderen.
    Ich gehöre zur letzteren Fraktion - ob es CGI ist, sehe ich am Ein-
    satzfall bzw. am Installationsverzeichnis (könnte ja /cgi-bin heißen
    etc.).

    Viele Grüße
          Michael

    1. open(MAIL,"|$Sendmail_Prog -T") || print "Mailprogramm error\n";
      close(MAIL) || print "Fehler beim Mailversenden!";

      Und zwar welcher Fehler genau? "$!" würde Dir das sagen.

      wo soll ich das einbauen? hinter "||"?

      ich erhalte den Fehler: Fehler beim Mailversenden!

      Yep. Genau das und nichts anderes gibt Dein Skript aus.

      wo kann der Fehler denn liegen?

      Perl sagt es Dir - Dein Skript hört aber nicht hin.

      (sorry hab das script aus dem Archiv hier...)

      Dank schonmal
      Michael

      1. Hi,

        wo soll ich das einbauen? hinter "||"?

        open(MAIL,"|$Sendmail_Prog -t") or die "Kann Sendmail nicht oeffnen : $!\n";

        1. Hi,

          wo soll ich das einbauen? hinter "||"?

          open(MAIL,"|$Sendmail_Prog -t") or die "Kann Sendmail nicht oeffnen : $!\n";

          wenn ich das da einbau kommt: Fehler beim Mailversenden!

          bau ich das in die close zeile ein: Premature end of script headers

          ??? Gruss Michael

          1. Hi,

            open(MAIL,"|$Sendmail_Prog -t") or die "Kann Sendmail nicht oeffnen : $!\n";
            wenn ich das da einbau kommt: Fehler beim Mailversenden!

            Der Fehler trat ja schon vorher beim "close" auf, das tut er immer noch.

            bau ich das in die close zeile ein: Premature end of script headers

            Angenommen, Du hast dabei keinen Syntaxfehler eingebaut:

            Wo ist er denn, der HTTP-Header, den Dein CGI-Skript nach stdout auszugeben
            hätte? In Deinem Quelltext sehe ich nichts davon.
            Daß Du "nebenbei" auch eine Mail wegschickst, entbindet Dein Skript nicht
            von der Verpflichtung, die Schnittstelle zum Webserver korrekt zu bedienen.

            Viele Grüße
                  Michael

            1. Ok ich lerne sekündlich dazu!
              hier der neue code:

              keine Fehlermeldung mehr, aber auch keine E-Mail!(Hab zwei adressen getestet)

              #!/bin/perl -w

              use strict;
              use CGI::Carp qw(fatalsToBrowser);

              my $Sendmail_Prog = "/bin/sendmail";
              my $from = "ssss@gmx.de";
              my $mailto = "webmater@glauben-kultur.de";
              my $subject = "Dein Betreff";

              print "Content-type: text/html\n\n";
              print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
              print "<html><head><title>Testausgabe</title>\n";
              print "</head><body>\n";

              open(MAIL,"|$Sendmail_Prog -T");
              print MAIL "From: $from\n";
              print MAIL "To: $mailto\n";
              print MAIL "Subject: $subject\n\n";
              print MAIL "Dein Text\n";
              close(MAIL) or die "Kann mail nicht senden: $!\n";

              print "</body></html>\n";

              ?????
              Gruss Michael

              1. Hi,

                Ok ich lerne sekündlich dazu!

                das macht ja richtig Spaß, Dir zu antworten. :-)

                hier der neue code:
                keine Fehlermeldung mehr, aber auch keine E-Mail!(Hab zwei adressen getestet)

                Kann gut sein, daß Dein Skript jetzt tut, was es zu tun in der Lage ist.
                Das heißt natürlich noch lange nicht, daß beispielsweise der "sendmail"
                auf Deinem Server befugt ist, tatsächlich Mails wegzuschicken, also einen
                freigeschalteten SMTP-Server hat und was noch alles.

                my $from = "ssss@gmx.de";

                Hast Du denn hier eine Absenderadresse angegeben, unter welcher Du even-
                tuelle Fehlermeldungen auch selbst empfangen könntest?

                Außerdem kann die Mail irgendwo unterwegs verschütt gehen oder ggf. auch
                nicht zustellbar sein:

                my $mailto = "webmater@glauben-kultur.de";

                Hoppsala - soll der wirklich "webmater" heißen?

                open(MAIL,"|$Sendmail_Prog -T");

                Weil Du das mit einem entsprechenden Perl-Modul, das Dir direkt die SMTP-
                Schnittstelle anbieten würde, eventuell viel feiner (und transparenter)
                steuern könntest (und damit nicht auf die Existenz von "sendmail" ange-
                wiesen - dafür müßtest Du aber einiges selbst angeben, etwa die Adresse
                des erwähnten SMTP-Servers), hatte ich gleich am Anfang die Verwendung
                von "sendmail" nicht so ganz perfekt gefunden.

                Viele Grüße
                      Michael

                1. Kann gut sein, daß Dein Skript jetzt tut, was es zu tun in der Lage ist.
                  Das heißt natürlich noch lange nicht, daß beispielsweise der "sendmail"
                  auf Deinem Server befugt ist, tatsächlich Mails wegzuschicken, also einen
                  freigeschalteten SMTP-Server hat und was noch alles.

                  Die Seite ist bei kontent gehostet, da sollte das alles gehen...

                  my $from = "ssss@gmx.de";

                  Hast Du denn hier eine Absenderadresse angegeben, unter welcher Du even-
                  tuelle Fehlermeldungen auch selbst empfangen könntest?

                  Hab ich jetzt auch probiert: nix!

                  Hoppsala - soll der wirklich "webmater" heißen?

                  kleiner Tippfehler hatte ich inzwischen schon verbessert und hatte auch noch eine andere Adresse getestet, von daher...

                  open(MAIL,"|$Sendmail_Prog -T");

                  Weil Du das mit einem entsprechenden Perl-Modul, das Dir direkt die SMTP-
                  Schnittstelle anbieten würde, eventuell viel feiner (und transparenter)
                  steuern könntest (und damit nicht auf die Existenz von "sendmail" ange-
                  wiesen - dafür müßtest Du aber einiges selbst angeben, etwa die Adresse
                  des erwähnten SMTP-Servers), hatte ich gleich am Anfang die Verwendung
                  von "sendmail" nicht so ganz perfekt gefunden.

                  Ich denke das wär für den Anfang was viel auf einmal und ich weiss auch nich ob das unterstützt wird. Für sendmail wird allerdings von Kontent Reklame gemacht (extra als Leistung erwähnt) und dann würde ich das gern nutzen können, zumal dies nur ein Testscript ist das ausloten sollte wo es bei einem anderen (free-download-selbstkofiguriert-)FormMail.pl hakt!
                  Kontent bietet ein php-script an, das aber für einen DAU nicht zu kofigurieren ist und bis ich das ins Layout gepresst habe...eigentlich wollte ich für die Erstellung eines Formulars (Ursprungsproblem) nach Perl nicht noch PHP, Chinesisch, C++, Gälisch und hintertibetanische Paarungsrituals-Dialekte lernen...
                  Obwohl ersteres und letzteres in der mittelfristigen Planung durchaus schon berücksichtigt sind!

                  meinst du das es was bringt das Script mit der Frage weshalb es nicht funzt mal an den Kontent-support zu schicken?

                  Danke für deine Hilfe
                  Warst ein strenger und anspruchsvoller Lehrer

                  Schüler Michael

                  Viele Grüße
                        Michael

                  1. klein -t

                    und ein neuer Tag haben es zum laufen gebracht!

                    hatte -T geschrieben weil das in einem vorigen testlauf im gegensatz zur kleinschreibung keinen Fehler ausgab
                    und wegen:

                    selfhtml80/cgiperl/sprache/intro.htm#aufruf

                    ...naja...

                    bin jetzt viel schlauer...

                    Danke an alle
                    Michael Vitz

                    übrigens der große Bruder läuft auchschon, obwohl ich nicht weiss warum, denn ich tat nichts anderes als gestern!??? BIN GLÜCKLICH!!!

                  2. Hi Michael,

                    Warst ein strenger und anspruchsvoller Lehrer

                    Du bist ein lernwilliger Schüler - recht so!
                    Mehr solche in diesem Forum, bitte ...

                    Viele Grüße
                          Michael

  3. Moin,

    geht's jetzt ?

    Ich würde mal stark vermuten, daß die Zeile
     print MAIL "Dein Text\n";

    so lauten müßte:

    print MAIL "Dein Text\n\n";

    Gruß
    Jean-Luc

  4. Hallo Michael,

    open(MAIL,"|$Sendmail_Prog -T") || print "Mailprogramm error\n";

    der taint Schalter schreibt sich "-t" also bitte kleinschreiben.

    Viele Grüße, Rolf

    Ahjow: Mit dem Perl Modul Net::SMTP (wie Michael Schröpl schon sagte) kannst Du 's Problem eigentlich besser lösen. Als SMTP Host nimm oifach deinen Server oder irgendeinen anderen wo sendmail läuft ;-)