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

Gast peterpan
 2010-08-03 10:52
#140272 #140272
Hallo,

ich habe folgendes Perl-Script mit der Dateiendung ".cgi" auf meinen Webserver hochgeladen und executable gemacht ("chmod u+x"). Der Pfad "/usr/local/bin/perl" ist nach Rücksprache mit dem Provider korrekt.

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
#!/usr/local/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 = 'adresse@provider.de';

# -------> 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('delimiter');  # ---> Begrenzerzeichen zwischen name und value
$returnhtml = $query->param('return');    # ---> URL für Dankeseite
$subject = $query->param('subject');      # ---> 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 = "";
foreach(@names) {
  $name = $_;
  @values = "";
  @values = $query->param($name);
  if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
    foreach $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";
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";


Bei dem folgenden HTML-Code handelt es sich um ein Formular, das durch Click auf "Senden" das oben gepostete Script (verschicken.cgi) ausführt.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<title>Titeltext</title>
</head>
<body>
<form action="http://www.adresse.de/verschicken.cgi" method="post" name="Formular" enctype="text/plain">
<input type="hidden" name="return" value="http://www.adresse.de/seite.html">
<input type="hidden" name="delimiter" value=": ">
<input type="hidden" name="subject" value="betreffwort">

Abesender:* <input type="text" name="absender" size=15><br>
Nachricht:* <textarea name="nachricht" rows="3" cols="25"></textarea><br>
<p><input type="submit" value="Abschicken">
</body>
</html>


Das Verschicken funktioniert insoweit, dass bei mir eine E-Mail mit folgendem Inhalt ankommt:
Quote
POSTDATAreturn=http://www.adresse.de/seite.html
delimiter=:
subject=betreffwort
absender=test
nachricht=testen


Nachdem der Benutzer in dem HTML-Formular auf "Senden" klickt, wird nicht etwa die URL http://www.adresse.de/seite.html aufgerufen, sondern die URL http://www.adresse.de/verschicken.cgi, wobei der Inhalt im Browser der folgende ist:
Quote
Found

The document has moved here.
Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 PHP/5.2.13 mod_ssl/2.2.9 OpenSSL/0.9.8g Server at xa123.123.provider.de Port 80


Es wäre super, wenn mir jemand einen Hinweis geben kann, wieso nach Click auf "Senden" die falsche URL aufgerufen wird, bzw. wieso der Inhalt der E-Mail nicht so strukturiert ist, wie im Perl-Script spezifiziert.

Danke!!

PS: Meine richtige URL und E-Mail-Adresse wurde mit www.adresse.de bzw. mit adresse@provider.de ersetzt.
Last edited: 2010-08-03 11:02:11 +0200 (CEST)

View full thread Script zum E-Mail Formular verschicken