Ziel: E-Mails automatisch versenden, empfangen oder vorbereiten

Access kennt Kunden, Rechnungen, Termine.
Du willst daraus automatisch E-Mails erstellen.
Am besten mit Anhang. Oder direkt auswerten, was zurĂŒckkommt.

Funktioniert mit:

  • Outlook (lokal)
  • SMTP (z. B. fĂŒr Office 365)
  • CDO
  • Mail-APIs (SendGrid, Mailjet, etc.)

Variante 1: Outlook lokal automatisieren

Beispiel: einfache E-Mail mit Anhang

Public Sub SendeMailOutlook()
    Dim olApp As Object, olMail As Object
    Set olApp = CreateObject("Outlook.Application")
    Set olMail = olApp.CreateItem(0)

    With olMail
        .To = "kunde@example.com"
        .Subject = "Ihre Rechnung"
        .Body = "Sehr geehrter Kunde," & vbCrLf & "im Anhang finden Sie die Rechnung."
        .Attachments.Add "C:\Rechnungen\R-4711.pdf"
        .Display ' oder .Send
    End With
End Sub

Vorteil: funktioniert sofort.
Nachteil: Outlook-Warnung (siehe Trust Center).

Variante 2: Versand ohne Outlook – via CDO und SMTP

Beispiel: SMTP-Versand ĂŒber Office 365

Public Sub SendeMailSMTP()
    Dim cdoMsg As Object
    Set cdoMsg = CreateObject("CDO.Message")

    With cdoMsg.Configuration.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "dein@konto.de"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "geheimespasswort"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Update
    End With

    With cdoMsg
        .To = "kunde@example.com"
        .From = "dein@konto.de"
        .Subject = "Zahlungserinnerung"
        .TextBody = "Guten Tag," & vbCrLf & "bitte begleichen Sie Ihre Rechnung."
        .Send
    End With
End Sub

Vorteil: kein Outlook nötig
Nachteil: Passwort im Code, nur Plaintext, kein Anhang ohne Zusatzaufwand

Variante 3: E-Mail-Versand via Maildienst-API (z. B. SendGrid)

Zuerst: API-Key erzeugen im SendGrid-Konto.
Dann POST via HTTP aus VBA.

Public Sub SendeMailViaAPI()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    Dim json As String
    json = "{" & _
           """personalizations"":[{""to"":[{""email"":""kunde@example.com""}]}]," & _
           """from"":{""email"":""noreply@meinefirma.de""}," & _
           """subject"":""Deine Info""," & _
           """content"":[{""type"":""text/plain"",""value"":""Das ist der Text""}]" & _
           "}"

    http.Open "POST", "https://api.sendgrid.com/v3/mail/send", False
    http.setRequestHeader "Authorization", "Bearer DEIN_API_KEY"
    http.setRequestHeader "Content-Type", "application/json"
    http.Send json
End Sub

Vorteil: skalierbar, kein Outlook nötig
Nachteil: API-VerstÀndnis nötig

Variante 4: Empfang von E-Mails aus Outlook

Beispiel: letzte E-Mail im Posteingang lesen

Public Sub LetzteMailLesen()
    Dim olApp As Object, olNS As Object, olInbox As Object, olMail As Object
    Set olApp = CreateObject("Outlook.Application")
    Set olNS = olApp.GetNamespace("MAPI")
    Set olInbox = olNS.GetDefaultFolder(6) ' 6 = Inbox

    Set olMail = olInbox.Items.GetLast
    MsgBox "Von: " & olMail.SenderName & vbCrLf & "Betreff: " & olMail.Subject
End Sub

NĂŒtzlich fĂŒr RĂŒcklĂ€ufer, automatische Zuordnungen, Supportsysteme.

Variante 5: Mailings aus Access vorbereiten

Tabelle tblMails

  • EmpfĂ€nger
  • Betreff
  • Text
  • AnhangPfad
  • GesendetAm

Schleife ĂŒber die Tabelle → E-Mails senden

Public Sub Massenmail()
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblMails WHERE GesendetAm IS NULL")

    Do While Not rs.EOF
        Call SendeEinzelmail(rs!EmpfÀnger, rs!Betreff, rs!Text, rs!AnhangPfad)
        CurrentDb.Execute "UPDATE tblMails SET GesendetAm=Now() WHERE ID=" & rs!ID
        rs.MoveNext
    Loop
End Sub

Best Practices

  • Logs mitfĂŒhren (tblMailLog)
  • Zustellung prĂŒfen bei Massenversand (Return-Codes, Bounces)
  • Outlook-Warnungen umgehen (Redemption, Power Automate, Trust Center)
  • Personalisierte Mails (z. B. mit Platzhaltern [Vorname])
  • Versand zeitlich begrenzen (Pause bei >50 Mails)

Einsatzszenarien

  • Rechnungen automatisch versenden
  • BestellbestĂ€tigungen
  • Termine erinnern
  • Follow-ups bei offenen VorgĂ€ngen
  • RĂŒckmeldungen auslesen und verarbeiten

Fazit fĂŒr Entwickler

Access ist kein Mailclient.
Aber als E-Mail-Zentrale fĂŒr interne Prozesse macht es eine solide Figur.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert