Volker: Funktioniert einfach nicht

Hallo,
seit Wochen versuche ich eine E-mail aus einem Perl-prg zu senden. Leider funktioniert es immer noch nicht. Heute habe ich einfach den Program-Code aus SELFHTML genommen und mit einem einfachen Formular angesprochen. Getestet bei mir zu Hause, keine Fehlermeldung keine Email empfangen. Getestet bei externern Server ( dessen Sendmail Pfad der gleiche ist wie im Program ) funktioniert auch nicht. Ich habe jetzt schon viele Stunden ausprobiert. Wenn jemand die Geduld hat mir meinen Fehler zu erklären, wäre ich sehr, sehr dankbar.
Beste Grüße
Volker

Perl-prg:

if($ENV{'REQUEST_METHOD'} eq 'GET')
{
  $Daten = $ENV{'QUERY_STRING'}
}
else
{
  read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
}

@Formularfelder = split(/&/, $Daten);
foreach $Feld (@Formularfelder)  
{
  ($name, $value) = split(/=/, $Feld);  
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/<!--(.\n)*-->//g;      
  $Formular[$i] = $name;  
  $i = $i + 1;
  $Formular[$i] = $value;  
  $i = $i + 1;
}

$Mailprogramm = "/usr/lib/sendmail";  # siehe Erläuterung unten
$MailSubject = "Formluar-Feedback";   # siehe Erläuterung unten
$Empfaenger = "adler40@asamnet.de"; # siehe Erläuterung unten
$SenderName = $Formular[1];           # siehe Erläuterung unten
$SenderMail = $Formular[3];           # siehe Erläuterung unten

open(MAIL,"$Mailprogramm -t") die;

print MAIL "To: $Empfaenger\n";
print MAIL "From: $SenderMail $SenderName\n";
print MAIL "Subject: $MailSubject\n\n";

$i = 0;
$max = $#Formular;
for($i=0;$i<=$max;$i=$i+2)
{
print MAIL "$Formular[$i]: $Formular[$i+1]\n";
}
close(MAIL);

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>Danke!</title>\n";
print "</head>\n";
print "<body bgcolor=#FFFFFF text=#000000 link=#009900 vlink=006600 alink=#0000FF>\n";
print "<h1>Danke</h1>\n";
print "Wir freuen uns, daß Sie unser Formular ausgefüllt \n";
print "haben. Hier zur Kontrolle Ihre Angaben:<p>\n";

for($i=0;$i<=$max;$i=$i+2)
{
print "<b>$Formular[$i]:</b> $Formular[$i+1]<br>\n";
}
print "<p><hr noshade size=1><p>";
print "<i>Ihr Name, <a href="mailto:IhrName@Provider.xx">IhrName@Provider.xx</a></i>";
print "</body>\n";
print "</html>\n";

HTML-Seite:
<hr><form method=POST action="/cgi-bin/sendtest.pl">
Vorname: <input name=Firstname size=30><br>
<input type="submit" value="Abschicken">
</form><hr>

  1. Hi,

    ich hab mal etwas eingefuegt:

    if($ENV{'REQUEST_METHOD'} eq 'GET')

    »»  {
    »»   $Daten = $ENV{'QUERY_STRING'}
    »»  }

    else

    »»  {
    »»   read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
    »»  }

    @Formularfelder = split(/&/, $Daten);
    foreach $Feld (@Formularfelder)

    »»  {
    »»   ($name, $value) = split(/=/, $Feld);  
    »»   $value =~ tr/+/ /;
    »»   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    »»   $value =~ s/<!--(.\n)*-->//g;      
    »»   $Formular[$i] = $name;  
    »»   $i = $i + 1;
    »»   $Formular[$i] = $value;  
    »»   $i = $i + 1;
    »»  }

    $Mailprogramm = "/usr/lib/sendmail";  # siehe Erläuterung unten
    $MailSubject = "Formluar-Feedback";   # siehe Erläuterung unten
    $Empfaenger = "adler40@asamnet.de"; # siehe Erläuterung unten
    $SenderName = $Formular[1];           # siehe Erläuterung unten
    $SenderMail = $Formular[3];           # siehe Erläuterung unten

    if (not (-x $Mailprogramm)) {
      print "Content-Type: text/html\n\n";
      print "Baebaebae.. Ich darf nicht :) \n";
      exit;
    }

    open(MAIL,"$Mailprogramm -t") die;

    ..

    Ciao,
      Wolfgang

    1. if (not (-x $Mailprogramm)) {
        print "Content-Type: text/html\n\n";
        print "Baebaebae.. Ich darf nicht :) \n";
        exit;
      }

      open(MAIL,"$Mailprogramm -t") die;

      ..

      Ciao,
        Wolfgang

      Tja, ich bin wirklich Anfänger und mein Problem ist bis jetzt immer noch nicht gelöst. Herzlichen Dank für den Rat. Wenn ich diesen Text einfüge kommt, wenn ich das Prg im MS-Dos Modus starte: Unregcognized character \240 at line 35.
      Kann mir irgendjemand ein simples funktionierendes PRG in Perl schicken, daß einfach eine Mail sendet mit sendmail im Verzeichnis "/usr/lib/sendmail". Ich denke das wäre das einfachste. Wäre echt nett.

      Beste Grüße
      Volker

      1. Was wäre an diesem Prg falsch?

        #!/usr/bin/perl
        $Mailprogramm = "/usr/bin/sendmail"; 
        $MailSubject = "Formluar-Feedback";  
        $Empfaenger = "adler40@asamnet.de";
        print "content-type: text/html \n\n";
        if (not(-x $Mailprogramm)){
          print "nicht geklappt";
          exit;
        }
        open(MAIL,"$Mailprogramm -t") die;
        print MAIL "To: $Empfaenger\n";
        print MAIL "From: Mir\n";
        print MAIL "Subject: Hallo\n\n";
        print MAIL "Beispieltext";
        print "alles geklappt";

  2. if($ENV{'REQUEST_METHOD'} eq 'GET')

    »»  {

    $Daten = $ENV{'QUERY_STRING'}

    »»  }

    else

    »»  {

    [weiteren Schrottcode gelöscht]

    Du solltest das so besser lassen, sondern besser das CGI-Modul benutzen, etwa so:

    use CGI ':standard';
    my $formularfeld = param 'formularfeld';

    Das letzte formularfeld ersetzt Du gegen den Namen des Feldes, dessen Inhalt Du in $formularfeld speichern möchtest.

    Ansonsten siehe: "perldoc CGI"

    Peter

    1. Hallo,

      if($ENV{'REQUEST_METHOD'} eq 'GET')
      »»  {
      »»   $Daten = $ENV{'QUERY_STRING'}
      »»  }
      else
      »»  {

      [weiteren Schrottcode gelöscht]

      Du solltest das so besser lassen, sondern besser das CGI-Modul benutzen, etwa so:

      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      Finde ich auch,
      wenn ich den untrigen "Schrottcode" mit CGI sehe, der
      ueberhaupt nichts mit dem Problem von Volker zu tun hat :)

      use CGI ':standard';
      my $formularfeld = param 'formularfeld';

      Das letzte formularfeld ersetzt Du gegen den Namen des Feldes, dessen Inhalt Du in $formularfeld speichern möchtest.

      In Perl gibt es kein Schrottcode! Erst recht nicht, wenn es jemand gerade lernt.

      Ciao,
        Wolfgang

      1. In Perl gibt es kein Schrottcode! Erst recht nicht, wenn es jemand gerade lernt.

        Das ist natürlich Quatsch. Gerade ein Anfänger macht Fehler und eigentlich sollte froh sein, wenn er darauf hingewiesen wird.
        So kann es sie in Zukunft vermeiden.

        Peter

        1. In Perl gibt es kein Schrottcode! Erst recht nicht, wenn es jemand gerade lernt.

          Das ist natürlich Quatsch. Gerade ein Anfänger macht Fehler und eigentlich sollte froh sein, wenn er darauf hingewiesen wird.
          So kann es sie in Zukunft vermeiden.

          Du hast aber auf keinen Fehler hingewiesen, sondern einfach einen
          gueltigen Programmierstil mit einem anderen verglichen und
          dabei deinen Geschmack/Programmierstil dadurch hervorgehoben, das
          du anders als Schrott hinstellst.

          [ ] Bitte sag, das du kein lehrer bist oder Kurse haelst.

          Ciao,
            Wolfgang

          1. Du hast aber auf keinen Fehler hingewiesen, sondern einfach einen
            gueltigen Programmierstil mit einem anderen verglichen und
            dabei deinen Geschmack/Programmierstil dadurch hervorgehoben, das
            du anders als Schrott hinstellst.

            Dem ist ja eben nicht so, die benutzte Routine funktioniert nicht in allen Fällen.

            [ ] Bitte sag, das du kein lehrer bist oder Kurse haelst.

            Ich kann dich beruhigen. Ich bin kein Lehrer, auch wenn ich an einer Ausbildungsinstitution arbeite.

            Peter