Spooky: sendmail funktioniert nicht

Hallo,
gleich zu Beginn sei gesagt, dass ich Perl-Anfänger bin. Ich bin gerade dabei mich einzuarbeiten und einige Scripte laufen auch schon. Nur mit dem "Form-Mailer" von der SELFHTML-Seite hab ich Probleme. Die Mails werden einfach nicht versendet.

Zur Info sei noch gesagt, ich rufe den Form-Mailer von einer anderen Domain aus auf. Aber das sollte doch trotzdem funktionieren!?

Ich arbeite mit "use strict;" und "use CGI::Carp qw(fatalsToBrowser);".

Im Browser erscheint folgende Fehlermeldung:

Software error:
Global symbol "$Sendmail_Prog" requires explicit package name at ordermail.pl line 12.
Global symbol "$mailto" requires explicit package name at ordermail.pl line 14.
BEGIN not safe after errors--compilation aborted at ordermail.pl line 17.

Hier noch der betreffende Quellcode:

--> SMTP-Programm zum Versenden der Mail:

$Sendmail_Prog = "/usr/bin/sendmail";

--> Ziel-Mailadresse, an die gesendet werden soll:

$mailto = "meinname@web.de";

Pfad zu sendmail hab ich überprüft. Hab auch schon im Forum geschaut.
Vielen Dank für die Hilfe!

  1. Tag Spooky.

    Ich arbeite mit "use strict;"

    Sehr löblich.

    Global symbol "$Sendmail_Prog" requires explicit package name at ordermail.pl line 12.
    Global symbol "$mailto" requires explicit package name at ordermail.pl line 14.

    Es liegt jedenfalls nicht an sendmail, sondern am Einsatz des strict-Pragmas, ohne zu wissen, warum man das tut.

    BEGIN not safe after errors--compilation aborted at ordermail.pl line 17.

    Diese Meldung resultiert aus den vorher gehenden.

    $Sendmail_Prog = "/usr/bin/sendmail";
    $mailto = "meinname@web.de";

    Lies zusätzlich noch die Erläuterungen zu my. Na, dämmert's :-)

    Siechfred

    1. erst mal vielen Dank für die Hinweise. Ich glaub allerdings ich hab da noch ein anderes Problem.

      Es liegt jedenfalls nicht an sendmail, sondern am Einsatz des strict-Pragmas, ohne zu wissen, warum man das tut.
      Lies zusätzlich noch die Erläuterungen zu my. Na, dämmert's :-)

      Ich muss also meine Variablen deklarieren lokal(my) reicht denke ich.
      Die Danke-Seite wird zwar geöffnet und habe auch keine Fehlermeldung mehr. Aber mails bekomme ich trotzdem nicht. Der Debugger zeigt auch keine Fehler an. Was kann das nur sein?

      use CGI;

      my $query = new CGI;
      my @names = $query->param;

      -------> interne Daten aus den erwarteten hidden-Feldern auslesen:

      my $delimiter = $query->param('delimiter');  # ---> Begrenzerzeichen zwischen name und  value
      my $returnhtml = $query->param('return');    # ---> URL für Dankeseite
      my $subject = $query->param('subject');      # ---> E-Mail-Subject

      $subject =~ s/\s/ /g;

      -------> Text der E-Mail aus den Formulardaten ermitteln:

      my $mailtext = "";
      foreach(@names) {
        my $name = $_;
        my @values = "";
        @values = $query->param($name);
        if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
          foreach my $value (@values) {
            $mailtext = $mailtext.$name;
            $mailtext = $mailtext.$delimiter;
            $mailtext = $mailtext.$value."\n";
          }
        }
      }

      -------> E-Mail versenden:

      open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
      print MAIL "To: $mailto\n";
      print MAIL "Subject: $subject\n\n";
      print MAIL "$mailtext\n";
      close(MAIL);

      -------> Dankeseite an Browser senden:

      print "Location: $returnhtml\n\n";

      1. Die Danke-Seite wird zwar geöffnet und habe auch keine Fehlermeldung mehr. Aber mails bekomme ich trotzdem nicht. Der Debugger zeigt auch keine Fehler an. Was kann das nur sein?

        Auf den ersten Blick sehe ich kein Problem, außer, dass weder $Sendmail_Prog noch $mailto definiert sind, was aber vermutlich nur ein C&P-Fehlerchen ist. Was steht denn im Errorlog? Versuche mal, eine E-Mail ohne das ganze Drumherum zu versenden:

        my $Sendmail_Prog = "/usr/lib/sendmail";  
        open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";  
        print MAIL "To: deine_adresse@example.org\n";  
        print MAIL "Subject: Testmail\n\n";  
        print MAIL "Dies ist ein Test\n";  
        close(MAIL);  
        print "Content-Type: text/plain\n\n";  
        print "Mail versandt.";
        

        Siechfred

        1. $Sendmail_Prog noch $mailto ist definiert, war nur nicht gepostet. Hatte nur "my" ergänzt.

          Hier ist der angezeigte error von Deinem Skript:
          The server encountered an internal error and was unable to complete your request.
          Error message:
          Premature end of script headers: testmail.pl
          If you think this is a server error, please contact the webmaster.
          Error 500

          Rechte hab ich auf 755 gesetzt.

          1. ERROR 500 hat sich erledigt. Hatte die erste Zeile im Skript vergessen - sorry.
            Das Skript funktioniert jetzt, eine Mail wird aber nicht versendet.

            1. Das Skript läuft und die Mail wird auch gesendet. Ich hatte den "" vor "web.de" vergessen.  Jetzt muss ich nur noch sehen, daß "mein" Skript auch funktioniert.
              Vielen vielen Dank erstmal!

              1. Ich habe nun festgestellt, daß das sendmail Verzeichnis nicht /usr/bin/sendmail ist, wie auf der Betreiber-Seite angegeben. sondern /usr/lib/sendmail.

                No comment....