[ zurück ]

Formular-Mailing als ISAPI-DLL


Eines der häufigsten Probleme für Webapplikationen ist wohl der Versand von Formulareintragungen an den Besitzer des Formulars per e-Mail. Dieses Standardproblem läßt sich unter Delphi einfach als ISAPI-Extension lösen.

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 hotkapselt alle für den e-Mail-Versand nötigen Aktivitäten. Somit können Sie sich sofort dem eigentlichen Thema "Formular-Mailing" zuwenden.

Ziel der hier vorgestellten Musterlösung soll es sein, ein Maximum an Flexibilität bei minimalem Aufwand mit der Webserver-Erweiterung zu realisieren. So soll es ohne Re-Kompilierung der DLL möglich sein, die ISAPI-Erweiterung für unterschiedlichste Formulare zu verwenden. Das Beispiel geht von folgenden Gegebenheiten aus:

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;
Das ist bereits die komplette Hauptprozedur IsapiAction, wie Sie in jedem Projekt mit meinem ISAPI-Experten hot zu erstellen ist. Außerdem braucht das Projekt FormMail nur noch drei weitere kurze und einfache Routinen.

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:
Disk IsapiFmMl.zip - FormMail (X kByte)


[ Seitenanfang ] [ ISAPI ]

J. Hummel,   2000