Tutorial für die Nutzung der Java Mail Funktionen
Einleitung
Für das Tutorial wird ein Tool für den Versand eines Newsletters
programmiert. Das Programm liest für den Versand die benötigten
Adressen aus einer Datenbank in eine Hashtable aus und versendet dann
an diese Adressen den Text, der ins Textfeld eingetragen wurde.
Installation
1. Das Tool nutzt für den Mailversand Klassen aus der Java
Enterprise Edition. Deshalb ist es notwendig, diese zunächst
zu installieren. Zu finden ist die J2EE hier.
2. Um das Tool zu testen, ist es günstig einen lokalen Mailserver
zu nutzen. Ich habe dafür Hamster installiert, der hier einen
externen SMTP Server simuliert und ausserdem das Testen durch die
Ausgabe eines logs erleichtert. Hamster nutzt die voreingestellte
IP 127.0.0.1 und kann hier
heruntergeladen werden (aber es kann natürlich auch jeder andere
Mailserver genutzt werden). Eine Installation von Hamster ist nicht
notwendig. Einfach entpacken und "Hamster.exe" starten. Der Proxy
ist dann bereit.
3. Vor dem testen des Programms muss ein ODBC-Treiber zur Datenbank
"Mailer.mdb" eingerichtet werden. Eine Datenbank
zu Testzwecken liegt dem Projekt bei und die Verbindung muss den
Namen "newsletter" tragen (ansonsten müssen die Sourcen vor
dem kompilieren angepasst werden).
Dokumentation
Start
Das Programm besteht aus einem Fenster und einigen Meldungsfenstern
für zusätzliche Informationenen, die aus der Klasse JOptionPane
instanziiert wurden, sowie einer Anzahl von Textfeldern, die die benötigten
Informationen für den Versand aufnehmen. Gesteuert wird das Programm
mit einigen Buttons der Klasse JButton.
nach oben
nach oben
Die oberen Textfelder
Der obere Teil des Tools besteht aus drei Textfeldern. Da zum testen
und entwickeln der Mailproxy Hamster genutzt wurde, der auf der
IP 127.0.0.1, Port 25 Mails empfängt, ist diese IP auch voreingestellt.
In die Zeile Absender wird die Mailadresse des Mailversenders eingetragen.
Diese Adresse taucht auch im Reply-to der E-Mails wieder auf. Wird
das Feld Absender leer gelassen, wirft die Methode "sendMail()"
der Klasse CSendMails eine IllegalAdressException und der User wird
durch ein JOptionPane darauf hingewiesen, dass die Exception aufgetreten
ist und die Mail Adresse überprüft werden muss.
In die Betreff Zeile ist das Subject des Newsletters einzutragen.
Dieses Feld wird ebenso wie das Feld "Absender" in den Newsletter
übernommen..
nach oben
Versand eines Newsletters
Beim Klick auf den Button "Versand" erfolgt eine Validierung der
Absender Adresse und der Versand des Newsletters wird gestartet,
wenn eine Adresse eingegeben ist.
Der Inhalt des Textfeldes "Nachricht" wird dabei in die Mail übernommen
und der Button "Abbrechen" wird so lange eingeblendet, wie der Mailversand
läuft. Wird der Button angeklickt, erscheint eine Meldung im
Debug Fenster, dass der Versand jetzt abgebrochen wird. Ausserdem
wird auch der Button Speichern aktiviert, damit damit eine LogDatei
erstellt werden kann, die den Verlauf des Versands dokumentiert.
Die entsprechenden Buttons werden auch während des Programmgebrauches
je nach Bedarf ein- und ausgeblendet.
nach oben
Programmierung
Das Programm besteht aus sieben Klassen. Bei der Erstellung habe
ich darauf geachtet, dass MVC-Pattern (Model-View-Controler) zu
nutzen, um so einen möglichst übersichtlichen Code zu
schreiben, der eine bessere Wartbarkeit, bzw. Erweiterbarkeit und
Anpassung ermöglicht. Desweiteren ist an diesem relativ überschaubaren
Beispiel eine Demonstration des Patterns problemlos möglich.
Um die Effizienz des Programms zu optimieren, erfolgt der Zugriff
auf die Empfänger des Newletters über einen Datenbankzugriff
und der Mailversand selbst über einen Thread. Ausserdem wurden
die starken Mailfunktionen der Java-EnterpriseEdition genutzt.
- CApp
- CController
- CGuiClient
- CLogSpeichern
- CMailData
- CSendMails
- CTextAreaWriter
CApp
Die Klasse "CApp" enthält nur die Main Funktion des Programms.
Hier wird das Programm gestartet.
CController
Diese Klasse ist der Controller des Programms. Die möglichen
Events werden hier abgefangen um so die entsprechenden Ereignisse
wie Mailversand, Speichern der Logfile usw. zu ermöglichen.
CGuiClient
Diese Klasse stellt alle für den Anwender sichtbaren Elemente
des Programms zur Verfügung
CLogSpeichern
Hier wird beim Klick auf den Button "Speichern" der Inhalt des Log
Fensters in einer Text Datei gespeichert.
CMailData
Hier wird der Connect zur Datenbank aufgebaut und eine Hashtable
mit den aktuellen Daten der Empfänger gefüllt.
CSendMails
In dieser Klasse erfolgt der eigentliche Versand des Newsletters
CTextAreaWriter
Die Ausgabe der Debug Meldungen für den Mailversand wird hier
vorgenommen, in dem der Ausgabestrom an ein Objekt der Klasse CTextAreaWriter
umgeleitet wird. Diese Klasse wiederum ist von PrintStream abgeleitet.
nach oben
Programmablauf
Beim Start des Programms wird in der Main-Methode von "CApp" zunächst
die Gui gezeichnet. Im Textfeld "Mailserver" ist die IP 127.0.0.1
dabei voreingestellt.
Hat der User die benötigten Angaben in den Textfeldern vorgenommen
und klickt auf den Button "Versand", wird eine Instanz der Klasse
"CSendMails" im Controller gebildet und der Thread gestartet, der
den eigentlichen Mailversand vornimmt und damit eine weitere Nutzung
des Programms ermöglicht, auch wenn gerade ein Versand stattfindet.
In der run Methode der Klasse CSendMails wird zunächst eine
aktuelle Hashtable geladen, die die Adressaten des Newsletters enthält.
Diese Hashtable wird in der Methode "fillData()" der Klasse CMailData
mit den aktuellen Daten der Mailempfänger gefüllt. Dieser
Vorgang erfolgt bei jedem Klick auf den "Versand" Button erneut,
damit stets auch neu hinzugefügt Adressaten den Newsletter
erhalten.
Nachdem die Hashtable geladen wurde, werden Mail Funktionen der
Klasse javax.mail der Enterprise Edition genutzt, um den eigentlichen
Mailversand vorzunehmen. Mit Hilfe dieser Klassen wird ein Connect
zum Mailserver aufgebaut und die Mails werden an die Emfpänger
versandt.
Klickt der User während des Versandt auf den Button "Abbrechen",
werden über den Controller Funktionen aufgerufen, die boolean
Variablen neu setzen, damit der Mailversand abgebrochen wird und
entsprechende Meldungen als Hinweis für den User ausgegeben
werden.
Die Buttons "Speichern" und "Abbrechen" werden allerdings nur aktiviert,
wenn es sinnvoll ist, auf deren Funktionen zuzugreifen. Diese Aktivierung,
bzw. Deaktivierung erfolgt über "set" Methoden der Gui Klasse.
nach oben
|