Serien-Mails direkt aus Access versenden

Vielleicht kennen Sie dieses Problem . . .

Sie möchten ein individualisiertes Dokument (z.B. einen Brief oder eine Bestellbestätigung) als PDF-Dokument per Email versenden, wobei die Daten dazu in einer Access-Datenbank gespeichert sind.

Und vielleicht ist Ihr bisheriges Vorgehen das folgende: Übernahme der Daten in einen Word-Serienbrief, manuelles Verbinden mit der Datenquelle, anschliessend manuelles Speichern als PDF-Datei, Outlook öffnen, Empfänger-Mailadresse eintragen, PDF anfügen und schliesslich versenden.

Dieses Vorgehen ist schon bei zwei oder drei Empfängern ganz schön umständlich, zeitraubend und fehleranfällig. Und für den Fall, dass ein Massenversand von mehreren hundert individuellen Mails notwendig wird, ist der Versand im oben beschriebenen Verfahren nur mit einer Nachtschicht machbar. In einer konkreten Aufgabe waren knapp 3.000 individuelle Mitarbeiterinformationen zu generieren und an die Mitarbeiter eines grossen Unternehmens zu versenden.

Es gibt aber eine sehr einfache Möglichkeit, diese Aufgabe zu automatisieren und direkt aus Access zu erledigen und alles nur mit Bordmitteln von Access und Windows.

Dazu werden die benötigten Informationen innerhalb der Access-Datenbank mit einer (oder mehreren) Abfragen in einer Tabelle zusammengefasst. Der Inhalt des zu versendenden Dokumentes wird als Bericht angelegt. Ein sehr einfaches VBA-Skript, das nur aus wenigen Zeilen besteht, arbeitet in einer Schleife alle Datensätze der Tabelle ab und öffnet jeweils den Bericht, speichert diesen als PDF-Dokument ab und erzeugt zum Schluss eine Mail, die an Outlook übergeben und von Outlook schlussendlich versendet wird.

Ablauf des automatisierten Versands von Emails aus Access
Schematische Übersicht

Innerhalb des VBA-Skriptes sind folgende Schritte massgeblich:
Öffnen des Berichtes:
DoCmd.OpenReport …
Speichern des Berichtes als PDF:
DoCmd.OutputTo …
Email erzeugen und versenden:
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
objMail.Recipients.Add …
objMail.Body = „blablabla“
objMail.Attachments.Add …
objMail.Send

Hier das vollständige Listing des Skriptes:

Private Sub btn_Start_Click()
‚Mails aus Access via Outlook versenden
Dim sPath As String
Dim sFilename As String
Dim sEmpfaenger As String
Dim sBetreff As String
Dim sAnrede_d As String
Dim iErg As Integer
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset(„SELECT * FROM q_Mail_Empfaenger“)
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = CreateObject(„Outlook.Application“)
   sPath = „C:\Access_Mail_Versand\PDF\“ ‚Verzeichnis für das Speichern der Erzeugten PDF-Dateien
   sBetreff = „Darum erhalten Sie diese Mail“
    Do Until rs.EOF
       ‚Brief als PDF-Datei speichern:
       DoCmd.OpenReport „r_Brief“, View:=acViewPreview, WhereCondition:=“PNR = “ & rs.Fields(„PNR“).Value, WindowMode:=acHidden
       sFilename = sPath & rs.Fields(„PNR“).Value & „.pdf“
       DoCmd.OutputTo acOutputReport, „r_Brief“, acFormatPDF, sFilename
       DoCmd.Close acReport, „r_Brief“
        rs.Edit
        ‚Mail erzeugen:
        Set objMail = objOutlook.CreateItem(olMailItem)
       sEmpfaenger = rs.Fields(„EMAIL“).Value
        With objMail
            .Recipients.Add sEmpfaenger
            .subject = sBetreff
           sAnrede_d = „Hallo“
            .Body = sAnrede_d & vbCrLf & vbCrLf _
            & „Anbei senden wir Ihnen einen Brief als PDF-Datei.“
           ‚PDF-Brief als Attachment anfügen:
            .Attachments.Add sFilename
            .Send
        End With
        Set objMail = Nothing
        ‚Zeitstempel Mailversand eintragen:
        rs.Fields(„Mail_gesendet“) = Now()
        rs.Update
        rs.MoveNext
        Loop
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    Set objOutlook = Nothing
    iErg = MsgBox(„Fertig.“, vbOKOnly, „Mailversand – Einsatzpläne“)
End Sub

Wichtig: Um nicht vom eigenen Provider als Spam-Versender deklariert und auf einer Blacklist eingetragen zu werden, macht es Sinn noch eine Wartezeit zwischen dem Versand der einzelnen Mails einbauen.

Haben Sie Fragen zum Skript? Oder benötigen Sie Hilfe bei der Integration in Ihren konkreten Anwendungsfall? Bitte kontaktieren Sie mich gerne . . .