Monica: Formular-Verarbeitung funktioniert nicht

Hallo!

Ich brüte über einem an sich einfachen Formular, habe auch die Diskussion hierzu im Forum studiert, bringe es aber trotzdem nicht zum Funktionieren. Nach dem Absenden erscheint statt der Dankeseite stets die Fehlermeldung HTTP 500, der Server könne das selfmail.pl nicht auffinden - obwohl ich es im angezeigten Pfad hochgeladen habe. Daten werden keine übermittelt.
Dabei funktionierte vor einiger Zeit ein nahezu gleiches Formular über denselben Host mit exakt derselben E-Mail-Adresse problemlos.
Ich wäre Euch daher sehr dankbar, wenn Ihr sowohl mein selfmail.pl als auch das Formular überprüfen und mich auf meinen Denkfehler hinweisen könntet. Vielen Dank im Voraus für Eure geschätzte Hilfe!

Der Link zu meinem Formular-Entwurf: http://www.seidler.ch/Indienfreunde/Dezent/Spende.html

Mein selfmail.pl gemäss SELFHTML-Vorlage von Stefan Münz und Pfad-Angabe meines Hosts:

#!/usr/bin/perl

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

$mailto = "meine E-Mail-Adresse";

use CGI;

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

$delimiter = $query->param('delimiter');
$returnhtml = $query->param('return');
$subject = $query->param('subject');

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

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

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);

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

  1. Ich brüte über einem an sich einfachen Formular, habe auch die Diskussion hierzu im Forum studiert, bringe es aber trotzdem nicht zum Funktionieren. Nach dem Absenden erscheint statt der Dankeseite stets die Fehlermeldung HTTP 500, der Server könne das selfmail.pl nicht auffinden

    Nein, ein 500'er Fehler ist ein Fehler im Skript, der vielfältige Ursachen haben kann.

    Mein selfmail.pl gemäss SELFHTML-Vorlage von Stefan Münz und Pfad-Angabe meines Hosts:

    Leider muss man sagen, dieses Skript ist alles andere als empfehlenswert - im, gegenteil es ist Mist. Ich würd mir ein anderes suchen, bzw. mach' ich mittlerweile Mailformulare lieber mit PHP, da es leichter umzusetzen ist.

    Wenn du aber Wissen willst, was in dem Skript falsch läuft, versuch es mal mit den folgenden Zeilen:

    BEGIN {  
    use CGI::Carp qw(fatalsToBrowser warningsToBrowser)  
    }  
    
    

    Struppi.

    1. Vielen Dank für Eure Hinweise! Manches klingt noch ziemlich kryptisch für mich, aber ich werde mir die Sache und Eure Links morgen genau ansehen (zurzeit muss ich arbeiten :-). Sehr wahrscheinlich melde ich mich dann nochmals mit Rückfragen. PHP beherrsche ich leider nicht.

      Gruss und Dank,
      Monica

    2. Wenn du aber Wissen willst, was in dem Skript falsch läuft, versuch es mal mit den folgenden Zeilen:

      BEGIN {

      use CGI::Carp qw(fatalsToBrowser warningsToBrowser)
      }

      
      >   
        
      Hallo Struppi,  
      wenn ich obige Befehlszeile einfüge, ändert sich leider nichts. Es erscheint dieselbe HTTP 500 Internet Serverfehleranzeige wie zuvor: "Die Website kann diese Seite nicht anzeigen."  
        
      Gruss,  
      Monica
      
      1. wenn ich obige Befehlszeile einfüge, ändert sich leider nichts. Es erscheint dieselbe HTTP 500 Internet Serverfehleranzeige wie zuvor: "Die Website kann diese Seite nicht anzeigen."

        und wenn du das einfügst?

        BEGIN {  
        print "Content-Type: text/html\n\n";  
        }  
        
        

        Struppi.

        1. Hallo Stuppi,

          ich hatte auch damit keinen Erfolg, irgendwie scheint der Server nicht zu begreifen, dass ich einen Vorgang auslösen und nicht nur von einer Seite zur anderen blättern will, seufz ... Kann es sein, dass ich auf der Formularseite selber einen Riesenfehler habe?
          http://www.seidler.ch/Indienfreunde/Dezent/Spende.html

          Mein selfmail.pl sieht nach Euren Tipps mittlerweile so aus. Kannst auch Du bitte einen gnädigen Blick darauf werfen? Danke für Deine Geduld!

          #!/usr/bin/perl

          use warnings;
          use strict;

          my $Sendmail_Prog = "/usr/sbin/sendmail";

          my $mailto = "meine E-Mail-Adresse";

          use CGI;
          use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
          print "Content-Type: text/html\n\n";

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

          my $delimiter = $query->param('delimiter');
          my $returnhtml = $query->param('return');
          my $subject = $query->param('subject');

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

          my $mailtext = "";
          foreach(@names) {
            $name = $_;
            my @values = "";
            my @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";
              }
            }
          }

          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);

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

  2. Mein selfmail.pl gemäss SELFHTML-Vorlage von Stefan Münz und Pfad-Angabe meines Hosts:

    Sorry aber das ist schon ziemlich angejahrt

    #!/usr/bin/perl

    use warnings;
    use strict;

    #for debugging
    use CGI::Carp(fatalsToBrowser);

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

    use strict zwingt dich zu:

    my $Sendmail_Prog ...

    $mailto = "meine E-Mail-Adresse";

    my $mailto ...

    Der Output des Mails ist etwas ungenügend
    Es fehlen zum Beispiel Angaben über Content-Type, Mime-Type im Mail Header.
    Besonders schlimm aber ist, dass der Autor keine Bestätigung zu seiner gemachten Spendenzusage erhält. Eine Umleitung auf eine Dankeseite ist zu wenig.
    Ferner fehlt jede Art von Behandlung fehlender Angaben.

    Dein Formular.
    Gewöhne dir an <label> Felder zu verwenden.
    Sie fördern die usabilty ganz ungemein.
    Den Reset Button kannst du entfernen. Es gibt ja nichts zu resetten.

    Falls es dich interessiert.
    Das Thema Formmailer ist nicht trivial.
    Auf http://www.elcappuccino.ch/cgi/mail/docserv.pl
    und http://www.elcappuccino.ch/cgi/mail/sfm_wrapper.pl

    Siehst du eine Demo.
    Es kann für dich overkill sein. Aber es kommt der Idee einiges näher wie man es tun sollte.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Vielen Dank, Beat, für Deine eingehenden Hinweise und Tipps zum Formular (ich bin mit den Feld-Vorgaben auch noch nicht glücklich). Ich versuche, Deine Anregungen morgen umzusetzen. Möglicherweise melde ich mich dann nochmals.

      Gruss,
      Monica

    2. Hallo Beat,

      Deine Formmailer-Vorlage überfordert mich tatsächlich ziemlich, sorry ...
      Denkst Du, dass ich das Münz-Formular (veraltet hin oder her) überhaupt nicht mehr anwenden kann? Mit den vorgeschagenen selfmail.pl-Ergänzungen strict klappt es noch nicht. Auch verrät mir der Browser nichts Näheres zur Fehlerquelle.

      Müsste ich nicht auch an weiteren Stellen dieses "my" einfügen, z. B. bei my $query = new CGI;
      my @names
      my $delimiter
      ?

      Ich habe das mal durchgespielt, jedoch wiederum ohne Erfolg.

      Darf ich Dich nochmals um Deine geduldige Hilfe bitten?

      PS. Was im Formular selber steht und ausgelöst wird (Bestätigung), kann ich selbstverständlich immer noch verbessern, wenn der Versandvorgang erst einmal klappt.

      1. Hallo Beat,

        Deine Formmailer-Vorlage überfordert mich tatsächlich ziemlich, sorry ...

        Es ist keine Vorlage. Es ist ein Modul, das erwartet, in ein Script eingebunden zu werden.
        Es ist aber noch nicht fertig dokummentiert.
        Das Modul passt aber nicht in deinen jetzigen Ablauf, der aber betrieblich ungenügend ist.

        Denkst Du, dass ich das Münz-Formular (veraltet hin oder her) überhaupt nicht mehr anwenden kann?

        Anwenden schon. Aber die User werden böse.
        Sie haben keine Chance auf eine Vorschau.
        Sie bekommen keine Archivversion ihres gesendeten Inhalts.
        Spam hat alle Chancen.

        Mit den vorgeschagenen selfmail.pl-Ergänzungen strict klappt es noch nicht. Auch verrät mir der Browser nichts Näheres zur Fehlerquelle.

        hast du genügend Dateirechte gesetzt?
        Ein Error 500 verweist auf Fehler vor der Scriptsausführung.

        Müsste ich nicht auch an weiteren Stellen dieses "my" einfügen, z. B. bei my $query = new CGI;

        Unter use strict muss jede Variable, wenn sie das erste mal im Script verwendet wird, mit my declariert werden.
        Dies sagt dem programm. welchem Block-Scope eine Variable angehört.

        Beispiel:

        use strict;  
        my $var = "hallo",  
        print $var;  # hallo  
          
        {  
          # wir sind in einem block  
          my $var = "ganz was anderes";  
          print $var;  #ganz was anderes  
        }  
        {  
          # wir sind in einem block  
          $var = $var . ' Welt';  
          print $var;  # hallo Welt  
        }  
        print $var;  # hallo Welt
        

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Hallo Beat,

          vielen Dank für Deine Geduld!

          Anwenden schon. Aber die User werden böse.
          Sie haben keine Chance auf eine Vorschau.
          Sie bekommen keine Archivversion ihres gesendeten Inhalts.
          Spam hat alle Chancen.

          Ich glaube nicht, dass die User dieser Site böse werden ;-). Es geht weder um eine Bestellung noch um eine Zusage, sondern lediglich um eine Anfrage. Da habe ich selber ehrlich gesagt selten eine Vorschau serviert bekommen. (Nicht einmal beim Amazon-Kundendienst gibt es übrigens eine Archivversion, sondern lediglich ein Dankeschön nach dem Absenden der Anfrage!) Hat mich aber auch nie beunruhigt, denn es wird ja keine Verpflichtung eingegangen ...
          Das mit dem Spam ist mir voll bewusst und käme als Nächstes dran. Aber solange das Teil nicht funzt, hat ja auch Spam keine Chance.

          hast du genügend Dateirechte gesetzt?

          Das frage ich mich allmählich auch, aber bisher ging ich davon aus. Ich gehe dem nochmals nach.

          Herzlichen Dank so weit!
          Monica

    3. "My" selfmail.pl sieht nach Euren Tipps übrigens mittlerweile so aus. Kannst Du bitte einen gnädig-kritischen Blick darauf werfen? Danke!

      #!/usr/bin/perl

      use warnings;
      use strict;

      my $Sendmail_Prog = "/usr/sbin/sendmail";

      my $mailto = "meine E-Mail-Adresse";

      use CGI;
      use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
      print "Content-Type: text/html\n\n";

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

      my $delimiter = $query->param('delimiter');
      my $returnhtml = $query->param('return');
      my $subject = $query->param('subject');

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

      my $mailtext = "";
      foreach(@names) {
        $name = $_;
        my @values = "";
        my @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";
          }
        }
      }

      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);

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

      1. use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
        print "Content-Type: text/html\n\n";

        Wo ist das BEGIN? das war wichitg.

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

        my @names = $query->param;

        my $mailtext = "";
        foreach(@names) {
          $name = $_;

        my $name = $_;

        Wobei das umständlich ist.

        foreach my $name (@names) {

        my @values = "";
          my @values = $query->param($name);

        Die erste Zeile kann weg.

        open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";

        Hier ist eine Prüfung, ob $Sendmail_Prog existiert sinnvoll, daher vor diese Zeile:

        die "Sendmail existiert nicht!" unless -d $Sendmail_Prog;

        Struppi.

        1. Hallo Stuppi - danke für die rasche Rückmeldung, bei mir geht's jeweils etwas länger...

          Wo ist das BEGIN? das war wichitg.

          Tschuldigung!

          my $mailtext = "";
          foreach(@names) {
            $name = $_;

          my $name = $_;

          Wobei das umständlich ist.

          foreach my $name (@names) {

          Hab ich Dich hier richtig verstanden?

          Hier ist eine Prüfung, ob $Sendmail_Prog existiert sinnvoll, daher vor diese Zeile:

          die "Sendmail existiert nicht!" unless -d $Sendmail_Prog;

          Das habe ich jetzt exakt so übernommen.

          Neuster Stand:

          #!/usr/bin/perl

          use warnings;
          use strict;

          my $Sendmail_Prog = "/usr/sbin/sendmail";

          my $mailto = "meine E-Mail-Adresse";

          use CGI;

          BEGIN {
          use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
          print "Content-Type: text/html\n\n";
          }

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

          my $delimiter = $query->param('delimiter');
          my $returnhtml = $query->param('return');
          my $subject = $query->param('subject');

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

          my $mailtext = "";
          foreach my $name (@names) {
            my @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";
              }
            }
          }

          die "Sendmail existiert nicht!" unless -d $Sendmail_Prog;

          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);

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

          Resultat nach dem Hochladen: nix, es ist zum Haareraufen!!

          1. Hallo haareraufende!

            ... schöner Name ;)

            Resultat nach dem Hochladen: nix, es ist zum Haareraufen!!

            Blöde Fragen:

            1. Ein simples »Hallo Welt«-Script... wird es ausgeführt?

            2. Script mit Endung .cgi oder .pl gespeichert? Wenn .cgi, Rechte auf 0755 gesetzt?

            3. Ist Perl an der richtigen Stelle? (Shebang)

            4. Wer ist Dein Provider, wo ist Dein Mietvertrag?

            P.S.: zweiter Teil der vierten Frage streichen!

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --
            _ - jenseits vom delirium - _

               Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?