Mail versenden mit SMTP und VBA

Zusammenfassung

Lernen Sie eine kostenlose VB-DLL kennen, die alle notwendigen Funktionen zum Versenden von E-Mails enthält.

Techniken

SMTP, VBA

Voraussetzungen

Access 97 und höher

Beispieldatenbank

vbSendMail.zip

André Minhorst, Duisburg

Zum Versenden von E-Mails aus einer Access-Datenbank brauchen Sie kein Outlook: Das können Sie mit einer kleinen .dll-Datei gemütlich per VBA erledigen. Wozu Sie eine solche Funktion einsetzen können, haben wir Ihnen etwa mit dem Serienmail-Tool in Ausgabe 4/2006 gezeigt. Eine passende und noch dazu freie Funktionssammlung stellen wir Ihnen im vorliegenden Artikel vor.

Die hier vorgestellte Komponente finden Sie unter der Adresse http://www.freevbcode.com/ShowCode.AspID=109.

Das Paket enthält neben der Datei vbSendMail.dll auch noch den Quellcode in Form eines VB-Projekts – eigenen Anpassungen steht also nichts im Wege.

Neben der genannten DLL benötigen Sie noch die Datei mswinsck.ocx – sollte diese nicht auf Ihrem System installiert sein, verwenden Sie das in den Beispieldateien enthaltene Setup. Es installiert sowohl die vbSendMail.dll als auch mswinsck.ocx in das Verzeichnis c:\windows\system32.

Registrieren der Komponente

Bevor Sie die Mail-DLL in Betrieb nehmen, müssen Sie diese registrieren.

Das erledigen Sie am schnellsten im Ausführen-Dialog (Start/Ausführen) mit folgender Anweisung:

Regsvr32 <Pfad>\vbSendMail.dll

Alternativ verwenden Sie eine Batch-Datei mit dem folgenden Inhalt, die sich im gleichen Verzeichnis wie die vbSendMail.dll befinden muss:

Regsvr32 vbSendMail.dll

Um die Bibliothek in Access und damit innerhalb von VBA verfügbar zu machen, legen Sie einen Verweis auf die Bibliothek an (siehe Bild 1).

Zum Versenden einer einfachen Mail sind nur wenige Zeilen Code nötig. Um die Ereignisse der Komponente abzufangen (dazu später mehr), müssen Sie diese in einem Klassenmodul deklarieren, wobei es sich auch um ein Formularmodul handeln kann.

Bild 1: Setzen eines Verweises auf die Mail-Komponente

Bild 2: Eine einfache, per VBA versendete E-Mail

Quellcode 1: Versenden einer einfachen Text-E-Mail

Public Sub MailSenden()
    Set objSendMail = New vbSendMail.clsSendMail
    With objSendMail
        .SMTPHost = "<Smtp-Server>"
        .from = "<Absender-E-Mail>"
        .Recipient = "<Empfänger-E-Mail>"
        .Subject = "Beispielmail"
        .Message = "Dies ist eine Testmail."
        .Send
    End With
End Sub

Für die ersten Beispiele reicht jedoch ein Standardmodul, das Sie von Access aus mit der Schaltfläche Neu auf der Registerseite Module des Datenbankfensters anlegen.

Hier deklarieren Sie nun eine Objektvariable namens objSendMail (in einer Zeile):

Private objSendMail As vbSendMail.clsSendMail

Die Beispielprozedur aus Quellcode 1 zeigt eine sehr einfache Möglichkeit zum Versenden einer E-Mail per VBA.

Wenn Sie die Platzhalter mit richtigen Daten füllen und der angegebene SMTP-Server keine Authentifizierung verlangt, können Sie mit diesen wenigen Zeilen Code bereits eine E-Mail versenden.

Dies sind aber auch nur die notwendigsten Daten, die zum Versenden einer E-Mail erforderlich sind (siehe Bild 2).

Die folgenden Eigenschaften der Klasse clsSendMail gestalten die E-Mail professioneller:

  • FromDisplayName: Fügt einen Absendernamen hinzu.
  • RecipientName: Fügt den Empfängernamen hinzu.
  • ReplyToAddress: Gibt eine alternative Adresse für Antwort-Mails an.
  • AsHTML: Stellen Sie diese Eigenschaft auf True, wenn Sie den Inhalt der E-Mail mit HTML-Auszeichnungen formatieren möchten.
  • Priority: Mit dieser Eigenschaft versehen Sie eine E-Mail mit einer Priorität (Dringlichkeit) wie HIGH_PRIORITY oder LOW_PRIORITY.
  • Receipt: Legt fest, ob der Empfänger zum Absenden einer Empfangsbestätigung aufgefordert wird.
  • Weitere Empfänger

    Eine E-Mail kann mehr als einen Empfänger haben. Wenn mehrere gleichberechtigte Empfänger die Mail erhalten sollen, geben Sie diese als Zeichenkette für die Eigenschaften Recipient beziehungsweise RecipientName an, wobei Sie die einzelnen Empfänger durch Semikolons voneinander trennen.

    Sollen weitere Empfänger nur eine Kopie (“CC”) erhalten, fügen Sie diese Empfänger mit der Eigenschaft CCRecipient beziehungsweise CCDisplayName hinzu – auch hier geben Sie mehrere Empfänger durch Semikolon getrennt an.

    Wenn Sie eine Kopie an jemanden versenden möchten, ohne dass die anderen Empfänger dies erkennen können, verwenden Sie BCCRecipient.

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    den kompletten Artikel im PDF-Format mit Beispieldatenbank

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar