PDA

Vollständige Version anzeigen : eMailer als Modul für MS Outlook


Stefan1977
24.05.2019, 09:53
Hallo zusammen,
jetzt möchte ich doch auch mal was zum Code Archiv beitragen.

Bei uns müssen immer wieder einzelne Personen oder Mail Verteiler informiert werden, wenn in der Datenbank eine bestimmte Änderung vorgenommen wird.

Mittels kurzem Aufruf aus einem Modul kann eine Mail erzeugt und gesendet werden.
Bsp: Call eMailer(1, 1)

Es gibt eine Unterscheidung ob eine Vorlage ausgewählt wird, und ob direkt gesendet oder die Mail nur vorbereitet wird.

Vorgehensweise:
1.
es wird ein Verweis auf die "MS Outlook Object Library" im VBA Editor unter "Extras / Verweise" eingetragen

2. es wird eine Tabelle namens "tblMails" angelegt. Diese enthält:
2a. MailID (integer)
2b. Empfaenger (Text)
2c. Betreff (Text)
2d. Inhalt (Memo)

3. es wird ein Modul namens "eMail" erzeugt
In diesem Modul stehen auch alle Infos wie das ganze zu bedienen ist.
Die Parameter sind teils Optional, so dass sie nicht angegeben werden müssen.
Wird der Parameter für SofortMailen nicht angegeben, wird standartmäßig die Mail nur vorbereitet. Bei einer 1 wird sofort gesendet.

Es ist egal ob Outlook offen oder geschlossen ist.
Das wird vorher geprüft und ggf geöffnet.

Probleme gibt es noch wenn in der Tabelle mehrere Mail Empfänger in einer Zeile stehen und der "Sofortversand" angekreuzt ist.
Eine Formatierung mittels Tabelle habe ich auch nicht hinbekommen.
Vielleicht kommt das noch oder jemand hat da Ideen.


Hier der Code vom Modul:
'---------------------------------------------------------------------------------------
' Module : eMailer
' Datum : 24.05.2019
' Autor : Stefan Zerfaß
' Zweck : eMails aus Outlook versenden
'
' Verweis erstellen auf MS Outlook Object Library
'
' Mittels einer Tabelle "tblMails" werden Mail IDs gespeichert
' jede Mail ID enthält Empfaenger, Betreff, Inhalt
'
' Aufruf mit: Call eMailer(1, 0)
' wobei die erste Zahl die MailID angibt,
' die zweite Zahl bei 1 die Mail sofort schickt und bei 0 nur öffnet
' wird der zweite Wert nicht angegeben wird automatisch 0 gesetzt
'
' Variante: Call eMailerVariabel ("Empfänger", "Betreff", "Inhalt", 0)
'
' Beispiele:
' Call eMailer(1, 1) 'wählt Mail Vorlage 1 und schickt diese sofort los (1)
' Call eMailer(1, 0) 'wählt Mail Vorlage 1 und öffnet diese nur
'
' Call eMailerVariabel("Name@domain.de; name2@domain.org", "Hallo Welt", "Hier kommt eine Mail für dich")
' Call eMailerVariabel("Name@domain.de", "Hallo Welt", "Hier kommt eine Mail für dich", 1)
'---------------------------------------------------------------------------------------
'
Option Compare Database
Option Explicit

Dim strMailEmpfaenger As String
Dim strMailBetreff As String
Dim strMailInhalt As String


Public Sub eMailer(intMailID As Integer, Optional SofortMailen As Integer = 0)

'Mail-ID Werte auslesen:
strMailEmpfaenger = DBEngine(0)(0).OpenRecordset("SELECT Empfaenger FROM tblMails WHERE MailID = " & intMailID, dbOpenSnapshot)(0) 'Empfänger auslesen
strMailBetreff = DBEngine(0)(0).OpenRecordset("SELECT Betreff FROM tblMails WHERE MailID = " & intMailID, dbOpenSnapshot)(0) 'Betreff auslesen
strMailInhalt = DBEngine(0)(0).OpenRecordset("SELECT Inhalt FROM tblMails WHERE MailID = " & intMailID, dbOpenSnapshot)(0) 'Inhalt auslesen

Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
With objMail
.Recipients.Add strMailEmpfaenger
.Subject = strMailBetreff
.Body = strMailInhalt
.Display
If SofortMailen = 1 Then .Send
End With

End Sub

Public Sub eMailerVariabel(Optional strMailEmpfaenger, Optional strMailBetreff, Optional strMailInhalt, Optional SofortMailen As Integer = 0)

Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
With objMail
.Recipients.Add strMailEmpfaenger
.Subject = strMailBetreff
.Body = strMailInhalt
.Display
If SofortMailen = 1 Then .Send
End With

End Sub

Ich hoffe der ein oder andere kann das brauchen.
Grüße, Stefan