Python: Ein einfacher Formmailer

von Kai Surendorf

Ein Kontaktformular gehört zum Standard einer Website. In diesem Artikel wird ein Script erstellt, das die Eingaben im Formular übernimmt, an eine Email-Adresse weiterleitet und den Besucher auf eine Bestätigungsseite-Seite schickt.

In medias res - Hier kommt das Script:

#!/usr/bin/python
import cgi
import smtplib
empfaenger = "webmaster@domain.de"
absender = "kontaktformular@domain.de"
betreff = "Anfrage über Kontaktformular"
puffer = cgi.FieldStorage ()
msg = "To: %s\n" %empfaenger
msg = msg + "From: %s\n" %absender
msg = msg + "Subject: %s\n\n" %betreff
msg = msg + str (puffer)
server = smtplib.SMTP ('domain.de')
server.sendmail (absender, empfaenger, msg)
server.close ()
print "Location: http://www.domain.de/kontakt.htm \n\n"

Wie funktioniert es?
Die ersten drei Zeilen übernehmen die Vorarbeiten für jedes Python-Script. Zuerst müssen wir dem Server - ähnlich wie bei einem Perl-Script - angeben, wo sich der Python-Interpreter befindet. In diesem fiktiven Fall ist dies #!/usr/bin/python. Dies müsste man gegebenenfalls von seinem Webhoster erfragen. Im zweiten Schritt gilt es, die für das Script nötigen Module zu importieren. Hier handelt es sich um das Modul cgi, das für die Verarbeitung von Ein- und Ausgaben via CGI notwendig ist, und das Modul smtplib, das die Verbindung zum SMTP-Server herstellt, über den wir die fertige Anfrage verschicken werden. Nun legen wir noch die Adressen für den Empfänger und den Absender sowie den Betreff fest. Die Vorarbeiten sind damit abgeschlossen.

Die Eingaben des Benutzers in dem Formular lesen wir aus und übergeben sie an die Variable puffer (puffer = cgi.FieldStorage ()). Damit haben wir jetzt Zugriff auf die gemachten Angaben, die weitergeleitet werden sollen. Die eigentlich zu verschickende Email inklusive der Header-Angaben wird anschließend Stück für Stück zusammengestellt und in der Variable msg gespeichert. Zuerst definieren wir den Empfänger, den Absender und den Betreff. Dabei werden die zu Beginn des Scripts definierten Variablen verwendet. %s in den Variablen-Angaben hat den Effekt, das Python hier an Stelle von %s den Wert der Variable übernimmt, die anschließend mit einem vorangestellten % angegeben wird. So würde msg nach dem ersten Schritt im Ergebnis lauten: "From: webmaster@domain.de\", nach dem dritten Schritt sähe es wie folgt aus:

From: webmaster@domain.de
To: webmaster@domain.de
Subject: Anfrage über Kontaktformular

Wenn Sie sich in Ihrem Email-Programm schon einmal die Header-Angaben der Mails angesehen haben, könnte Ihnen dies bekannt vorkommen. Hier wird also per Hand zusammengestellt, was die Email-Programme normalerweise selbstständig erledigen. Die Zeilenumbrüche, die mit backslash + n (\n) erzwungen werden, sind notwendig, um diese Header gemäß dem SMTP-Protokoll zu formen. An diese Header-Angaben werden nun noch das Wichtigste, die eigentlichen zu übermittelnden Informationen, angehängt (msg = msg + str (puffer)). Die Angabe str (puffer) hat die Aufgabe, die übermittelten Daten, die ja in Form einer Listen-Variable vorliegen, in eine String-Variable, also eine "Nur-Text"-Variable, umzuwandeln, um etwaige Fehlermeldungen auszuschließen.

Und ab die Post
Die Email liegt nun vollständig in der Variable msg vor, zum Versand bereit. Zeit also, sie auf den Weg zu bringen. Mit Hilfe des importierten Moduls smtplib stellt das Script nun eine Verbindung zu dem SMTP-Server her (server = smtplib.SMTP ('domain.de')). Diese Verbindung wird der Name server zugewiesen. Dann soll die Email über server verschickt werden, was mit der folgenden Programm-Zeile geschieht (server.sendmail (absender, empfaenger, msg)). Hierbei wird dem Server mitgeteilt, dass er eine Email verschicken soll. Diese geht an die Adresse, die in der Variable empfaenger gespeichert ist, mit der Adresse als Absender, die in der Variable absender sich befindet. Als eigentliche Email soll der Server die Variable msg nutzen.

Aufräumen nach getaner Arbeit
Wurde die Email erfolgreich versendet, wird die Verbindung mit dem SMTP-Server wieder geschlossen, was das Script dem Server mit dem Befehl server.close () mitteilt. Zu guter Letzt ist es noch notwendig, dem Surfer mitzuteilen, dass seine Anfrage korrekt übermittelt wurde. Dazu leitet das Script als letzten Schritt den Browser des Surfers auf eine speziell hierzu eingerichtete Seite mit Bestätigung und Danksagung. Der Befehl print in der letzten Zeile geht also nicht an den Bildschirm als Ausgabegerät sondern mit Hilfe des importierten CGI-Moduls direkt an den Browser. In diesem Fall wollen wir keinen Text ausgeben, sondern ihn an eine spezielle Adresse (Location) weiterleiten.

Die letzten beiden Zeilenumbrüche ("\n\n") sind notwendig, um die Übermittlung an den Browser korrekt abzuschließen. Nachdem das Script nun eine finale Ausgabe getätigt hat, beendet es sich selber und verschwindet wieder aus dem Speicher des Webservers. Dies ist wichtig, da ohne eine finale Ausgabe wie z.B. der Bestätigungsseite das Script eine Fehlermeldung auswirft oder im schlimmsten Fall, im Speicher des Webservers verbleibt und weiterläuft. Ihr Webhoster wird es Ihnen also danken, wenn Sie Ihre Python-Scripte korrekt beenden und somit die Belastung des Servers minimieren.

 

 
   Anzeigen

Navigation:    Webdesign - Programmierung - Web Grafiken - Software Guides - Tools - Templates - Schriftarten - Seminare - IT News
Partner:   Template OK - PCopen - SITEopen - PCopen Schweiz - HTMLopen Schweiz - VirtualUniversity.ch - WEB-SET.com - YesMMS - Job und Karriere