Artikel - Detailansicht

Icon Aktuelles Formmailer II

Im ersten Teil hatten wir die Werte eines Formulars relativ unformatiert per Email weitergereicht.Das ist eine ausreichende Lösung, wenn man sich die Daten selbst zusenden will. Will man jedoch beispielsweise dem User eine Bestätigungsmail senden, sollte die Mail schon etwas ansprechender formatiert werden.

Das bekannte CGI-Programm cgiemail erlaubt z.b. an Hand einer Init-Datei die Formatierung des Mailtextes, wobei sogar festgelegt werden kann, welche Formularelemente in der Mail verwendet werden sollen.
In dieser Init-Datei gibt man innerhalt eiens Textes mit [] den Platz der Werte an. In den Klammern muss der Variablenname stehen. Dieses Format werden wir auch in diesem 2. Formmailer verwenden. Wir erweitern dieses Format aber noch etwas umd mehr Funktionalität zu erhalten. In der ersten Zeile der Init-Datei muss die Empfängeradresse angeführt von einem 'to: ' stehen. Anstelle einer festen Emailadresse kann hier jedoch auch der Werte einer Formvariable aus dem Formular angegeben werden (mit dem Namen der Variable und den[]).
In der zweiten Zeile steht der Betreff angeführt von dem String 'subject: '. Abschliessend steht noch in der 3. Zeile eine URL, die angibt wohin nach erfolgreichem Mailversandt umgeleitet werden soll. Hier der komplette Text der Init-Datei:

to: [email]
subject: hallo
successURL: http://domain.de/ok.cfm

Hallo [NAME]
Rufen Sie uns nicht an.
Wir werden Sie am [KONTAKTTAG] anrufen!


Ab der 4. Zeile beginnt der Mailtext, der dann verschickt werden soll. Auch hier können Variablenplatzhalter stehen.
In unserem Beispiel soll der Wert aus der Variable FORM.name und FORM.kontakttag in die Mail übernommen werden. So können wir also eine automatische Mail generieren, die dem User zugesendet werden soll, wenn er das Kontaktformular ausfüllt. Hier noch die wichtigsten Codeabschitte im Detail:

Das ganze Beispiel soll im Verzeichnis /formmailer liegen. Die Init-Datei liegt ebenfalls dort. Deshalb ermitteln wir zuerst die absoluten Pfad zur Init-Datei und lesen den Inhalt in die Variable mailtext:

<cfset pfad=expandPath("formmailer/formmailer.txt")>
<cffile action="READ" file="#pfad#" variable="mailtext">


Jetzt müssen wir die Variablenplatzhalter im Mailtext durch die Werte der FORM-Variablen ersetzen. Der Loop über FORM.FIELDNAMES sollte aus dem 1. Teil bekannt sein:

<cfloop index="var" list="#FORM.FIELDNAMES#">
  <cfset value=evaluate("FORM.#var#")>
  <cfset mailtext=ReplaceNoCase(mailtext,"[#var#]",value)>
</cfloop>

Nach dem alle Platzhalter ersetzt wurden, müssen wir nur noch die ersten Zeilen des Textes parsen und die Werte für die Empfängermailadresse, den Betreff der Mail und die SuccessURL ermitteln. Wir betrachten die Datei einfach als Liste, mit dem Delimiter chr(10). Dadurch können wir die einzelnen Zeilen auslesen und parsen. Hier ermitteln wir beispeilsweise die Empfängeremail:

<cfset Email=ListGetAt(mailtext, 1,chr(10))>
<cfset Email=trim(ReplaceNoCase(Email,"to: ",""))>
<cfset mailtext=trim(ListDeleteAt(mailtext,1,chr(10)))>

Nach dem Verschicken der Mail leiten wir mit dem <cflocation> auf eine 'ok'-Seite um.

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

<body>
<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"><br>
  Email:<input type="Text" name="email"><br>
  Telefon:<input type="Text" name="telefon"><br><br>

  Welche Unterlagen wollen Sie: <br>
  PDF-Dokument:<input type="Checkbox" name="unterlagen" value="PDF-Dokument"><br>
  Word-Dokument:<input type="Checkbox" name="unterlagen" value="Word-Dokument"><br>
  Präsentation vor Ort:<input type="Checkbox" name="unterlagen" value="Präsentation vor Ort"><br>
  Anruf:<input type="Checkbox" name="unterlagen" value="Anruf"><br><br>
  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>
  </select><br><br>
  Kommentar:<textarea name="kommentar"></textarea>   <br>
  <input type="Submit" value="Absenden">
  </form>

<cfelse>

  <!--- Pfad zur Init-Datei ermitteln und Datei einlesen --->
  <cfset pfad=expandPath("formmailer/formmailer.txt")>
  <cffile action="READ" file="#pfad#" variable="mailtext">

  <cfloop index="var" list="#FORM.FIELDNAMES#">
    <cfset value=evaluate("FORM.#var#")>
    <cfset mailtext=ReplaceNoCase(mailtext,"[#var#]",value)>
  </cfloop>

  <cfset Email=ListGetAt(mailtext, 1,chr(10))>
  <cfset Email=trim(ReplaceNoCase(Email,"to: ",""))>
  <cfset mailtext=trim(ListDeleteAt(mailtext,1,chr(10)))>

  <cfset Subject=ListGetAt(mailtext, 1,chr(10))>
  <cfset Subject=trim(ReplaceNoCase(Subject,"subject: ",""))>
  <cfset mailtext=trim(ListDeleteAt(mailtext,1,chr(10)))>

  <cfset successURL=ListGetAt(mailtext, 1,chr(10))>
  <cfset successURL=trim(ReplaceNoCase(successURL,"successURL: ",""))>
  <cfset mailtext=trim(ListDeleteAt(mailtext,1,chr(10)))>

  <cfmail to="#Email#" from="formmailer2@email.de" subject="#subject#">
#mailtext#</cfmail>
  <cflocation url="#successURL#" addtoken="No">
</cfif>

</body>
</html>

Natürlich hätten wir uns den ganzen Umweg über ein Init-File sparen und die Mail direkt formatieren können. Duch das Init-File kann aber ein Webmaster, der nicht CF-Programmierer ist, sich die Funktion durch Bearbeitung des Init-Files selbst zusammenstellen.

Eine kleine Optimierungsmöglichkeit besteht noch beim Einlesend es Init-Files. Wenn man nicht bei jedem Formular-POST die Datei einlesen will, kann man den Inhalt der Init-Datei in einer Applicationvariable zwischenspeichern:

<cfif isdefined("application.fm_mailtext">
  <cfset pfad=expandPath("formmailer/formmailer.txt")>
  <cffile action="READ" file="#pfad#" variable="mailtext">
  <cfset application.fm_mailtext=mailtext>
<cfelse>
  <cfset mailtext=application.fm_mailtext>  
</cfif>


Steffen Goldfuss steffen@goldfuss.de - 21.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