steFF: FormMailer mit perl

Hallo!!
habe ein Problem, und zwar habe ich ein Bestellformular erstellt, dass ich gerne per mail zugesendet bekommen möchte!!
jetzt hab ich das perl script von selfHtml genommen und ein paar sachen geändert, doch es funktioniert nicht!
wenn ich auf den Button schicken klicke kommt diese Fehlermeldung: "The document has moved here." bitte um Hilfe!
PS:kenn mich nicht besonders aus in Perl!!!!

-> bestellmail.pl:

#!/usr/bin/perl

-------> Individuelle Parameter des Skriptes - bitte anpassen!

--> SMTP-Programm zum Versenden der Mail:

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

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

$mailto = 'test@domain.at';

-------> Modul für CGI-Scripts einbinden:

use CGI;

-------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:

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

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

$delimiter = $query->param(': ');  # ---> Begrenzerzeichen zwischen name und value
$returnhtml = $query->param('http://www.domain.at/formular/danke.html');    # ---> URL für Dankeseite
$subject = $query->param('Bestellung');      # ---> E-Mail-Subject

-------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln

#             VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;

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

$mailtext = "Bestellung";
foreach(@names) {
  $name = $_;
  @values = "";
  @values = $query->param($name);
  if($name ne "http://www.domain.at/formular/danke.html" && $name ne "Bestellung" && $name ne ": ") {
    foreach $value (@values) {
      $mailtext = $mailtext.$name;
   $mailtext = $mailtext.$strasse;
   $mailtext = $mailtext.$plz;
   $mailtext = $mailtext.$ort;
   $mailtext = $mailtext.$plz;
   $mailtext = $mailtext.$bundesland;
   $mailtext = $mailtext.$staat;
   $mailtext = $mailtext.$vorwahl;nummer;
   $mailtext = $mailtext.$email;
   $mailtext = $mailtext.$kommentar;
      $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";

-------------------------------------------------------

und hier das html doc:

<body>
<form action="http://www.meinedomain.at/cgi-bin/bestellmail.pl" method="post">
<input type="hidden" name="return" value="http://www.meinedomain.at/formular/danke.html">
<input type="hidden" name="delimiter" value=":&nbsp;">
<input type="hidden" name="subject" value="Bestellung">

<h1 align="center" class="Stil1 Stil1 Stil1">Bestellformular</h1>
</center>
<hr width="75%" />
<p>&nbsp;</p>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="450" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><span class="Stil7">
<input type="checkbox" name="erste_cd" value="checkbox" />
erste CD (&euro; 15,00) <br />
<input type="checkbox" name="zweite_cd" value="checkbox" />
zweite CD (&euro; 15,00)</span></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<p>&nbsp;</p>
<table width="450" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td width="225" bgcolor="#D5ECB4"><p class="Stil7">&nbsp;</p>
<p class="Stil7">&nbsp;</p></td>
</tr>
<tr>
<td bgcolor="#D5ECB4"><span class="Stil7">
<label>Name: <br />
<input name="name" type="text" size="20" maxlength="25" />
</label>
<br />
Stra&szlig;e:
<label></label>
</span> <span class="Stil7">
<label><br />
<input name="strasse" type="text" size="20" maxlength="25" />
</label>
<br />
<label>PLZ.: &nbsp;&nbsp;&nbsp;&nbsp;Ort:</label>
</span> <span class="Stil7">
<label><br />
<input name="plz" type="text" size="4" maxlength="10" />
<input name="ort" type="text" size="20" maxlength="25" />
<br />
Bundesland:<br />
<input name="bundesland" type="text" size="20" maxlength="25" />
</label>
<label><br />
<br />
<br />
<br />
<br />
</label>
</span></td>
<td bgcolor="#D5ECB4"><span class="Stil7">
<label></label>
<label>Staat:<br />
<input name="staat" type="text" size="20" maxlength="25" />
<br />
</label>
<label>Telefon:<br />
<input name="vorwahl" type="text" size="4" maxlength="10" />
</label>
</span>
<p class="Stil7">
<input name="nummer" type="text" size="20" maxlength="25" />
<br />
E-Mail:<br />
<input name="email" type="text" size="20" maxlength="25" />
<br />
Kommentar:<br />
<textarea name="kommentar" cols="20" rows="2"></textarea>
</p></td>
</tr>
<tr>
<td align="right" bgcolor="#003300" ><input type="submit" name="Submit" value="Bestellung abschicken" /></td>
<td bgcolor="#003300"><input type="reset" name="Submit2" value="Eingaben l&ouml;schen" /></td>
</tr>
</table>
</form>
</body>

  1. Hi,

    Hallo!!
    [...] möchte!!
    [...] nicht!
    [...] Hilfe!
    [...] Perl!!!!

    Du leidest an exzessiver Interpunktion!

    PS:kenn mich nicht besonders aus in Perl[.]

    Warum setzt Du es dann ein?

    wenn ich auf den Button schicken klicke kommt diese Fehlermeldung: "The document has moved here."

    [...]

    $delimiter = $query->param(':&nbsp;');  # ---> Begrenzerzeichen zwischen name und value
    $returnhtml = $query->param('http://www.domain.at/formular/danke.html');    # ---> URL für Dankeseite

    Welche Werte werden denn in den Parametern namens ":&nbsp;" und "http://www.domain.at/formular/danke.html" an das Script übertragen?

    und hier das html doc:

    Ah, offenbar gar keine. Zumindest finde ich keine entsprechenden Parameter. Lustig ist aber dies:

    <input type="hidden" name="return" value="http://www.meinedomain.at/formular/danke.html">
    <input type="hidden" name="delimiter" value=":&nbsp;">

    Du hast zwei ganz andere Parameter, die die Namen der gesuchten Parameter als Wert haben.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. PS:kenn mich nicht besonders aus in Perl[.]

      Warum setzt Du es dann ein?

      Alternative Antwort.
      Weil Kunst nicht von Können kommst sondern von der Fähigkeit die Kritiker zu überleben....
      Kunst <-> Perl
      Kritiker <-> Bugs

  2. @steFF,

    für perl(mail)scripte empfehle ich dir folgende Seiten:
    http://www.cgicorner.ch/
    http://www.coder-world.de/
    http://www.inspire-world.de/

    in den jeweiligen Foren wird dir bei eventuellen Fragen auch weitergeholfen.

    Gruss Adolf

  3. PS:kenn mich nicht besonders aus in Perl!!!!

    Dann solltest du besser auf Software zurückgreifen, die du nur konfigurieren musst, ohne in den eigentlichen Programmcode eingreifen zu müssen. Immer wieder gern genannt wird der nms-mailer.

    $delimiter = $query->param(':&nbsp;');  # ---> Begrenzerzeichen zwischen name und value

    Wenn du das Trennzeichen im Script festlegen möchtest, dann brauchst du CGI->param nicht. Daneben: Du versendest eine reine Textmail, sodass die HTML-Entität "&nbsp;" wirkungslos bleibt. Also versendest du entweder HTML oder bleibst bei reinem Text (was ich empfehlen würde) und legst den Trenner so fest:

    my $delimiter = ':';

    Natürlich solltest du ihn auch verwenden :)

    $returnhtml = $query->param('http://www.domain.at/formular/danke.html');    # ---> URL für Dankeseite

    Hier gilt das Gleiche wie bei $delimiter:

    my $returnhtml = 'http://www.domain.at/formular/danke.html';

    $mailtext = "Bestellung";
    foreach(@names) {
      $name = $_;
      @values = "";
      @values = $query->param($name);
      if($name ne "http://www.domain.at/formular/danke.html" && $name ne "Bestellung" && $name ne ":&nbsp;") {
        foreach $value (@values) {
          $mailtext = $mailtext.$name;
       $mailtext = $mailtext.$strasse;
       $mailtext = $mailtext.$plz;
       $mailtext = $mailtext.$ort;
       $mailtext = $mailtext.$plz;
       $mailtext = $mailtext.$bundesland;
       $mailtext = $mailtext.$staat;
       $mailtext = $mailtext.$vorwahl;nummer;
       $mailtext = $mailtext.$email;
       $mailtext = $mailtext.$kommentar;
          $mailtext = $mailtext.$value."\n";
        }
      }
    }

    Das geht viel kürzer:

    my $mailtext = "Bestellung\n";  
    foreach my $name (@names) {  
      $mailtext .= $name . $delimiter . [link:http://de.selfhtml.org/perl/funktionen/kontrolle.htm#quotemeta@title=quotemeta]($query->param($name)). "\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";

    Bitte nie eine Angabe zum Absender vergessen, es könnte sonst Probleme mit entsprechend sicher konfigurierten Mailservern geben. Ebenso nicht den verwendeten Zeichensatz vergessen anzugeben. Eine vollständige Ausgabe sähe dann so aus (Heredoc-Syntax):

    print MAIL <<MAILTEXT;  
    To: $mailto  
    From: $mailfrom  
    Subject: $subject  
    Content-Type: text/plain; charset="iso-8859-1"  
    Content-Transfer-Encoding: 7bit  
      
    $mailtext  
    MAILTEXT  
      
    close MAIL;
    

    und hier das html doc:
    <input type="hidden" name="delimiter" value=":&nbsp;">
    <input type="hidden" name="subject" value="Bestellung">

    Die zwei kannst du rausschmeißen.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.