Thread Script zum E-Mail Formular verschicken (7 answers)
Opened by peterpan at 2010-08-03 10:52

frankes
 2010-08-03 13:03
#140283 #140283
User since
2005-04-02
140 Artikel
BenutzerIn

user image
Der eigentliche Fehler befindet sich in der HTML Seite und dem Form-Tag.

Um einen enctype="text/html" handelt es sich bei Post Daten nicht.

Code: (dl )
enctype="application/x-www-form-urlencoded"

lässt CGI->param die Daten richtig auslesen.


Bischen noch am Code herumgefeilt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/local/bin/perl

use strict;
use warnings;

# -------> Individuelle Parameter des Skriptes - bitte anpassen!
# --> SMTP-Programm zum Versenden der Mail:
my $Sendmail_Prog = '/usr/lib/sendmail';
# --> Ziel-Mailadresse, an die gesendet werden soll:
my $mailto = 'email-adresse';

# -------> Modul für CGI-Scripts einbinden:
use CGI;
use CGI::Carp qw(fatalsToBrowser);

$CGI::DISABLE_UPLOADS = 0;      # no uploads
$CGI::POST_MAX=1024*50;         # max. 50k Postings


# -------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:
my $query = CGI->new();


my @names = $query->param();


# -------> interne Daten aus den erwarteten hidden-Feldern auslesen:
my $delimiter = $query->param('delimiter');  # ---> Begrenzerzeichen zwischen name und value
my $returnhtml = $query->param('return');    # ---> URL für Dankeseite
my $subject = $query->param('subject');      # ---> E-Mail-Subject



# -------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln
#             VERHINDERT sonst möglichen MISSBRAUCH des Skripts
my $subject =~ s/\s/ /g;

# -------> Text der E-Mail aus den Formulardaten ermitteln:
my $mailtext = "";

foreach my $name (@names) {
  if ( !grep{ $_ eq $name }('return','subject','delimiter') ) {
    my @values = $query->param($name);
    foreach my $value (@values) {
      $mailtext .= $name;
      $mailtext .= $delimiter;
      $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 $query->redirect('-url' => $returnhtml);


Ansonsten sieh dir auch mal die Wiki hier zum Thema CGI an.

View full thread Script zum E-Mail Formular verschicken