Formular:
Brrr, schnell skip...
..............................................................
Hier das geänderte buchversand.pl:
#!/usr/bin/perl
#!/pfad/zu/perl
#kann auf verschiedenen Servern anders lauten,
#deshalb zuerst nachfragen, falls nix funzt
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
gib Warnungen an den Browser aus
-------> Individuelle Parameter des Skriptes - bitte anpassen!
Dein Problem
Wo wird die $returnhtml als "www.meine_website.de/danke.htm" definiert?
my $returnhtml als "www.meine_website.de/danke.htm";
--> SMTP-Programm zum Versenden der Mail:
$Sendmail_Prog = "/usr/lib/sendmail";
my $Sendmail_Prog = "/usr/lib/sendmail";
--> Ziel-Mailadresse, an die gesendet werden soll:
$mailto = 'meine-Email@xxx.de';
my $mailto = 'meine-Email@xxx.de';
-------> Modul für CGI-Scripts einbinden:
use CGI;
use CGI;
-------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:
$query = new CGI;
my $query = new CGI;
@names = $query->param;
my @names = $query->param;
-------> interne Daten aus den erwarteten hidden-Feldern auslesen:
$delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
my $delimiter = $query->param('delimiter');
$returnhtml = $query->param('return'); # ---> URL für Dankeseite
my $returnhtml = $query->param('return');
$subject = $query->param('subject'); # ---> E-Mail-Subject
my $subject = $query->param('subject');
-------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln
# VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;
obige Darstellung ist leider kompletter BS
Wir müssen Newlines konvertieren, falls diese vorhanden sind:
Dennoch ist es praktisch OK.
$subject =~ s/\s/ /g;
aber wir sind noch nicht fertig.
Für das Subject ist ein sezialles Encoding für Umlaute notwendig:
use Encode qw/encode decode/;
$subject = decode('MIME-B', $subject);
-------> Text der E-Mail aus den Formulardaten ermitteln:
$mailtext = "";
my $mailtext = "";
foreach(@names) {
$name = $_;
foreach my $name(@names){
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
foreach my $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
-------> E-Mail versenden:
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
open(MAIL,"|$Sendmail_Prog -t")
or die("Fehler beim Aufruf des mailprogramms $!");
print MAIL "To: $mailto\n";
print MAIL "To: $mailto\r\n";
Wir geben Network-Newlines aus!
print MAIL "Subject: $subject\n\n";
print MAIL "Subject: $subject\r\n";
schliesse die Header-Sektion ab:
print MAIL "\r\n";
print MAIL "$mailtext\n";
print MAIL "$mailtext\n";
close(MAIL);
-------> Dankeseite an Browser senden:
print "Location: $returnhtml\n\n";
Wir haben es mit HTTP-Header zu tun:-> Network-Newlines
print "Location: $returnhtml\r\n\r\n";
Das kann an diesem Punkt fehlschlagen wenn Warnungen ausgegeben werden.
.........................................................................
Klappt das überhaupt?
Das wird sich erweisen.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische