FormMailer mit perl
steFF
- 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
$Sendmail_Prog = "/usr/lib/sendmail";
$mailto = 'test@domain.at';
use CGI;
$query = new CGI;
@names = $query->param;
$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
# VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;
$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";
}
}
}
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";
-------------------------------------------------------
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=": ">
<input type="hidden" name="subject" value="Bestellung">
<h1 align="center" class="Stil1 Stil1 Stil1">Bestellformular</h1>
</center>
<hr width="75%" />
<p> </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 (€ 15,00) <br />
<input type="checkbox" name="zweite_cd" value="checkbox" />
zweite CD (€ 15,00)</span></td>
</tr>
<tr>
<td> </td>
</tr>
</table>
<p> </p>
<table width="450" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td width="225" bgcolor="#D5ECB4"><p class="Stil7"> </p>
<p class="Stil7"> </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ße:
<label></label>
</span> <span class="Stil7">
<label><br />
<input name="strasse" type="text" size="20" maxlength="25" />
</label>
<br />
<label>PLZ.: 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öschen" /></td>
</tr>
</table>
</form>
</body>
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(': '); # ---> 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 ": " 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=": ">
Du hast zwei ganz andere Parameter, die die Namen der gesuchten Parameter als Wert haben.
Cheatah
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
@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
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(': '); # ---> 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 " " 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 ": ") {
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=": ">
<input type="hidden" name="subject" value="Bestellung">
Die zwei kannst du rausschmeißen.
Siechfred