Beat: neue *pl erstellen

Beitrag lesen

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