Language: Deutsch English















Last Update 2006 / 03 / 05





Access & Email

Inhalt

  • Einleitung
  • SendenObjekt bzw. Docmd.SendObject
  • Outlook-Automation



  • Einleitung

    Mit der Anbindung an das Internet, die inzwischen fast an jedem Arbeitsplatz selbstverständlich geworden ist, steigen auch die Anforderungen an Datenbank-Applikationen, von denen immer häufiger erwartet wird, dass sie direkt Schnittstellen zu verschiedenen Internetdienste bieten können.

    Wenn auch das Abrufen von Informationen aus Websites über HTTP oder das Bereitstellen von Daten über FTP bisher noch verhältnismäßig selten vorkommt, so ist der Versand von Emails inzwischen schon zu einer sehr häufig definierten Anforderung an Datenbank-Applikationen geworden.

    So vielfältig wie die Datenbankapplikation selbst sind auch die genauen Anforderungen an die Implementation einer Email-Schnittstelle. So reicht das Spektrum von dem gelegentlichen Versand einer Email an den Enwickler oder Administrator der Applikation, um Fehler zu melden oder technischen Support anzufordern, über den Versand von personalisierten Mailings bis hin zum vollautomatiserten Versand (und Empfang) von Emails zum Zweck des Datenaustauschs und/oder Reportings.

    Auf dieser Webseite möchte ich nun einen kurzen Überblick gewähren, welche Möglichkeiten man als Entwickler hat Email-Funktionalität in MS Access zu implementieren. Und welche Vor- und welche Nachteile die einzelnen Ansätze bieten.



    Zurück zur Übersicht

    SendenObjekt bzw. Docmd.SendObject

    Eine sehr einfache aber dennoch effektive Möglichkeit um Emails aus Access heraus zu versenden ist die Verwendung der SendObject-Methode des DoCmd-Objektes. Diese Methode ermöglicht es eine Email direkt in Access zu generieren und die fertige Email im Standard-Mailclient des Rechner zu öffnen oder direkt in dessen Postausgang zu plazieren.

    Zusätzlich können beliebige Access-Objekte an die Email als Anlage angehängt werden. Dabei werden natürlich nicht die Access-eigenen Formate für die Angehängten Access-Objekte verwendet, sondern die Objekte können in verbreitete Formate wie HTML, RTF oder Plain Text exportiert werden. - Es sollte klar sein, dass dabei das Layout der Access-Objekte fast vollständig verloren geht. Ein weitere Nachteil ist es, dass selbst Tabellen und Abfragen als "optische" Tabellen exportiert werden und es dadurch deutlich erschwert wird, mit diesem Feature erstellte Dateien in andere Applikation zu importieren.

    Auch für VBA-Unkundige bietet sich dieses Feature als Lösung an, da es, wie alle DoCmd-Methoden, mit ähnlichem Funktionsumfang auch über ein Makro umgesetzt werden kann.

    Voraussetzung für diese Art des Emailversand ist ein MAPI1-kompatibler Mailclient auf dem jeweiligen Rechner.

    Achtung! In Access 2000 ist durch einen Bug die Funktionalität der SendObject-Methode stark eingeschränkt. So ist es dort häufig nicht möglich, die SendObject-Methode mehrfach in einer Prozedur aufzurufen oder einen längeren Nachrichtentext zu versenden. Eine genauere Beschreibung des Problems, sowie möglicher Workarounds sind im Artikel Q260819 der MS Knowledgebase beschrieben.

    Fussnoten: 1. MAPI - Messaging Application Programming Interface



    Zurück zur Übersicht

    Outlook-Automation

    Ein andere Möglichkeit Email-Funktionalität in eine Access-Anwendung zu integrieren ist es, MS Outlook über die MS Outlook Objektbibliothek zu automatisieren.

    Das folgende Codebeispiel soll darstellen, wie einfach eine Email über MS Outlook versendet werden kann.

    Public Sub sendMail()
    
        Dim myMail      As Outlook.MailItem
        Dim myOutlApp   As Outlook.Application
    
        ' Ein neue Outlook-Instanz und ein neues Mailitem erstellen
        Set myOutlApp = New Outlook.Application
        Set myMail = myOutlApp.CreateItem(olMailItem)
    
        With myMail
            ' Den Empfänger der Mail festlegen
            .To = "recipient@somewhere.invalid"
            ' Einen CC-Empfänger hinzufügen
            .CC = "other.recipient@somewhere.else.invalid"
            ' Den Betreff der Mail festlegen
            .Subject = "My first mail sent with Outlook-Automation"
            ' Text in die Mail einfügen
            .Body = "Hello dear friend, " & vbCrLf & vbCrLf & _
                    "This is my first mail produced and sent via Outlook-Automation." & _
                    vbCrLf & vbCrLf & "And now I will try add an attachment."
            ' Ein Attachment aus dem Dateisystem anhängen
            .Attachments.Add "c:\path\to\a\file.dat"
    
            ' Die Email abschicken
            .Send
            ' Anstatt die Email sofort zu senden, kann man auch die Display-Methode des
            ' Mailitems verwenden, um die Email anzuzeigen und sie vom Benutzer manuell
            ' verschicken zu lassen. 
    
        End With
    
        ' Die Outlook-Instanz beenden
        myOutlApp.Quit
    
        ' Objektvariablen zerstören und Speicher freigeben
        Set myMail = Nothing
        Set myOutlApp = Nothing
    
    End Sub
    

    Damit dieses Beispiel funktioniert, muss ein Verweis auf die Outlook Objektbibliothek gesetzt sein.

    Diese Methode der Emailintegration ist sehr einfach umzusetzen und verleiht dem Entwickler beinahe vollständige Kontrolle über nahezu alle gängigen Eigenschaften einer zu erstellenden Email, ohne dass er sich um die genaue Konfiguration der Emaileinstellungen in der Zielumgebung seiner Applikation kümmern muss.

    Ganz offensichtlich hat dieser Ansatz zur Emailintegration einen gewaltigen Nachteil. Es ist erforderlich, dass auf jeder Arbeitsstation, auf der die Emailfunktionalität genutzt werden soll MS Outlook installiert ist. - Nein, MS Outlook Express läßt sich nicht als Alternative verwenden.

    Mit ähnlichem Code, wie dem im Beispiel oben, haben sich zahlreiche bösartige Internet-Würmer und Viren quer durch das Web verbreitet und die Daten vieler naiver und unvorsichtiger User vernichtet. Um dem zukünftig vorzubeugen, hat Microsoft die Automationsfeatures von MS Outlook durch "Security-Fixes" beinahe bis zur totalen Nutzlosigkeit reduziert. Wenn diese "Security-Fixes" installiert sind, muss der User jeden Zugriff auf sein Adressbuch und jeden Versuch eine Email zu versenden durch einen Automationsprozess explizit bestätigen. Nach einer Bestätigung, darf ein Prozess für kurze Zeit auf diese Automationsfeatures zugreifen.



    Zurück zur Übersicht



    © 1999 - 2005 by Philipp Stiefel