Zum eigentlichen Versenden der e-Mail wird eine bewährte Bibliothekslösung verwendet,
um das Projekt nicht mit diesem Detailproblem zu belasten.
Meine Unit SMTPSend
kapselt alle für den e-Mail-Versand
nötigen Aktivitäten.
Somit können Sie sich sofort dem eigentlichen Thema "Formular-Mailing" zuwenden.
<INPUT TYPE="HIDDEN" NAME="MailTo" VALUE="service@meinefirma.de"> <INPUT TYPE="HIDDEN" NAME="Subject" VALUE="Bestellung"> |
Sie dürfen natürlich auch jedes andere Konzept realisieren. Die oben genannte Mischung stellt lediglich einen brauchbaren Kompromiß dar.
Unter diesen Voraussetzungen wird die Hauptprozedur des FormMail-Programms recht kurz:
procedure IsapiAction(var s: String); var SMTPDaten: TSMTPStruct; nErg: Integer; begin {e-Mail-Parameter vorbereiten, Daten gemäß Deklaration in Unit SMTPSend.PAS } GetConstantMailParams(SMTPDaten); {feste Sendeparameter für e-Mail einholen} SMTPDaten.Content:=TStringList.Create; GetContentData(SMTPDaten.Content);{Formulareingaben abholen und in die Liste} SMTPDaten.Receiver:=SMTPDaten.Content.Values['MailTo']; {HIDDEN-Formularfeld} SMTPDaten.Subject:=SMTPDaten.Content.Values['Subject']; {HIDDEN-Formularfeld} SMTPDaten.Content.Delete(SMTPDaten.Content.IndexOfName('MailTo')); SMTPDaten.Content.Delete(SMTPDaten.Content.IndexOfName('Subject')); nErg:=SMTPSendMail(SMTPDaten); {e-Mail senden mit Funktion aus Unit SMTPSend} if nErg=SMTP_MAILOK then GenerateOK(SMTPDaten.Content, s) {Bestätigungsseite} else GenerateErr(nErg, s); {Fehlermeldungsseite generieren} SMTPDaten.Content.Free; end; |
GenerateOK und GenerateErr erzeugen die HTML-Antworten an den aufrufenden Klient gemäß Ihren persönlichen Vorstellungen. Im Gegensatz zu meiner downloadbaren Musterlösung mit festen Antworttexten laden Sie vielleicht die Antworten aus externen Vorlagedateien oder leiten die Antwort als Redirect auf statische HTML-Seiten um.
In der dritten Prozedur GetConstantMailParams lesen Sie die konstanten Sendeparameter evt. nach folgendem Muster aus der Registry:
procedure GetConstantMailParams(var SMTPStruc: TSMTPStruct); var Store: TRegistry; begin SMTPStruc.Server:=''; SMTPStruc.From:=''; SMTPStruc.Sender:=''; Store:=TRegistry.Create; Store.RootKey:=HKEY_LOCAL_MACHINE; if Store.OpenKey('\SOFTWARE\FormMail',true) then try SMTPStruc.Server:=Store.ReadString('SMTPServer'); SMTPStruc.From:=Store.ReadString('MailFrom'); SMTPStruc.Sender:=Store.ReadString('Sender'); finally Store.Free end; end; |
Das Lesen der gleichen Daten aus einer INI-Datei erfolgt nach ähnlichem Muster. Damit sind alle wesentlichen Probleme für das Formular-Mailing gelöst.
Als Zusatzaktivitäten zu diesem Grundprogramm ließe sich noch eine zweite e-Mail an den Surfer quasi zur Bestätigung verschicken. Dessen e-Mail-Adresse sollte ja in den Formulardaten in SMTPStruc.Content enthalten sein.Download des Programmquelltextes:
IsapiFmMl.zip - FormMail (X kByte)
J. Hummel, 2000