ACT MetaMailer - Mails verschicken leicht gemacht
Geschrieben von: Gerhard Buchner Mit dem ACT MetaMailer sind Sie in der Lage - unabhängig von der Mailkomponente - Mails zu verschicken ohne die jeweiligen Befehle neu erlernen zu müssen bzw. Ihren Code zu ändern. Die jeweils aktuelle Version finden Sie unter ACT4You. ProblemanalyseMails mit ASP zu verschicken ist schon längst keine Kunst mehr. Diverse Komponenten von Drittherstellern erleichtern dies ungemein. Aber genau hier beginnt eine neue Problematik. Sie programmieren einen Mailversand für die Komponente XYZ. Aus diversen Gründen wechseln Sie nun aber den Provider und dieser setzt die Mailkomponente ZYX ein. Oder Ihr Kunde B benutzt eine andere Komponente. Was tun? Alles neu programmieren, da die Befehle anders sind? Nein, denn genau hier setzt der ACT MetaMailer an. Es wird Ihnen eine einheitliche objektorientierte Sprachsyntax zur Verfügung gestellt. Diese wird dann vom ACT MetaMailer umgesetzt, sodaß die jeweilige Mailkomponente die richtigen Parameter bekommt. Das einzige was noch geändert werden muß, ist der Name der Mailkomponente. Mails versendenBeispielhaft an der Komponente Jmail wollen wir uns die Funktionsweise des ACT MetaMailers anschauen. Als erstes wird die Klasse und die Eigenschaften erzeugt. Da hier keine sicherheitsrelevanten Sachen geschehen, habe ich die einfache Deklaration (Public/Private) gewählt (Code in inc_metamailer.asp). <% Class MetaMailer Public Mailer Public Recipient Public CC Public BCC Public From Public FromName Public Subject Public Body Public MailServer Public Attachment Private objCDOConf Private objFlds Private cdoAnonymous Private cdoSendUsingPort Private cdoSendUsingPickup Private objMsg Sehen wir uns den Code an, welcher anhand der oben gezeigten Eigenschaften die Mail per JMail verschickt: Public Function Send() Select Case lCase(Mailer) Case "jmail" ' http://tech.dimac.net/ Set JMail = Server.CreateObject("JMail.SMTPMail") JMail.ServerAddress = MailServer JMail.Sender = From JMail.Subject = Subject For i = lBound(Recipient) To uBound(Recipient) JMail.AddRecipient Recipient(i) Next If isArray(CC) Then For i = lBound(CC) To uBound(CC) JMail.AddRecipientCC CC(i) Next End If If isArray(BCC) Then For i = lBound(BCC) To uBound(BCC) JMail.AddRecipientBCC BCC(i) Next End If If isArray(Attachment) Then For i = lBound(Attachment) To uBound(Attachment) JMail.AddAttachment Attachment(i) Next End If JMail.Body = Body JMail.Silent = True JMail.Execute Set JMail = NothingGliederung Zuerst wird die öffentliche Funktion Send deklariert. Danach wird anhand der Eigenschaft Mailer und einem Select Case der Code für die richtige Komponente ausgeführt (hier wie gesagt beispielhaft für Jmail). Warum verwende ich das LCase? Durch die Umwandlung in Kleinbuchstaben kann kein Fehler bei der Zuweisung gemacht werden. Es spielt somit keine Rolle wie die Schreibweise ist. Nun wird eine Instanz der Mailkomponente erzeugt und die Eigenschaften zugewiesen. Sehen wir uns exemplarisch die Zuweisung der(s) Empfänger(s) an. In einer For Schleife wird aus dem übergebenen Array der Empfänger die Zuweisung an die Komponente gemacht: For i = lBound(Recipient) To uBound(Recipient) JMail.AddRecipient Recipient(i) Next Dies funktioniert bei "CC", "BCC", und "Attachments" identisch. Zum Schluß wird die Mail verschickt und das Objekt "zerstört" um nicht unnötig den Server zu belasten: JMail.Execute Set JMail = NothingGliederung Wird eine Mailkomponente zugewiesen welche nicht implementiert ist, wird der Funktion Send der Rückgabewert "2" zugewiesen und die Funktion verlassen: Case Else Send = 2 Exit Function Tritt während des Mailversandes ein Fehler auf, weisen wir den Rückgabewert "1" zu. Wird der Mailversand ohne Fehler abgearbeitet, weisen wir den Rückgabewert "0" zu: If Err.Number > 0 Then Send = 1 Else Send = 0 End If Somit ist es möglich anhand des Rückgabewertes z.B. eine Statusseite zu schreiben:
Damit hätten wir den Mailversand exemplarisch für eine Mailkomponente programmiert. Dies funktioniert für die anderen Komponenten identisch, wobei die Befehle der jeweiligen Komponente benutzt werden müßen. Im jetzigen Stand des ACT MetaMailers sind folgende Mailkomponenten nutzbar: ASPEMail, ASPMail, JMail, Dundas, Flicks, MailListbot, ASPSmartMail, Geocel, ActiveMailer, DynuEMail, HSMailer, HTMLMailer, SimpleMail, CDONTS, CDOSYS. Welche Komponente(n) ist(sind) installiert?Wenn Sie nicht wissen welche Mailkomponente Sie nutzen können, gibt es einen einfachen Weg das herauszufinden. Die Klasse enthält eine weitere Funktion um alle installierten Mailkomponenten aufzulisten. Sehen wir uns den Code der Funktion CheckComponent an. Public Function CheckComponent() On Error Resume Next Set Mail = Server.CreateObject("Persits.MailSender") If err.number = 0 Then Component = Component & ";ASPEMail" Set Mail = Nothing End If err.Clear … Component = Mid(Component, 2) CheckComponent = Split(Component, ";") End Function Am Beispiel von ASPEmail wollen wir den Code erklären. Dieser ist für alle anderen Komponenten identisch. Ganz wichtig ist der Befehl On Error Resume Next. Dadurch wird gewährleistet, daß in einem Fehlerfall die Ausführung der Seite in der nächsten Zeile fortgeführt wird und nicht eine Fehlermeldung des Servers im Browser erscheint. Danach wird versucht eine Instanz der Komponente zu erzeugen. Kann die Instanz erzeugt werden, bedeutet dies, daß die Komponente auf dem Server installiert ist. Ist dem nicht der Fall, wird im Error-Objekt Err eine Fehlernummer erzeugt. Das Error-Objekt wird ausgewertet, indem auf die Fehlernummer 0 (Komponente installiert) überprüft wird. Ist dies der Fall, wird eine Variable Component um einen String, welcher den Namen der Komponente erhält, erweitert. Um den Server nicht unnötig zu belasten, wird das Objekt gleich wieder zerstört. Anschließend muß noch das Error-Objekt zurückgesetzt werden: Err.Clear. Damit in einem Fehlerfall die nächste Komponente auch noch richtig überprüft werden kann. Zum Schluß wird das führende Semikolon ";" abgeschnitten und der Funktion der Rückgabewert zugewiesen. Zurückgegeben wird ein Array, welches mit der Funktion Split aus der Variablen Component erzeugt wird. PraxisbeispielNachdem wir nun die Funktionalität des ACT MetaMailers durchleuchtet haben, wenden wir uns einem Praxisbeispiel zu. Wir benutzen ein Formular mit welchem es möglich ist die einzelnen Eigenschaften zu setzen um eine Mail damit zu verschicken. Den Aufbau des Formulars erkläre ich nicht genauer. Dieser ist in der Datei index.asp zu finden. Sehen wir uns das Formular erst einmal kurz an. Wie Sie sehen ist dies ein sehr einfaches Formular, welches aber alle verfügbaren Eigenschaften für den ACT MetaMailer zur Verfügung stellt. Zuerst muß unterschieden werden ob die Seite frisch aufgerufen wurde, oder das Formular abgesendet. Wurde das Formular abgesendet, werden die Formularfelder an Variablen zugewiesen. If Request.Form <> "" Then strMailer = Request.Form("Mailer") strRecipient = Request.Form("Recipient") strCC = Request.Form("CC") strBCC = Request.Form("BCC") strFrom = Request.Form("From") strFromName = Request.Form("FromName") strBody = Request.Form("Body") strSubject = Request.Form("Subject") strSMTP = Request.Form("SMTP") strAttachment = Request.Form("Attachment") Else Wurde die Seite normal aufgerufen erzeugen wir eine Instanz des ACT MetaMailers, rufen die Methode CheckComponent auf und weisen das Ergebnis dem Array arrComp zu. Wiederum wird das Objekt zerstört um den Server nicht unnötig zu belasten. Das Array wird dann im Formular benutzt um eine DropDown Box mit den zur Verfügung stehenden Komponenten zu füllen. If strMailer = "" Then Set myMail = New MetaMailer arrComp = myMail.CheckComponent Set myMail = Nothing Nachdem nun das Formular verschickt wurde, weisen wir den Eigenschaften die nötigen Werte zu und verschicken die Mail. Set myMail = New MetaMailer With myMail .Mailer = strMailer .Recipient = Split(strRecipient, ";") .CC = Split(strCC, ";") .BCC = Split(strBCC, ";") .From = strFrom .FromName = strFromName .Subject = strSubject .Body = strBody .MailServer = strSMTP .Attachment = Split(strAttachment, ";") Result = .Send End With Zuerst wird eine Instanz des ACT MetaMailers erzeugt. Um etwas Schreibarbeit zu sparen, verwenden wir With und weisen den Objekteigenschaften die zuvor erzeugten Variablen zu. Die Eigenschaften Recipient, CC, BCC, Attachment müssen als Array übergeben werden. Dazu verwenden wir die Split Funktion. Mehrere Empfänger müssen im Formular mit einem Semikolon ";" getrennt angegeben werden. Nachdem alle Eigenschaften zugewiesen wurden, wird mit der Methode Send die Mail verschickt und der Rückgabewert in der Variablen Result gespeichert. Zu jeder vernünftigen Seite gehört eine Fehlerbehandlung. So auch bei uns. Select Case Result Case 0 Response.Write "Email wurde an " & strRecipient Response.Write " verschickt!" Case 1 Response.Write "Emailversand fehlgeschlagen: " Response.Write Err.Description Case 2 Response.Write "Mailkomponente nicht implementiert!" End Select Set myMail = Nothing Tritt ein Fehler beim Versand auf, schreiben wir eine entsprechende Meldung und die Fehlerbeschreibung in die Seite. Anderenfalls schreiben wir als Rückmeldung eine Erfolgsmeldung und die Empfänger der Mail in die Seite. Überblick über Eigenschaften und Methoden
SchlußbemerkungNun sind wir in der Lage mittels des ACT MetaMailer Mails unabhängig von der Mailkomponente Mails zu verschicken ohne den Code großartig ändern zu müssen. Etwaige Erweiterungen sind äußerst einfach einzufügen. Denkbar wäre hier zum Beispiel die Überprüfung der Mailaddressen mittels Regular Expressions oder die Überprüfung der Berechtigung zum Versand über den Referer. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Allgemeine MailParser-Klasse mit ASPMail Links zu anderen SitesWenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |