Marc: Brauche Hilfe: CGI-Skript läuft nicht (Internal Server Error)

Hallo allerseits,

ich möchte mir Daten aus einem Formular senden lassen.
Da die Versendung per E-Mail scheinbar nicht immer funktioniert, wollte ich es per CGI-Skript machen.
Habe leider überhaupt keinen Schimmer vom Programmieren,
deshalb habe ich ein fertiges Skript versucht zu modifizieren (nach der "Abschreibe-Methode", wie gesagt hab ich keine Ahnung von Perl, CGI oder wasauchimmer).

Irgendwas hab ich aber scheinbar falsch gemacht, hier mein Skript:

#!/usr/bin/perl

&parse_form_data (*formular_feld);
&start_mail();

#***************************************************

Fuer jedes Formular Feld ein Eintrag der Form:

$Variable = $formular_feld{'FORMULA-FELD-NAME'};

#***************************************************

$Vorname = $formular_feld{'Vorname'};
$Nachname = $formular_feld{'Nachname'};
$Land = $formular_feld{'Land'};
$E-Mail = $formular_feld{'E-Mail'};
$Frage1 = $formular_feld{'Frage1'};
$Frage2 = $formular_feld{'Frage2'};
$Frage3 = $formular_feld{'Frage3'};
$Kommentar = $formular_feld{'Kommentar'};
$Email_Empfaenger = $formular_feld{'an'};
$Email_Von = $formular_feld{'von'};
$Email_Antwort_An = $formular_feld{'antwort'};
$Betreff = $formular_feld{'betreff'};
$Ziel = $formular_feld{'ziel'};

#***************************************************

Zwischen <<Ende_Mail und Ende_Mail können Sie den

Email Text angeben, die oben angegebenen Variablen

können dabei verwendet werden.

#***************************************************
$Mail_Text = <<Ende_Mail;

Email von der Website

Vorname: $Vorname
Nachname: $Nachname
Land: $Land
E-Mail: $E-Mail
Frage1: $Frage1
Frage2: $Frage2
Frage3: $Frage3
Kommentar: $Kommentar

Ende_Mail
#*******************************************************************************

AB HIER KEINE AENDERUNGEN MEHR VORNEHMEN !!!

#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
open (SENDMAIL, "| /usr/sbin/sendmail -t -n");
print SENDMAIL "From: $Email_Von\n";
print SENDMAIL "To: $Email_Empfaenger\n";
print SENDMAIL "Reply-To: $Email_Antwort_An\n";
print SENDMAIL "Subject: $Betreff\n";
print SENDMAIL "\n";
print SENDMAIL $Mail_Text;
print "Location: $Ziel","\n\n";
exit(0);
sub parse_form_data
{
 local (*FORM_DATA) = @_;
 local ( $request_method, $query_string, @key_value_pairs, $key_value, $key, $value);
 $request_method = $ENV{'REQUEST_METHOD'};
 if ($request_method eq "GET") {
  $query_string= $ENV{'QUERY_STRING'};
 } elsif ($request_method eq "POST") {
  read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
 }
 @key_value_pairs = split (/&/, $query_string);
 foreach $key_value (@key_value_pairs) {
  ($key, $value) = split (/=/, $key_value);
  $value =~ tr/+/ /;
  $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
 if (defined($FORM_DATA{$key})) {
  $FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value);
 } else {
  $FORM_DATA{$key} = $value;
 }
}
}
sub start_mail
{
$Email_Empfaenger = $formular_feld{'an'};
$Email_Von = $formular_feld{'von'};
$Email_Antwort_An = $formular_feld{'antwort'};
$Betreff = $formular_feld{'betreff'};
$Ziel = $formular_feld{'ziel'};
}

Vielen herzlichen Dank für Eure Hilfe!

  1. Hallo

    Das Script studier ich jetzt sicher nicht auf Fehler durch,
    aber dieser FormMailer hier funktioniert grundsätzlich problemlos:

    http://www.worldwidemart.com/scripts/formmail.shtml

    LG
    Aquariophile

  2. Hi Marc,

    Irgendwas hab ich aber scheinbar falsch gemacht

    <cite>"funktioniert nicht" funktioniert nicht. Fehlerbeschreibung, bitte.</cite>

    &parse_form_data (*formular_feld);

    Weh-oh-weg. Das scheint ja aus der frühen Programmier-Steinzeit zu stammen.

    open (SENDMAIL, "| /usr/sbin/sendmail -t -n");

    Dir ist bewußt, wovon Du Dich an dieser Stelle abhängig gemacht hast?
    Und daß eine Fehlerbehandlung Dir das Leben sehr erleichtern würde?

    Vielen herzlichen Dank für Eure Hilfe!

    Ich fürchte, die beste Hilfe wird sein, Dir zu sagen:

    "Dieses Skript taugt nichts, weil es nur im absoluten Schönwetterbetrieb
    halbwegs funktionieren wird und beim kleinsten Problemchen alle Viere
    von sich strecken wird - insbesondere ohne Dir irgend einen Anhaltspunkt
    zu liefern, wo das Problem steckt.
    Insbesondere ist es nicht darauf ausgelegt, von jemandem eingesetzt zu
    werden, der nicht selbst programmieren kann."

    Also wirst Du Dir entweder ein wesentlich robusteres Skript suchen oder
    selbst programmieren lernen müssen.

    Viele Grüße
          Michael