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.
No responses yet