Artikel - Detailansicht

Icon Aktuelles Formmailer I

Formmailer sind vor allem durch die vielen existierenden CGI-Scripte sehr bekannt und beliebt im Netz. Die Aufgabe eines Formmailers besteht darin, die Daten eines Formulars an die Adresse des Webmasters zu senden. Dabei sollte der Formmailer möglichst unabhänig vom Formular funktionieren, d.h. die Formularelemente sollten beliebig erweiterbar sein und der Formmailer sollte alle Elemente erkennen und alle vorhandenen Daten übertragen. Die Aufgabe des Mailers besteht also darin, selbst alle übertragenen Felder des Formulares zu erkennen und weiterzuleiten.

Wie funktioniert das ganze nun?
Wir erstellen uns zuerst ein Formular entsprechend unseren Wünschen. Um den Code einfach zu halten integrieren wir den gesamten Code in eine Seite. Das Prinzip mit den GET/POST-Unterscheidung dürfte ja nun schon hinreichend bekannt sein :-) Beim ersten Aufruf des formmailer.cfm-Templates wird das Formular angezeigt. Der User füllt das Formular aus und sendet es ab.
Per POST werden die in das Formular eingegebenen Werte wieder an das Template formmailer.cfm gesendet. Jetzt müssen wir nur noch alle Formularfelder ermitteln und diese plus die zugehörigen Daten in eine Mail verpacken.

Die immer existierenden Formvariable FORM.FIELDNAMES enthält eine Liste aller vorhandener Formvariablen. Wir müssen also nur einen Listloop über diese Liste durchführen und erhalten so jeden Variablennamen und mit der Evaluate()-Funktion den Wert:

<cfloop index="var" list="#FORM.FIELDNAMES#">
  <cfset mailtext=mailtext & var & "=" & evaluate("FORM.#var#") & chr(10)>
</cfloop>

Damit die Email nicht zu chaosmässig aussieht, füllen wir vorher einem Variable (mailtext) mit dem Emailtext und geben anschliessend in der Email nur diese Variable aus:

<html>
<head>
  <title>formmailer.cfm</title>
  </head>


<cfif CGI.REQUEST_METHOD is "GET">
  <!--- zuerst zeigen wir das Formular an --->
  <form action="<cfoutput>#cgi.script_name#</cfoutput>" method="post">
  Name:<input type="Text" name="name">
  Email:<input type="Text" name="email">
  Telefon:<input type="Text" name="telefon">

  Welche Unterlagen wollen Sie:
  PDF-Dokument:<input type="Checkbox" name="unterlagen" value="PDF-Dokument">
  Word-Dokument:<input type="Checkbox" name="unterlagen" value="Word-Dokument">
  Präsentation vor Ort:<input type="Checkbox" name="unterlagen" value="Präsentation vor Ort">
  Anruf:<input type="Checkbox" name="unterlagen" value="Anruf">

  An welchem Tag wollen Sie kontaktiert werden?
  <select name="kontakttag">
    <option value="Montag">Montag</option>
    <option value="Dienstag">Dienstag</option>
    <option value="Mittwoch">Mittwoch</option>
    <option value="Donnerstag">Donnerstag</option>
    <option value="Freitag">Freitag</option>
  

  Kommentar:<textarea name="kommentar"></textarea>
  <input type="Submit" value="Absenden">
  </form>
<cfelse>
<!--- jetzt Email versenden --->

  <!--- zuerst mal Mailtext formatieren --->

  <cfset mailtext="">
  <cfloop index="var" list="#FORM.FIELDNAMES#">
    <cfset mailtext=mailtext & var & "=" & evaluate("FORM.#var#") & chr(10)>
  </cfloop>

<cfmail to="admin@email.de" from="formmailer@email.de" subject="Formmailer wurde aktiviert">

Ein User hat soeben das Formular abgeschickt!
Zeit: #DateFormat(now(),"DD.MM.YY")# #TimeFormat(now(),"HH:mm")#
IP: #cgi.remote_addr#
Browser: #cgi.http_user_agent#

Werte aus dem Formular:
---------------------------------------------------------
#mailtext#
---------------------------------------------------------
</cfmail>
  Befehl ausgeführt!
</cfif>

</body>
</html>

In der Email geben wir noch einige Infos über den User aus wie beispielsweise die IP oder den Browser des Users. Dazu müssen wir nur die CGI-Variablen auslesen.

Steffen Goldfuss steffen@goldfuss.de - 20.11.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen