Michael muc: CGI Formularweiterleitung Sendmail und dann Feedbackbestaetigung

Ich glaube mein erster Eintrag ist nicht angekommen... hab wohl was falsch gemacht. :-(

Habe fogendes Problem und hoffe auf eure Hilfe !
Seite tagen und nächten versuche ich unten genanntes CGI-Script so hin zu bekommen, daß es folgendes macht...
Feedbackformular wird weitergeleitet an Sendmail   OK - klappt!
Aber dann...
Wenn die Mail gesendet ist, sollte das CGI Script eine neue Seite aufrufen... die Feedbachbestaetigungs-Seite...
Und genau da habe ich das Problem... Habe bald alles auprobiert... bin aber noch Anfänger... leider... mache da bestimmt was falsch.. Die Formulare wurden mit Frontpage erstellt... nach der 0 8 15 Methode... (Vorgaben von Frontpage)

Kann mir bitte einer Helfen ????? Ich breche bald ab und möchte dieses Script zum laufen bekommen :-)

Vorab schonmal vielen Dank !

CGI-Script :

#!c:\apache\perl\bin\perl.exe

Daten auslesen

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ s/<!--(.|\n)*-->//g;
   if ($allow_html != 1) {
      $value =~ s/<([^>]|\n)*>//g;
   }
   $FORM{$name} = $value;
 }

Mailparameter festlegen für an sich selbst senden

@recipient='Webmaster@xxxxxxxxxxxxxx.de';
@message=($FORM{'kommentar'});
$myaddress=($FORM{'email'});
$realname=($FORM{'name'});
$realname1=($FORM{'organisation'});
$realname2=($FORM{'telefon'});
$returnhtml='http://www.xxxxxxxxxxxxx.de/feedbackbestaetigung.htm'

Mail schreiben und an sich selbst senden

open (MAIL, "|sendmail.exe -t");
print MAIL "From: $myaddress\n";
print MAIL "To: @recipient[0]\n";
print MAIL "Subject: Feedback\n\n";
print MAIL "Absender_________________________ \n";
print MAIL "$myaddress\n\n";
print MAIL "Angaben Feedbacksender___________ \n";
print MAIL "Ansprechpart.: $realname\n";
print MAIL "Organisaion: $realname1\n";
print MAIL "Telefon: $realname2\n\n";
print MAIL "Mitteilung_______________________ \n\n";
print MAIL "@message[0]\n";
close (MAIL);

Ausgabe an den Browser

print "Content-Type: text/html\n\n";
print "<HTML>";
print "<HEAD>";
print "<TITLE>TEST</TITLE>";
print "</HEAD>";
print "<BODY>";
print "<CENTER><h2>Ihr Formular wurde nun als Email-Formular über diesen Server Versendet... Danke, für das ausfüllen unsere Feedbackformulares bzw. für Ihre Informaitonen</h2></center>";
print "</body>";
print "</html>";

sleep(5)
print "Location: $returnhtml\n\n";

DANKE
Michael

  1. Halihallo Michael

    Ich glaube mein erster Eintrag ist nicht angekommen... hab wohl was falsch gemacht. :-(

    Link bitte.

    Daten auslesen

    use CGI;

    Mailparameter festlegen für an sich selbst senden

    @recipient='Webmaster@xxxxxxxxxxxxxx.de';

    Hier sollte eine runde Klammer stehen, nicht aber ...

    @message=($FORM{'kommentar'});

    ...hier, denn die Formulardaten sind nunmal Skalare, auch wenn sie mehrzeilig sind.

    $myaddress=($FORM{'email'});
    $realname=($FORM{'name'});
    $realname1=($FORM{'organisation'});
    $realname2=($FORM{'telefon'});
    $returnhtml='http://www.xxxxxxxxxxxxx.de/feedbackbestaetigung.htm'

    keine runden Klammern bei skalaren Werten. Runde Klammern sind für Arrays und Hashes zu verwenden.

    Mail schreiben und an sich selbst senden

    open (MAIL, "|sendmail.exe -t");
    print MAIL "From: $myaddress\n";
    print MAIL "To: @recipient[0]\n";
    print MAIL "Subject: Feedback\n\n";
    print MAIL "Absender_________________________ \n";
    print MAIL "$myaddress\n\n";
    print MAIL "Angaben Feedbacksender___________ \n";
    print MAIL "Ansprechpart.: $realname\n";
    print MAIL "Organisaion: $realname1\n";
    print MAIL "Telefon: $realname2\n\n";
    print MAIL "Mitteilung_______________________ \n\n";
    print MAIL "@message[0]\n";

    print MAIL $message[0] um den ersten Eintrag der Liste zu selektieren.

    Ausgabe an den Browser

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

    [...]

    sleep(5)
    print "Location: $returnhtml\n\n";

    Location ist ein Header, du hast aber bereits Content gesendet. Das Location muss nach Content-Type (allgemeiner: einfach im Header) stehen, sonst wird es nicht interpretiert. Ein Refer auf Clientseite kannst du über

    <meta http-equiv="refresh" content="0; URL=...">

    realisieren.

    Viele Grüsse

    Philipp

    PS: perldoc perlstyle; use strict; use warnings; perldoc perldata; use Net::SMTP