Einleitung
Das Modul bildet einen Form-Mailer ab. Er dient also für einfache Kontaktformulare. Das Programm erzeugt *.tml-Dateien im Mail-Verzeichnis. Um den Versand kümmert sich das mailman.prg (über einen Scheduler).

Templates
Ein Parameter beim Aufruf bestimmt den Namen der verwendeten Templates. Wird z.B. Formmail mit {execmacro="formmail" param="kontakt"} eingebunden sind die Templates formmail/kontakt/ini, formmail/kontakt/form, formmail/kontakt/message und formmail/kontakt/mail.

formmail/name_durch_param/ini
Hier werden die Felder angegeben, die im Formular übertragen werden. Beispiel:

field_1 = Name
field_2 = eMail
field_3 = text:nachricht
Hier werden drei Felder definiert. Dabei gilt:
field_x = Name - ein Eingabefeld vom Typ text
field_x = text:Name - ein Eingabefeld vom Typ textarea
Die Nummerierung muss dabei lückenlos sein.

Hinter dem Feldnamen können Sie mit ,* bestimmen, dass es sich um ein Pflichtfeld handelt. Beispiel:
field_2=eMail,*
Die Meldung, die bei nichtausfüllen angezeigt wird, wird als err_filling angegeben. Beispiel:
err_filling=Rot markierte Felder sind Pflichtfelder.

Formmail kann Pseudofelder enthalten, deren Inhalt von einem externen Programm geliefert wird. Beispiel:
field_4=file-formular.pdf,execmacro(../../custprg/formularpdf.prg,GenPDF('ramtext:aktdata'))
Es  wird GenPDF im Programm formularpdf.prg aufgerufen. Übergeben wird ein  Ramtext mit den aktuellen Werten des Formulars. Die Prozedur liefert  einen Dateinamen zurück, der in diesem Fall ein PDF mit dem Inhalt ist.  Dieser kann dann z.B. als Mail-Anhang verschickt werden.

formmail/name_durch_param/form
Hier ist das komplette Eingabeformular. Beispiel:
<form action="{formaction}" method="post">
Name: <input type="text" name="Name"><br>
eMail: <input type="text" name="eMail"><br>
Text: <textarea name="text:nachricht"></textarea><br>
<input type="submit" value="OK" name="OK">
</form>

Es muss sich dabei um ein komplettes HTML-Formular inkl. der Form-Tags handeln. Als action muss action="{formaction}" angegeben werden. Als Eingabefelder sind die erlaubt, die vorher definiert wurden. Als Platzhalter für die Ausgabe von Fehlermeldungen können Sie {error} verwenden.

Captcha:
Um die Captcha-Prüfung zu benutzen müssen Sie im Formular ein Feld mit Namen captcha definieren sowie einen Platzhalter {captchaimage} einsetzen.
Beispiel:

{captchaimage}<br/>
<input type="text" name="captcha">
Falls der Code falsch angegeben wurde, wird die Vorlage formmail/name_durch_param/captcha-error an Stelle des Platzhalters {error} ausgegeben.

Um für mehr Komfort bei Ihren Benutzern zu sorgen, sollten dann auch alle bereits eingegebenen Werte wiederholt werden. Das erreichen Sie, indem Sie {Feldname} als Platzhalter verwenden.
Beispiel für Name:
Name: <input type="text" name="Name" value="{Name}"><br>
Falls Sie zusätzlich eine Vorbelegung der Felder aus der Benutzerdatenbank wünschen, kann folgendes Konstrukt eingesetzt werden:
Name: <input type="text" name="Name" value="{if="CgiTestParam('Name')"}{Name}{else}{user:Name}{end}"><br>
Erklärung: Falls das Formular abgeschickt wurde und durch ein leeres Feld oder einen Captcha-Fehler wiederholt ausgegeben wird, wird der bisher eingegebene Inhalt wiederholt, anderfalls wird das Feld Name aus der Benutzerdatenbank angezeigt. Andernfalls meint hier den ersten Aufruf des Formulars.

formmail/name_durch_param/mail
Enthält die eMail-Nachricht, so wie sie erzeugt wird. Zu beachten ist dabei, dass sie im TML-Format angelegt werden muss. Das bedeutet: In der ersten Zeile muss fest tdbmail stehen, die zweite Zeile soltle die eMail-Adresse des Empfängers enthalten, die dritte Zeile die des Absenders, und in der vierten Zeile muss der Betreff der Nachricht eingetragen werden.

tdbmail
info@eforia.de
kontaktformular@eforia.de
Nachricht über Kontaktformular
Von:  {Name}
Mail: {eMail}
Am:   {today}
Um:   {now}
IP:   {ip}
Text:
{text:nachricht}
Erlaubt sind die Felder, die als Platzhalter definiert wurden. Zusätzlich:
{today} - Aktuelles Datum
{now} - Aktuelle Uhrzeit
{ip} - IP-Adresse des Formular-Absenders

Es können auch mehrere Mails versendet werden. Dann müssen einfach mehrere Vorlagen mail, mail_2, mail_3, ... vorhanden sein.


formmail/name_durch_param/message
Hier wird die Nachricht die der Anwender nach Abschicken eines Formulars erhält festgelegt.
Vielen Dank für Ihre Nachricht.<br>
Die folgenden Angaben wurden weitergeleitet:<br>
Von:  {Name}<br>
Mail: {eMail}<br>
Am:   {today}<br>
Um:   {now}<br>
IP:   {ip}<br>
Text:<br>
{text:nachricht}
Dabei sind die gleichen Platzhalter erlaubt wie beim mail-Template.


Aufruf
Wie oben beschrieben, erwartet formmail einen Parameter, der den Namen der Templates bestimmt. Dadurch lassen sich verschiedene Formulare in einer Website einbinden.
{execmacro="formmail" param="name"}


Dateiupload
Ab Version 5 können auch Dateien in einem Formular hochgeladen werden:
Man legt die Felder wie gewohnt an. Diese müssen allerdings mit file- beginnen. In der Volage ini also beispielsweise:
field_4=file-bild

In der Formularvorlage form wird das Feld in der Art eingefügt:
<input type="file" name="file-bild" accept="*/*">

Dort in der Vorlage muss dem Formular auch noch mitgeteilt werden, dass  es Dateien überhaupt verschicken soll. Dazu ergänzt man den einleitendenform-Tag  um eine enctype-Angabe. Im Ergebnis sieht das dann beispielsweise so aus:
<form action="{formaction}" method="post" enctype="multipart/form-data">

Was jetzt noch fehlt ist die mail-Vorlage. Diese muss ja die Anhänge mit aufnehmen. Damit dies möglich ist, benutzt man das tdbmail3-Format. Eine Beispiel-Vorlage sieht so aus:
tdbmail3
webmaster@mein-ewm-system.de
informer@mein-ewm-system.de
Test Mail
{attachments}
Hier der übliche Mailtext mit Platzhaltern

Wie man sieht, muss lediglich an das tdbmail in der ersten Zeile eine 3 angefügt werden und zwischen Betreff und Text eine Zeile mit dem Platzhalter {attachments} eingefügt werden. An diese Stelle setzt der Formmailer dann die Anhänge.


Bei Anhängen muss übrigens der MIME-Typ bestimmt werden. Dazu wird die MIME-Datei von Apache benutzt. In mail.ini findet sich der Pfad dorthin, der auf jedem Linux-System mit  installiertem Apache bereits stimmen sollte. Bei Bedarf kann er dort  angepasst werden.
eforia® web manager Dokumentation
Stand V 3.01 / 20.12.2010
© Horst Klier
http://www.klier.net
Impressum