Jeden Morgen dieselbe E-Mail schreiben? Das kann Outlook für Sie übernehmen! Dieses VBA-Makro versendet Ihre vorbereitete Nachricht beim Start von klassischem Outlook – etwa eine tägliche Statusmeldung oder einen persönlichen Gruß. Eine Datumsprüfung verhindert wiederholte automatische Sendeversuche am selben Tag. Entdecken Sie, wie Sie das Makro einrichten und sich einen täglichen Handgriff sparen.
1. Ziel des Makros
Die verlinkte Anleitung beschreibt eine tägliche Nachricht beim ersten Outlook-Start. Ein gespeichertes Datum verhindert, dass jeder weitere Neustart dieselbe Nachricht erneut auslöst.
Die folgende eigenständige Umsetzung ergänzt:
- Einrichtung ohne Änderungen am Quellcode.
- Auswahl eines bestimmten Absenderkontos.
- Mehrere Empfänger, getrennt durch Semikolon.
- Eine Vorschau und getrennte Aktivierung der Automatik.
- Fehlerbehandlung und einen gespeicherten Schutz gegen wiederholte Sendeversuche.
Verwendet werden Application, NameSpace, Account, MailItem und Recipient.
Die Tagesbegrenzung bezieht sich auf den Sendeversuch. Eine erfolgreiche Zustellung lässt sich durch den Aufruf von .Send allein nicht bestätigen. Auch läuft das Makro nur beim Outlook-Start oder beim manuellen Aufruf. Bleibt Outlook über Nacht geöffnet, entsteht am nächsten Morgen kein neues Startereignis.
2. Technische Umsetzung
Bibliotheken und Kompatibilität
Der Code verwendet die in Outlook vorhandene Outlook-Objektbibliothek und die VBA-Standardfunktionen. Zusätzliche Bibliotheken, Windows-API-Deklarationen oder Administratorrechte sind für den Code nicht erforderlich. Er enthält keine von 32 beziehungsweise 64 Bit abhängigen Aufrufe.
Ablauf
Application_Startupruft die Versandprüfung auf. Outlook stellt dieses Ereignis beim Start nach dem Laden der Add-ins bereit. Microsoft: Application.Startup- Das Makro prüft, ob die Automatik aktiviert und Outlook im Onlinemodus ist.
- Es sucht das konfigurierte Absenderkonto anhand von SMTP-Adresse und Anzeigename.
- Es erstellt eine Nachricht und prüft die Empfänger.
- Es vergleicht das aktuelle lokale Datum mit dem gespeicherten Versandtag.
- Es speichert die Tagessperre und ruft anschließend
.Sendauf.
Das Absenderkonto wird ausdrücklich über SendUsingAccount festgelegt. Dadurch hängt der Versand nicht vom aktuell eingestellten Standardkonto ab. Microsoft: SendUsingAccount
Speicherung und Schutz vor Wiederholungen
SaveSetting und GetSetting speichern Einstellungen unter:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\OutlookTagesmailV1
Darunter verwendet jedes Outlook-Profil einen eigenen Bereich. Microsoft: SaveSetting
Der Tag wird vor dem Sendeaufruf gespeichert. Scheitert der Versand anschließend oder stürzt Outlook ab, bleibt der Tag gesperrt. Das reduziert doppelte Nachrichten, kann aber dazu führen, dass eine Nachricht an diesem Tag ausbleibt. Bei einem solchen Fehler müssen Sie den Versandzustand prüfen.
Die Sperre koordiniert keine verschiedenen Computer oder unabhängig ausgeführten Outlook-Instanzen.
Betroffene Ordner und Leistung
Das Makro durchsucht keine vorhandenen E-Mails. Outlook verarbeitet den Versand über den Postausgang und legt gesendete Nachrichten entsprechend seinen Kontoeinstellungen ab. Die Vorschau kann beim Speichern einen Entwurf erzeugen.
Die Laufzeit hängt hauptsächlich von der Anzahl der Konten und der Empfängerauflösung ab, kaum von der Postfachgröße.
3. Vollständiger VBA-Code
Den gesamten Code in ThisOutlookSession einfügen. Empfänger und Texte werden später über die Einrichtung abgefragt; der Code enthält keine auszufüllenden Platzhalter.
Die Programmstruktur wurde statisch geprüft. Einen Laufzeit- oder Versandtest in Outlook konnte ich hier nicht durchführen.
Option Explicit
' Gesamten Code in ThisOutlookSession einfuegen.
' Fuer klassisches Outlook unter Windows, 32 und 64 Bit.
' Einrichtung und Aktivierung erfolgen ueber die unten stehenden Makros.
Private Const APP_NAME As String = "OutlookTagesmailV1"
Private mLaeuft As Boolean
Private Sub Application_Startup()
' Beim Start ohne Erfolgsmeldung pruefen und gegebenenfalls senden.
TagesmailSenden False
End Sub
Public Sub TagesmailEinrichten()
Dim abschnitt As String
Dim kandidat As Outlook.Account
Dim konto As Outlook.Account
Dim pruefmail As Outlook.MailItem
Dim antwort As VbMsgBoxResult
Dim empfaenger As String, betreff As String, inhalt As String
On Error GoTo Fehler
abschnitt = ProfilAbschnitt()
Pruefe Application.Session.Accounts.Count > 0, _
"Im aktuellen Profil ist kein E-Mail-Konto vorhanden."
' Konten einzeln anbieten; keine Abhaengigkeit von ihrer Reihenfolge.
For Each kandidat In Application.Session.Accounts
antwort = MsgBox("Dieses Absenderkonto verwenden?" & vbCrLf & _
kandidat.DisplayName & vbCrLf & kandidat.SmtpAddress, _
vbYesNoCancel + vbQuestion, "Tagesmail einrichten")
If antwort = vbCancel Then Exit Sub
If antwort = vbYes Then
Set konto = kandidat
Exit For
End If
Next kandidat
If konto Is Nothing Then Exit Sub
Pruefe Len(Trim$(konto.SmtpAddress)) > 0, _
"Das gewaehlte Konto liefert keine SMTP-Adresse."
empfaenger = Trim$(InputBox( _
"Empfaenger eingeben; mehrere Adressen mit Semikolon trennen." & _
vbCrLf & "Fuer den ersten Test die eigene Adresse verwenden.", _
"Tagesmail: Empfaenger", _
GetSetting(APP_NAME, abschnitt, "Empfaenger", konto.SmtpAddress)))
If Len(empfaenger) = 0 Then Exit Sub
betreff = Trim$(InputBox("Betreff ohne Datum:", "Tagesmail: Betreff", _
GetSetting(APP_NAME, abschnitt, "Betreff", "Meine Tagesmeldung")))
If Len(betreff) = 0 Then Exit Sub
inhalt = Trim$(InputBox("Nachrichtentext in einer Zeile:", _
"Tagesmail: Nachricht", GetSetting(APP_NAME, abschnitt, "Text", _
"Guten Morgen, ich habe Outlook heute gestartet.")))
If Len(inhalt) = 0 Then Exit Sub
' Adressen pruefen, bevor die Konfiguration veraendert wird.
' Diese Nachricht wird weder angezeigt noch gespeichert oder gesendet.
Set pruefmail = NeueMail(konto, empfaenger, betreff, inhalt)
' Bei einem Schreibfehler darf keine halbfertige Konfiguration aktiv sein.
SaveSetting APP_NAME, abschnitt, "Aktiv", "0"
SaveSetting APP_NAME, abschnitt, "SMTP", konto.SmtpAddress
SaveSetting APP_NAME, abschnitt, "Kontoname", konto.DisplayName
SaveSetting APP_NAME, abschnitt, "Empfaenger", empfaenger
SaveSetting APP_NAME, abschnitt, "Betreff", betreff
SaveSetting APP_NAME, abschnitt, "Text", inhalt
' Die bestehende Tagessperre wird bei einer Neueinrichtung beibehalten.
Set pruefmail = Nothing
MsgBox "Einstellungen gespeichert. Die Automatik ist deaktiviert." & _
vbCrLf & "Zuerst TagesmailVorschau, danach TagesmailAktivieren starten.", _
vbInformation, "Tagesmail"
Exit Sub
Fehler:
MsgBox "Einrichtung: " & Err.Description, vbExclamation, "Tagesmail"
End Sub
Public Sub TagesmailVorschau()
Dim mail As Outlook.MailItem
On Error GoTo Fehler
Set mail = KonfigurierteMail()
mail.Subject = "[TESTVORSCHAU] " & mail.Subject
' Nur anzeigen. Manuelles Senden dieser Vorschau setzt keine Tagessperre!
mail.Display
Exit Sub
Fehler:
MsgBox "Vorschau: " & Err.Description, vbExclamation, "Tagesmail"
End Sub
Public Sub TagesmailAktivieren()
Dim mail As Outlook.MailItem
Dim abschnitt As String
On Error GoTo Fehler
abschnitt = ProfilAbschnitt()
Set mail = KonfigurierteMail()
If MsgBox("Automatischen Versand beim Outlook-Start aktivieren?" & _
vbCrLf & "Absender: " & _
GetSetting(APP_NAME, abschnitt, "SMTP", "") & _
vbCrLf & "An: " & mail.To & vbCrLf & _
"Hoechstens ein automatischer Sendeversuch je Kalendertag.", _
vbYesNo + vbQuestion + vbDefaultButton2, "Tagesmail") <> vbYes Then
Exit Sub
End If
SaveSetting APP_NAME, abschnitt, "Aktiv", "1"
MsgBox "Aktiviert. Versand beim naechsten Outlook-Start oder durch " & _
"TagesmailJetzt. Die Tagessperre bleibt dabei wirksam.", _
vbInformation, "Tagesmail"
Exit Sub
Fehler:
MsgBox "Aktivierung: " & Err.Description, vbExclamation, "Tagesmail"
End Sub
Public Sub TagesmailDeaktivieren()
On Error GoTo Fehler
SaveSetting APP_NAME, ProfilAbschnitt(), "Aktiv", "0"
MsgBox "Automatik deaktiviert. Bereits uebergebene Nachrichten " & _
"werden dadurch nicht zurueckgerufen.", vbInformation, "Tagesmail"
Exit Sub
Fehler:
MsgBox "Deaktivierung: " & Err.Description, vbExclamation, "Tagesmail"
End Sub
Public Sub TagesmailJetzt()
' Manueller Aufruf mit denselben Pruefungen und derselben Tagessperre.
TagesmailSenden True
End Sub
Private Sub TagesmailSenden(ByVal mitHinweis As Boolean)
Dim abschnitt As String
Dim mail As Outlook.MailItem
Dim heute As Long, letzterTag As Long
Dim rohwert As String, fehlertext As String
Dim reserviert As Boolean
' Verhindert verschachtelte Aufrufe innerhalb dieser Outlook-Sitzung.
If mLaeuft Then Exit Sub
On Error GoTo Fehler
mLaeuft = True
abschnitt = ProfilAbschnitt()
If GetSetting(APP_NAME, abschnitt, "Aktiv", "0") <> "1" Then
If mitHinweis Then MsgBox "Die Automatik ist deaktiviert.", _
vbInformation, "Tagesmail"
GoTo Ende
End If
' Dies erkennt Outlooks Offlinezustand, prueft aber keine Internetverbindung.
If Application.Session.Offline Then
If mitHinweis Then MsgBox "Outlook ist offline. Spaeter erneut " & _
"TagesmailJetzt starten.", vbInformation, "Tagesmail"
GoTo Ende
End If
' Keine Suche im Postfach: nur Konten und Empfaenger werden geprueft.
Set mail = KonfigurierteMail()
heute = CLng(Date)
rohwert = GetSetting(APP_NAME, abschnitt, "VersuchTag", "0")
Pruefe Len(rohwert) > 0 And Len(rohwert) <= 7 And _
(rohwert Like String$(Len(rohwert), "#")), _
"Der gespeicherte Versandtag ist ungueltig. Einstellungen pruefen."
letzterTag = CLng(rohwert)
Pruefe letzterTag <= heute, _ "Der gespeicherte Versandtag liegt in der Zukunft. Systemdatum pruefen." If letzterTag = heute Then If mitHinweis Then MsgBox "Fuer heute ist bereits ein Sendeversuch " & _ "registriert. Es wird nicht erneut gesendet.", _ vbInformation, "Tagesmail" GoTo Ende End If ' Zuerst dauerhaft reservieren, dann senden. ' Schlaegt das Speichern fehl, wird Send nicht aufgerufen. SaveSetting APP_NAME, abschnitt, "VersuchTag", CStr(heute) reserviert = True mail.Send ' Ein fehlerfreier Send-Aufruf ist keine Zustellbestaetigung. If mitHinweis Then MsgBox "Sendeaufruf abgeschlossen. Die Zustellung " & _ "ist damit noch nicht bestaetigt.", _ vbInformation, "Tagesmail" GoTo Ende Fehler: fehlertext = "Fehler " & CStr(Err.Number) & ": " & Err.Description If reserviert Then fehlertext = fehlertext & vbCrLf & _ "Der heutige Versuch bleibt gesperrt. Bitte Postausgang und " & _ "Gesendete Elemente pruefen; kein automatischer Wiederholungsversuch." End If Debug.Print Format$(Now, "yyyy-mm-dd hh:nn:ss") & " " & fehlertext MsgBox fehlertext, vbExclamation, "Tagesmail" Ende: Set mail = Nothing mLaeuft = False End Sub Private Function KonfigurierteMail() As Outlook.MailItem Dim abschnitt As String Dim smtp As String, kontoname As String Dim empfaenger As String, betreff As String, inhalt As String Dim kandidat As Outlook.Account, konto As Outlook.Account Dim treffer As Long ' Fehler werden an das aufrufende Makro mit Fehlerbehandlung weitergegeben. abschnitt = ProfilAbschnitt() smtp = GetSetting(APP_NAME, abschnitt, "SMTP", "") kontoname = GetSetting(APP_NAME, abschnitt, "Kontoname", "") empfaenger = GetSetting(APP_NAME, abschnitt, "Empfaenger", "") betreff = GetSetting(APP_NAME, abschnitt, "Betreff", "") inhalt = GetSetting(APP_NAME, abschnitt, "Text", "") Pruefe Len(smtp) > 0 And Len(empfaenger) > 0 And _
Len(betreff) > 0 And Len(inhalt) > 0, _
"Bitte zuerst TagesmailEinrichten ausfuehren."
' Genau das gespeicherte Konto finden; kein stiller Wechsel zum Standardkonto.
For Each kandidat In Application.Session.Accounts
If StrComp(kandidat.SmtpAddress, smtp, vbTextCompare) = 0 And _
StrComp(kandidat.DisplayName, kontoname, vbTextCompare) = 0 Then
treffer = treffer + 1
Set konto = kandidat
End If
Next kandidat
Pruefe treffer = 1, _
"Absenderkonto fehlt oder ist nicht eindeutig. Bitte neu einrichten."
Set KonfigurierteMail = NeueMail(konto, empfaenger, betreff, inhalt)
End Function
Private Function NeueMail(ByVal konto As Outlook.Account, _
ByVal empfaenger As String, _
ByVal betreff As String, _
ByVal inhalt As String) As Outlook.MailItem
Dim mail As Outlook.MailItem
Dim adresse As Variant
Dim empfang As Outlook.Recipient
Set mail = Application.CreateItem(olMailItem)
Set mail.SendUsingAccount = konto
mail.BodyFormat = olFormatPlain
mail.Subject = betreff & " - " & Format$(Date, "dd.mm.yyyy")
mail.Body = inhalt & vbCrLf & vbCrLf & _
"Erstellt am " & Format$(Now, "dd.mm.yyyy hh:nn:ss") & "."
' Semikolon ist das ausdruecklich vorgesehene Trennzeichen.
For Each adresse In Split(empfaenger, ";")
If Len(Trim$(CStr(adresse))) > 0 Then
Set empfang = mail.Recipients.Add(Trim$(CStr(adresse)))
empfang.Type = olTo
End If
Next adresse
Pruefe mail.Recipients.Count > 0, "Es wurde kein Empfaenger angegeben."
Pruefe mail.Recipients.ResolveAll, _
"Mindestens ein Empfaenger konnte nicht aufgeloest werden."
Set NeueMail = mail
End Function
Private Function ProfilAbschnitt() As String
Dim profil As String
profil = Application.Session.CurrentProfileName
Pruefe Len(profil) > 0, "Der Outlook-Profilname konnte nicht ermittelt werden."
' Ein eigener Bereich je Outlook-Profil im aktuellen Windows-Benutzerkonto.
ProfilAbschnitt = "Profil_" & profil
End Function
Private Sub Pruefe(ByVal bedingung As Boolean, ByVal meldung As String)
If Not bedingung Then
Err.Raise vbObjectError + 710, "Outlook-Tagesmail", meldung
End If
End Sub
4. Code-Erklärung
Wichtige Variablen
| Variable | Bedeutung |
|---|---|
APP_NAME | Name des eigenen Einstellungsbereichs in der Registry. |
mLaeuft | Verhindert, dass die Versandroutine innerhalb derselben Sitzung verschachtelt ausgeführt wird. |
abschnitt | Einstellungsbereich des aktuellen Outlook-Profils. |
kandidat, konto | Ein gerade geprüftes Konto beziehungsweise das ausgewählte Absenderkonto. |
mail, pruefmail | Die erzeugte E-Mail beziehungsweise eine Nachricht zur Prüfung der Einstellungen. |
heute, letzterTag | Aktuelles Datum und gespeicherter Versuchstag als ganze Zahlen. |
rohwert | Ungeprüfter Registry-Wert, der vor der Zahlenumwandlung validiert wird. |
reserviert | Kennzeichnet, ob die Tagessperre bereits gespeichert wurde. |
mitHinweis | Steuert zusätzliche Meldungen bei manuellem Aufruf. |
Einrichtung und Kontenauswahl
TagesmailEinrichten bietet die vorhandenen Konten nacheinander an. Ja wählt das angezeigte Konto, Nein zeigt das nächste, Abbrechen beendet die Einrichtung.
Anschließend werden Empfänger, Betreff und ein einzeiliger Nachrichtentext abgefragt. Leere Eingaben beenden die Einrichtung vor dem Speichern. Die Eingabedialoge sind für kurze Texte gedacht; für längere Nachrichten wäre eine Vorlage oder ein eigenes Formular sinnvoll.
Vor dem Speichern prüft NeueMail die Empfänger. Erst danach wird die Automatik deaktiviert und die neue Konfiguration geschrieben. Eine bereits bestehende Tagessperre bleibt erhalten.
Erzeugen der Nachricht
Application.CreateItem(olMailItem) erstellt die E-Mail. Set mail.SendUsingAccount = konto ordnet das ausgewählte Konto zu.
BodyFormat = olFormatPlain legt Klartext fest. Der Betreff erhält das Datum; der Nachrichtentext erhält einen Erstellungszeitpunkt. Eine Outlook-Standardsignatur wird hier nicht ausdrücklich eingefügt.
Split(empfaenger, ";") zerlegt die Empfängerliste. Die Schleife erzeugt für jeden nicht leeren Eintrag einen Recipient mit dem Typ olTo.
ResolveAll versucht, sämtliche Empfänger aufzulösen. Das bestätigt weder die Existenz jedes externen Postfachs noch die spätere Zustellung. Microsoft: Recipients.ResolveAll
Prüfung vor dem Versand
KonfigurierteMail lädt die Einstellungen und verlangt genau einen passenden Kontotreffer. Ein gelöschtes oder umbenanntes Konto führt zu einer Fehlermeldung.
TagesmailSenden prüft Aktivierung, Offlinezustand und Versandtag. Ein Datum in der Zukunft stoppt den Vorgang, damit eine falsche Systemuhr nicht unbemerkt weitere Nachrichten auslöst.
Die Offlineprüfung erkennt Outlooks gemeldeten Offlinezustand. Sie ist kein vollständiger Verbindungstest; eine Nachricht kann trotz dieser Prüfung im Postausgang verbleiben.
Fehlerbehandlung
On Error GoTo Fehler führt Fehler zu einer sichtbaren Meldung. Hilfsfunktionen geben ihre Fehler an die aufrufende Routine weiter.
Pruefe erzeugt verständliche Fehlermeldungen für ungültige Zustände. Die Versandroutine schreibt Fehler zusätzlich ins Direktfenster des VBA-Editors, erreichbar über Strg + G.
Bei einem Fehler nach der Reservierung bleibt die Tagessperre bestehen. Das gilt auch dann, wenn ein Add-in den Versand abbricht. Die gemeinsame Aufräumstelle setzt mLaeuft zurück.
5. Installation
- Outlook öffnen.
Starten Sie klassisches Outlook für Windows mit dem gewünschten Profil. Prüfen Sie zunächst, ob Sie damit gewöhnliche Nachrichten senden können. - Alt + F11 drücken.
Damit öffnen Sie den VBA-Editor. - Projekt anzeigen.
Falls links kein Projektfenster sichtbar ist, drücken Sie Strg + R. Öffnen Sie den Projektbaum bis zuThisOutlookSession. ThisOutlookSessionöffnen.
Doppelklicken Sie darauf. Der allgemeine Schritt „Einfügen → Modul“ aus Ihrer Vorlage muss hier angepasst werden: Das Outlook-Startereignis gehört inThisOutlookSession.- Code einfügen.
Kopieren Sie den vollständigen Code hinein. Sichern Sie vorher bereits vorhandenen Code. Falls schon eine ProzedurApplication_Startupexistiert, ergänzen Sie dort den AufrufTagesmailSenden False; es darf nur eine solche Ereignisprozedur geben. AuchOption Explicitdarf nur einmal am Modulkopf stehen. - Prüfen und speichern.
Wählen Sie Debuggen → VBAProject kompilieren; der Projektname kann abweichen. Anschließend Strg + S drücken. Stellen Sie die Makrosicherheit gemäß Abschnitt 9 ein und signieren Sie das Projekt für den dauerhaften Einsatz. - Outlook vollständig neu starten.
Schließen Sie Outlook und öffnen Sie es erneut, nachdem es vollständig beendet wurde. Beim ersten Start versendet der Code noch nichts, weil die Automatik zunächst deaktiviert ist. - Einrichten und testen.
Drücken Sie Alt + F8, wählen SieTagesmailEinrichtenund verwenden Sie zunächst Ihre eigene E-Mail-Adresse als Empfänger. Starten Sie danachTagesmailVorschau, kontrollieren Sie die Nachricht und schließen Sie sie ohne Versand. AnschließendTagesmailAktivierenundTagesmailJetztausführen: Jetzt wird tatsächlich eine Testnachricht an Sie selbst versendet. Prüfen Sie deren Eingang. Ein zweiter Aufruf vonTagesmailJetztmuss die Tagessperre melden.
Wenn Sie danach die endgültigen Empfänger einrichten, wird die Automatik wieder deaktiviert. Aktivieren Sie sie nach der Kontrolle erneut. Der bereits erfolgte Testversuch zählt für diesen Tag weiter; der nächste reguläre Versuch erfolgt frühestens am folgenden Kalendertag.
6. Ausführung
Die öffentlichen Makros starten Sie über Alt + F8 oder über Entwicklertools → Makros → Ausführen.
| Makro | Wirkung |
|---|---|
TagesmailEinrichten | Kontenauswahl und Nachricht konfigurieren; deaktiviert die Automatik beim Speichern. |
TagesmailVorschau | Eine Nachricht zur Kontrolle öffnen; kein automatischer Versand. |
TagesmailAktivieren | Automatik einschalten; versendet selbst noch nichts. |
TagesmailJetzt | Bei aktiver Automatik jetzt senden, sofern heute noch kein Versuch registriert wurde. |
TagesmailDeaktivieren | Weitere automatische Sendeversuche abschalten. |
Schaltfläche in der Symbolleiste für den Schnellzugriff
Öffnen Sie Datei → Optionen → Symbolleiste für den Schnellzugriff. Wählen Sie unter „Befehle auswählen“ die Kategorie Makros, markieren Sie beispielsweise TagesmailJetzt und klicken Sie auf Hinzufügen. Über Ändern können Sie Symbol und Anzeigename anpassen.
Schaltfläche im Menüband
Öffnen Sie Datei → Optionen → Menüband anpassen. Erstellen Sie auf einer gewünschten Registerkarte eine Neue Gruppe. Wählen Sie links Makros, fügen Sie das gewünschte Makro dieser Gruppe hinzu und vergeben Sie einen verständlichen Namen.
Tastaturbedienung
Über Alt + F8 erreichen Sie die Makroliste. Für eine Schaltfläche im Schnellzugriff drücken Sie Alt und anschließend die angezeigte Zugriffstaste; deren Belegung hängt von der Position der Schaltfläche ab.
Vorschau beachten: Wenn Sie dort selbst auf Senden klicken, erfolgt ein gewöhnlicher manueller Versand ohne Tagessperre. Verwenden Sie für den eigentlichen Funktionstest TagesmailJetzt.
7. Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Alt + F11 öffnet keinen VBA-Editor | Neues Outlook oder VBA-Komponente nicht verfügbar | Klassisches Outlook verwenden; gegebenenfalls Office-Installation durch die IT prüfen lassen. |
| Makros sind blockiert | Makrosicherheit oder Unternehmensrichtlinie | Signatur und zulässige Einstellungen prüfen; bei verwalteten Geräten die IT einbeziehen. |
| Manueller Start funktioniert, automatischer Start nicht | Ereigniscode steht im falschen Modul | Application_Startup in ThisOutlookSession unterbringen. |
| „Mehrdeutiger Name: Application_Startup“ | Startereignis doppelt vorhanden | Beide Startaktionen in einer Ereignisprozedur zusammenführen. |
| Nach dem Schließen entsteht kein neuer Start | Outlook läuft im Hintergrund weiter | Im Task-Manager prüfen, ob Outlook noch läuft; normal vollständig beenden. |
| „Die Automatik ist deaktiviert“ | Noch nicht aktiviert oder gerade neu eingerichtet | Einstellungen kontrollieren und TagesmailAktivieren ausführen. |
| Empfänger kann nicht aufgelöst werden | Tippfehler, mehrdeutiger Name oder falsches Trennzeichen | Vollständige Adressen verwenden und mehrere Einträge mit Semikolon trennen. |
| Absenderkonto fehlt oder ist nicht eindeutig | Konto geändert, entfernt oder doppelt konfiguriert | TagesmailEinrichten erneut ausführen und ein eindeutiges Konto wählen. |
| Freigegebenes Postfach fehlt in der Auswahl | Es ist nicht als eigenes Account im Profil verfügbar | Kontoeinbindung und Sendeberechtigungen prüfen lassen; gegebenenfalls gesonderte Delegierungslogik ergänzen. |
| Outlook ist offline oder Nachricht bleibt im Postausgang | Offlinebetrieb, Verbindung oder Kontofehler | Verbindung und Konto prüfen. Nach einem übersprungenen Offline-Start TagesmailJetzt ausführen. |
| „Für heute … registriert“, aber kein Eingang | Sendeversuch fehlgeschlagen, abgebrochen oder Nachricht noch unterwegs | Postausgang, gesendete Elemente und Unzustellbarkeitsmeldungen prüfen. Die Sperre nicht ungeprüft löschen. |
| Gespeicherter Tag liegt in der Zukunft | Systemdatum zurückgestellt oder Wert verändert | Systemdatum korrigieren; gespeicherten Zustand bei Bedarf fachkundig prüfen lassen. |
| Einstellungen können nicht gespeichert werden | Registry-Schreibzugriff blockiert | Benutzerberechtigungen beziehungsweise Richtlinien prüfen lassen. Vor erfolgreicher Reservierung wird nicht gesendet. |
| Am nächsten Morgen kommt keine Nachricht | Outlook wurde nicht neu gestartet | TagesmailJetzt ausführen oder einen zusätzlichen zeitlichen Auslöser implementieren. |
| Mehrere Nachrichten trotz Tagesbegrenzung | Manuell gesendete Vorschau oder Ausführung auf mehreren PCs/Profilen | Vorschau nur kontrollieren; Automatik auf einen vorgesehenen Ausführungsort begrenzen. |
8. Erweiterungen
Diese Erweiterungen sind möglich, aber noch nicht Bestandteil des Codes:
- Nur an Arbeitstagen senden: Wochenenden über
Weekdayausschließen. - Mindestabstand statt Kalendertag: Datum und Uhrzeit speichern, etwa für einen Abstand von 24 Stunden.
- Erinnerung als Auslöser: Einen zusätzlichen Outlook-Erinnerungstermin verwenden, wenn Outlook dauerhaft geöffnet bleibt.
- Outlook-Vorlagen: Längere Nachrichten aus einer
.oft-Datei laden. - HTML-Nachrichten: Formatierungen und eine ausdrücklich eingebundene Signatur ergänzen.
- CC und BCC: Getrennte Empfängerlisten mit den passenden Empfängertypen hinzufügen.
- Anhänge: Festgelegte Dateien nach Prüfung von Existenz und Größe anhängen.
- PDF-Auswahl: Nur passende PDF-Dateien aus einem definierten Ordner übernehmen.
- Versandprotokoll: Versuch, Konto, Zeitpunkt und Fehler in einer CSV-Datei dokumentieren.
- Zentrale Tagesbegrenzung: Bei mehreren Rechnern einen gemeinsam verwalteten Zustand und eine zentrale Ausführung vorsehen.
9. Sicherheitsbewertung
Automatischer Versand
Nach Aktivierung kann das Makro ohne weitere Rückfrage Nachrichten senden. Prüfen Sie deshalb zuerst Absender, Empfänger und Text mit Ihrer eigenen Adresse. Mehrere hier eingetragene Empfänger stehen gemeinsam im sichtbaren An-Feld.
Das Makro liest keine vorhandenen Nachrichten und fügt keine Anhänge hinzu. Empfänger und Nachrichtentext werden jedoch unverschlüsselt in den Benutzereinstellungen gespeichert. Dort gehören keine Kennwörter oder Zugangstoken hinein.
Makroeinstellungen
Die Einstellungen finden Sie unter Datei → Optionen → Trust Center → Einstellungen für das Trust Center → Makroeinstellungen. Für einen kontrollierten Test können Benachrichtigungen für Makros verwendet werden, soweit die Unternehmensrichtlinie das erlaubt. Aktivieren Sie dabei nur den selbst geprüften Code. Eine pauschale Freigabe sämtlicher Makros ist nicht erforderlich. Microsoft: Makrosicherheit
Ein zusätzlicher Zugriff auf das VBA-Projektobjektmodell wird von diesem Makro nicht benötigt. Sicherheitsabfragen zum programmatischen Zugriff sollten nicht durch Abschalten der Schutzfunktionen umgangen werden. Microsoft: Sicherheit des Outlook-Objektmodells
Digitale Signatur
Für den dauerhaften Einsatz sollte das VBA-Projekt digital signiert werden. Im VBA-Editor erfolgt dies über Extras → Digitale Signatur. In einer Organisation eignet sich ein von der IT bereitgestelltes Codesignaturzertifikat. Ein selbst signiertes Zertifikat eignet sich für entsprechend eingerichtete lokale Tests. Nach Codeänderungen muss die Signatur gegebenenfalls erneuert werden. Microsoft: VBA-Projekt digital signieren
Die Tagesmarkierung ist ein lokaler Schutz gegen Wiederholungen. Sie ist weder ein Zustellnachweis noch ein gegen Manipulation geschütztes Versandprotokoll.
10. Einsteigeranleitung
Stellen Sie sich das Makro als vorbereitete Nachricht mit einem Tageskalender vor: Beim Öffnen von Outlook prüft es, ob für heute bereits ein Versandversuch eingetragen ist.
So verwenden Sie es:
- Fügen Sie den Code wie in Abschnitt 5 beschrieben in Outlook ein.
- Drücken Sie Alt + F8 und starten Sie
TagesmailEinrichten. - Wählen Sie Ihr Absenderkonto und geben Sie zunächst Ihre eigene Adresse als Empfänger an.
- Tragen Sie beispielsweise als Betreff „Meine Tagesmeldung“ und als Text „Guten Morgen, ich habe Outlook heute gestartet.“ ein.
- Starten Sie
TagesmailVorschau. Prüfen Sie die Nachricht und schließen Sie sie ohne Versand. - Starten Sie
TagesmailAktivierenund danachTagesmailJetzt. - Kontrollieren Sie, ob die Nachricht bei Ihnen angekommen ist.
- Starten Sie
TagesmailJetzterneut. Outlook soll jetzt melden, dass heute bereits ein Versuch registriert wurde.
Danach können Sie über TagesmailEinrichten die gewünschten Empfänger einstellen und die Automatik erneut aktivieren.
Beispiel: Sie öffnen Outlook morgens um 08:00 Uhr. Die Tagesmail wird ausgelöst. Ein weiterer Start um 14:00 Uhr erzeugt keinen zweiten Versuch. Öffnen Sie Outlook am nächsten Tag erneut, kann die nächste Tagesmail gesendet werden.
Zum Abschalten führen Sie jederzeit TagesmailDeaktivieren aus.
