ein Kapitel zurück                                           ein Kapitel weiter

So siehts aus und funktioniert es

Jetzt wollen wir uns ansehen wie man eine Formmail mit Hilfe von CGI-Skript realisieren kann. Vorraussetzung für diese Kapitel ist das bei Ihnen sendmail installiert und konfiguriert ist.

Natürlich nur wenn sie vorhaben dieses Skript am Lokalen Rechner zu testen. Sind sie kein Freund der Kommandozeilen-Programme, so können sie sendmail auch mit Kmail, dem Mailprogramm von KDE, konfigurieren. Dies machen sie unter der Option "Einstellungen". Aktivieren sie unter "Netzwerk" die Versandart "sendmail" und richten sie für den Mail Eingang ein lokales Postfach mit dem Pfad zum Maileingang ein. In meinem Fall ist dies /var/spool/mail/root

Bevor wir jetzt Anfangen die HTML-Datei zu erstellen wollen wir uns erst mal ansehen wie wir mittels Perl einen Mail verschicken können........

#!/usr/bin/perl -w

$sendmail =  "/usr/sbin/sendmail";
#Pfad von sendmail kann ermittelt werden mit "which sendmail"

open(MAIL, "|$sendmail -oi -t") or die "Can't open pipe to $sendmail: $!\n";
print MAIL "To: tot\@linux\n";      #Bitte anpassen
print MAIL "From: Anonymus\@anoymus.de\n";
print MAIL "Subject: Hallo Test\n\n";
print MAIL "Dies stellt den Inhalt der Mail da\n";
close(MAIL) or die "Can't close pipe to $sendmail: $!\n";

print "Die Mail wurde erfolgreich verschickt\n"  

Um sie zu Beruhigen, welches Mailprogramm auf Ihrem ISP läuft, sendmail wird meistens verwendet. Wenn nicht müssen halt einfach den Namen Ihres Mailprogramms durch sendmail ersetzen. Unter Windows ist mir leider kein Programm bekannt mit welchem sie Mails aus einer Anwendung starten können. Wer eines kennt kann mir ja gerne eine Mail schicken. In dem Fall bleibt Ihnen wohl nichts anderes Übrig als das CGI-Skript online zu testen auf Ihrem Webhoster wo sich Ihre Seite befindet.

Bitte passen die Mailadresse an wohin sie diese Mail schicken wollen. So jetzt testen sie das Programm und wenn alles erfolgreich Verlaufen ist, müsste in Ihrem Posteingang eine Mail bereit liegen. Wenn nicht überprüfen sie denn Pfad zu sendmail und die E-Mailadresse.

Somit hätten wir eigentlich schon das CGI-Skript in Rohfassung. Wir müssen eigentlich "nur" noch die Daten empfangen und weiterverarbeiten. So einfach haben sie sich das jetzt nicht vorgestellt, oder? Mit........

open(MAIL, "|$sendmail -oi -t");  

...richten wir einen Filedeskriptor auf unser Programm sendmail ein. Die weiteren Eingaben an sendmail machen wir einfach mit Hilfe des Filedeskriptors MAIL und der print-Anweisung.

Zuerst wollen wir wieder die HTML-Datei für unsere Formmail erstellen. Sie können dies Selbstverständlich auch mit dem HTML-Tags des CGI.pm Modul machen wenn sie wollen.....

<HTML>
<HEAD>
<TITLE>Formmail</TITLE>
</HEAD>
<BODY>
<center><H1>Einfaches Beispiel einer Formmail</H1></center>

<form action="http://localhost/cgi-bin/form.cgi" method="post">
<p>Dein Name :<br><input name="name" size=30></p>
<p>E-Mailadresse :<br><input name="email" size=30></p>
<p>Bitte geben sie Ihre Kritik, Lob oder Anregungen hier ein :<br>
<textarea name="" rows=6 cols=50></textarea></p>
<p>
<input type=submit name='action' value='Senden'>
<input type=reset  value='Zurücksetzen'></p>

</form>
</BODY>
</HTML>  

Speichern sie diese einfache HTML-Datei in einem Verzeichnis Ihrer Wahl. Wir benutzen hier logischerweise die Methode POST da möglicherweise mehr als 1024 Zeichen eingegeben werden könnten.

Nun benötigen wir unser form.cgi
Das Layout und weitere optische Sachen überlasse ich Ihrem Geschmack. Hier gibt es nur die pure Funktionsweise. Wir wollen natürlich überprüfen ob alle Eingaben gemacht wurden und ob ein gültige E-Mailadresse eingeben wurde. Wenn alles OK ist schicken wir die Mail mit sendmail an unsere Adresse. Hier nun das Programmbeispiel...........

#!/usr/bin/perl

use CGI;
#zur Fehlerausgabe auf dem Browser
use CGI::Carp qw(fatalsToBrowser);

my $sendmail='/usr/sbin/sendmail';#Pfad von sendmail
my $empfaenger="tot\@linux"; #Ihre Mailadresse (Anpassen)
my $sender='Formmail <root\@localhost.localdomain>';#Absender (Anpassen nach belieben)
my $subject='Formmail der Homepage www.pronix.de'; #Für den Betreff (Anpassen)
my @message="";
my $ok=1;

$q=new CGI;

#Eingaben einlesen
my $name=$q->param('name');
my $email=$q->param('email');
my $msg=$q->param('nachricht');
#Eingaben überprüfen
if(!$name)
  { push(@message,"Sie haben keinen Namen eingeben<br>"); $ok=0;}
if(!$email)
  { push(@message,"Sie haben keine E-Mailadresse angegeben<br>"); $ok=0; }
elsif($email!~/^.*?(\@).*?(\.).*?/)
  { push(@message,"Keine gueltige E-Mailadresse<br>"); $ok=0; }
if(!$msg)
  { push(@message,"Sie haben nichts in das Textfeld geschrieben<br>"); $ok=0;}

print $q->header;

if($ok==1){
 open(MAIL,"|$sendmail -oi -t") or die "Can't open pipe to $sendmail: $!\n";
 print MAIL "To: $empfaenger\n";
 print MAIL "From: $sender\n";
 print MAIL "Subject: $subject\n\n";
 print MAIL "$msg\n";
 close(MAIL) or die "Can't close pipe to $sendmail: $!\n";

 print "<html><head><title>Ihre Eingabebestätigung der Formmail</title><head>";
 print "<body><center><b><u>Folgende Daten wurden mir soeben übermittelt :</u></b><br><br>";
 print "Name   : <i>$name</i><br>";
 print "E-Mail : <i>$email</i><br>";
 print "Ihre Nachricht : <br><i>$msg</i>";
 print "<br><br><a href=\"../index.html\">Hier kommen sie wieder zurück auf meine Startseite</a>";
 }
else{
 print "<html><head><title>Fehler bei Eingabe der Formmail</title><head>";
 print "<body><center><b><u>Folgende Fehler traten bei Ihrer Eingabe auf :</u></b><br><br>";
 print "@message\n";
 print "<br><br><a href=\"./formmail.html\">Hier geht es zurück zur Formmail";
}  

Speichern sie das Skript nun im cgi-Verzeichnis Ihres Webservers unter dem Namen form.cgi Nun rufen sie Ihre HTML-Datei formmail.html auf tippen etwas ein und schon erleben sie das Skript in Action. Es ist simpel, aber reicht für den Normalbedarf völlig aus.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf