Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Automatisches Aktualisieren einer Site per Mail

Geschrieben von: Jörg Neumann
Kategorie: Server

Wenn man die Aufgabe hat eine Web-Site täglich oder sogar stündlich mit neuem Inhalt zu füllen, ist man meist an seinen Arbeitsplatz gebunden, auf dem man den aktuellen Inhalt erstellt und dann per FTP auf den Server überträgt. Schön wäre es doch, wenn man von unterwegs mal eben per Mail den aktuellen Stand auf die Site bringen könnte.

Im heutigen Artikel möchte ich beschreiben, wie man mit relativ wenig Aufwand einen Aktualisierungsmechanismus für eine Site auf Grundlage von Microsoft Exchange Server 5.5/2000 erstellen kann.

Die Funktionsweise ist dabei wie folgt: Der Benutzer schickt eine Mail an eine spezielle Mail-Adresse eines Exchange-Servers. Dieser ruft bei Maileingang eine Funktion einer COM-Komponente auf und übergibt ihr den Mailtext. Die Komponente erzeugt daraufhin eine HTML-Datei und versendet sie per FTP an den Webserver.

Dafür sind folgende Arbeitsschritte notwendig:

  • Einrichten eines Mail-Kontos
  • Konfiguration von Serverskripts
  • Kodieren des Agents
  • Kodieren der COM-Komponente
  • Erstellen einer Batch-Datei und eines FTP-Skripts für den Versand auf den Webserver

Folgende Software ist für die Erstellung des Beispiels nötig:

  • Microsoft Exchange 5.5 oder 2000
  • Outlook 2000
  • Microsoft Visual Basic 5 oder 6

Einrichten eines Mail-Kontos

Zuerst richten wir in Exchange einen öffentlichen Ordner ein, in dem alle eingehenden Mails auflaufen sollen. Im Anschluß erstellen wir für diesen Ordner eine E-Mail-Adresse, über die er von außen erreichbar ist. An diese Mail-Adresse werden später die "Aktualisierungsmails" geschickt. Für das Anlegen des Ordners benötigt man natürlich die entsprechenden Rechte auf dem Exchange Server.

  • Starten Sie auf dem Rechner, auf dem der Exchange Server installiert ist, den Exchange System Manager
  • Erweitern Sie den Zweig "Ordner"
  • Klicken Sie mit der rechten Maustaste auf den Zweig "Öffentliche Ordner"
  • Wählen Sie unter "Neu" den Punkt "Öffentlicher Ordner"
  • Geben Sie dem Ordner einen beliebigen Namen und klicken Sie auf "OK"
  • Klicken Sie mit der rechten Maustaste auf den neuen Ordner und wählen Sie unter "Alle Tasks" den Punkt "E-Mail aktivieren"
  • Klicken Sie erneut mit der rechten Maustaste auf den Ordner und wählen Sie "Eigenschaften"
  • Im Reiter "E-Mail-Adressen" klicken Sie auf "Neu"
  • In der nun erscheinenden Auswahlliste klicken Sie auf SMTP-Adresse und klicken auf "OK"
  • Im nun erscheinenden Fenster geben Sie eine entsprechende Mail-Adresse für den Ordner an (z.B. SiteUpdate@MyCompany.de)

Konfiguration von Serverskripts

Der Exchange Server bietet mit den serverseitigen Agents die Möglichkeit auf bestimmte Ereignisse zu reagieren und darauf entsprechende Aktionen per VBScript auszuführen. Diese Option muß man allerdings erst einschalten, da sie standardmäßig ausgeschaltet ist.

Für das Einrichten der Agents muß man nicht an den Server, sondern kann das bequem vom Client aus bewerkstelligen. Die folgenden Beispiele verwenden Outlook 2000 als Client. Bei älteren Versionen sollten das Verfahren aber ähnlich funktionieren.

Zuerst einmal schaltet man die Option für Serverskripts ein, die sich gut versteckt, in den Tiefen von Outlook befindet.

  • Wählen Sie aus dem Menü "Extras" den Punkt "Optionen"
  • Wählen Sie den Tabreiter "Weitere"
  • Klicken Sie auf den Button "Erweiterte Optionen"
  • Im nun erscheinenden Fenster klicken Sie auf den Button "Add-In-Manager"
  • Aktivieren Sie den Punkt "Serverskripts"

Das Serverskript erstellen

Nun kann man für jeden Exchange-Mail-Ordner Skripts definieren, die auf bestimmte Ereignisse reagieren. In den nächsten Schritten erstellen wir ein Skript für das eingerichtete Mail-Konto, das auf Maileingang reagiert:

  • Klicken Sie mit der rechten Maustaste auf den gewünschten Ordner
  • Wählen Sie den Punkt "Eigenschaften"
  • Wählen Sie den Reiter "Agenten"
  • Klicken Sie auf den Button "Neu"
  • Im nun erscheinenden Fenster wählen Sie das Ereignis
  • "Bereitstellung eines neuen Objektes in diesem Ordner" aus
  • Klicken Sie auf den Button "Skript bearbeiten"

Nun öffnet sich der Editor und es erscheint ein VBScript, welches die entsprechenden Event-Handler beinhaltet (vergleichbar mit der Global.asa in ASP).

Im Event Folder_OnMessageCreated wird nun die entsprechende Aktion in VBScript kodiert. Zuerst einmal ermitteln wir die eingegangene Mail. Hierzu stellt Exchange das Objekt EventDetails zur Verfügung.

Dim oMsg
Set oMsg = EventDetails.Session.GetMessage(EventDetails.MessageID, Null )

In oMsg haben wir nun eine Referenz auf das aktive Mail-Objekt. Nun könnte man über den Mail-Subject oder den Absender eine entsprechende Filterung vornehmen. Wir beschränken uns jedoch darauf, den Mail-Text an eine eigens erstellte COM-Komponente weiterzuleiten, die dann die eigentliche Funktionalität beinhaltet.

Dies hat zum einen den Vorteil, daß wir die Logik nicht in Exchange "verstecken", und zum anderen kann der Code auch von anderer Stelle aus aufgerufen werden (z.B. aus einem Word-Makro).

Vorweg jedoch erst einmal der gesamte Code für den Event-Handler:

Public Sub Folder_OnMessageCreated
    Dim oMsg
    Dim oMailHandler
    Dim sRet
	
    Set oMsg = EventDetails.Session.GetMessage( _
        EventDetails.MessageID, Null )
    Set oMailHandler = _
        CreateObject("MailAutomation.cMailHandler ")
    sRet = oMailHandler.SendMailToServer( _
        "D:\", CStr(oMsg.Text))
    Script.Response = sRet
    Set oMailHandler = Nothing
End Sub

Als Namen für die Komponente habe ich "MailAutomation" und für die Klasse "cMailHandler" verwendet. Die Klasse besitzt die Funktion "SendMailToServer" die zur Aufgabe hat, die Mail aufzunehmen, in HTML zu formatieren und sie per FTP an den Server zu senden.

Mit der Zeile

Script.Response = sRet

wird das Ergebnis des Funktionsaufrufes in das EventLog von Exchange geschrieben, welches man über den Button "Protokolle" im obigen Fenster einsehen kann. So kann man später kontrollieren, wann welche Inhalte versendet wurden.

Nun wenden wir uns der COM-Komponente zu.

Erstellen der COM-Komponente

  • Öffnen Sie Visual Basic und erstellen Sie eine neue ActiveX-DLL.
  • Geben Sie der Komponente den Namen MailAutomation
  • Geben Sie der Klasse den Namen cMailHandler
  • Setzen Sie die Instancing-Eigenschaft der Klasse auf ‚5 - MultiUse'

Als erstes kodieren wir die Funktion zum Erstellen der HTML-Datei. Sie bekommt den Zielpfad und den Mailtext übergeben, und liefert eine Statusmeldung zurück.

Public Function SendMailToServer( _
        byval sPath As Variant, _
        byval sMailText As Variant) As Variant
    
    On Error Resume Next
    
    Dim sHTML As String
    
    ' HTML-Datei erzeugen
    sHTML = GetHeader & _
        FormatHTML(sMailText) & _
        GetFooter
    
    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
    
    ' HTML-Datei schreiben
    Open sPath & "Content.htm" For Output As #1
        Print #1, sHTML
    Close #1
    
    ' FTP-Transfer starten
    Shell sPath & "Transfer.bat"
    
    ' Statusmeldung zurück geben
    If Err.Number = 0 Then
        SendMailToServer = "OK!"
    Else
        SendMailToServer = Err.Description
    End If
End Function

Der übergebene Mailtext wird nach HTML konvertiert und von einem fixen Header und Footer umschloßen. Danach wird alles in eine Datei namens "Content.htm" geschrieben, die dann durch den Aufruf der Batchdatei "Transfer.bat" an den Server geschickt wird.

Die Funktion FormatHTML ersetzt Sonderzeichen im Text durch deren HTML-Äquivalente und gibt den HTML-konformen Text zurück:

Private Function FormatHTML(sString As Variant) As String
    sString = Replace(sString, vbCr, "<br>")
    sString = Replace(sString, "ä", "&auml;")
    sString = Replace(sString, "ö", "&ouml;")
    sString = Replace(sString, "ü", "&uuml;")
    sString = Replace(sString, "ß", "&szlig;")
    sString = Replace(sString, "Ä", "&Auml;")
    sString = Replace(sString, "Ö", "&Ouml;")
    sString = Replace(sString, "Ü", "&Uuml;")
    FormatHTML = sString
End Function

In der Funktion GetHeader wird der HTML-Header hinterlegt:

Private Function GetHeader() As String
    Dim sHeader As String

    sHeader = sHeader & "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//DE'>"
    sHeader = sHeader & ""
    sHeader = sHeader & "<HTML>"
    sHeader = sHeader & "<HEAD>"
    sHeader = sHeader & "   <META HTTP-EQUIV='Content-Type' CONTENT='text/html'>"
    sHeader = sHeader & "   <TITLE>Titel der Seite</TITLE>"
    sHeader = sHeader & ""
    sHeader = sHeader & "</HEAD>"
    sHeader = sHeader & ""
    sHeader = sHeader & "<BODY>"
    
    GetHeader = sHeader
End Function

In der Funktion GetFooter wird der HTML-Footer und ein Zeitstempel hinterlegt:

Private Function GetFooter() As String
    Dim sFooter As String
        
    sFooter = sFooter & "</BODY>"
    sFooter = sFooter & "<P>"
    sFooter = sFooter & "<HR>"
    sFooter = sFooter & "<BR>Letzte Aktualisierung am " & Now() & " durch Heinz 
            Mustermann</P>"
    sFooter = sFooter & "</BODY>"
    sFooter = sFooter & "</HTML>"
    
    GetFooter = sFooter
End Function

Kompilieren Sie das Projekt zur MailAutomation.dll. Kopieren Sie die DLL auf den Exchange-Server in das Windows-System-Verzeichnis und registrieren Sie sie mit "RegSvr32.exe" (Beispiel: "RegSvr32 C:\WinNT\System32\MailAutomation.dll").

Die Transfer-Dateien

Für den Transfer der Datei auf einen FTP-Server erstellen wir eine Textdatei, die die nötigen FTP-Befehle enthält. Diese Datei wird dann mittels einer Batch-Datei aus der COM-Komponente heraus ausgeführt. Erstellen Sie mit Notepad eine neue Datei, geben Sie Ihr den Namen "Transfer.txt" und füllen Sie sie mit folgendem Inhalt:

open www.MeineSeite.de
Benutzername
Paßwort
cd Zielverzeichnis
send D:\Content.htm
close
bye

Die Daten müssen natürlich durch die entsprechenden, eigenen Daten ersetzt werden.

Die Batch-Datei hat den Namen Transfer.bat und besteht nur aus einer einzigen Zeile:

ftp -s:D:\Transfer.txt

Wichtig ist daß Transfer.txt und Transfer.bat in dem Verzeichnis liegen, das an die COM-Komponente übergeben wurde.

Bevor Sie die Funktion testen sollten Sie den Exchange Server einmal neu starten.

Sicherheitshinweis

Bevor man das gezeigt Beispiel in die Praxis umsetzt, sollte man sich im klaren sein, daß diese Technik ein gewisses Sicherheitsrisiko mit sich bringt, da natürlich auch Fremde an das eingerichtete Mailkonto Mails schicken können. Dies könnte man z.B. dadurch lösen, indem man entweder im Exchange-Skript oder in der COM-Komponente den Absender mit einer Liste abgleicht.

Auch die Speicherung des Benutzernamens und des Passwortes in der Transfer.txt stellt ein potentielles Sicherheitsrisiko dar. Dies könnte man z.B. durch das Setzen der NT-Verzeichnissicherheit lösen.

Schlußbemerkung

Das hier vorgestellte Projekt ist bewußt einfach gehalten und soll mehr die Einsatzmöglichkeiten zeigen. Ziel des Artikels sollte es sein, die Funktion der Exchange Serverskript einmal etwas näher zu beleuchten.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Wenn 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.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.