Folgende Frage wurde an uns gestellt:
Kann ich eine Outlook-Regel erstellen, die verhindert, dass ich eine E-Mail an eine falsche Adresse sende? Der Grund: Ich habe verschiedene E-Mail-Adressen. Gelegentlich beabsichtige ich, eine Nachricht an meine eigene Adresse zu senden, verwende aber stattdessen die falsche Adresse und sende eine E-Mail mehr als einmal an dieselbe falsche Person.
Sie können ein VBA-Skript in Outlook verwenden, um zu überprüfen, ob die E-Mail-Adresse des Empfängers korrekt ist, bevor Sie die Nachricht senden. Hier ist ein einfaches Beispiel für ein solches Skript:
- Öffnen Sie Outlook und drücken Sie
Alt + F11
, um den VBA-Editor zu öffnen. - Im VBA-Editor, gehen Sie zu
Insert > Module
, um ein neues Modul einzufügen. - Kopieren Sie den folgenden Code in das Modul:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Prompt As String
Dim AddressToCheck As String
Dim Recipient As Recipient
' Die E-Mail-Adresse, die Sie überprüfen möchten
AddressToCheck = "ihre_korrekte_email@beispiel.com"
For Each Recipient In Item.Recipients
If Recipient.Address = AddressToCheck Then
Prompt = "Sie sind dabei, eine E-Mail an " & AddressToCheck & " zu senden. Sind Sie sicher?"
If MsgBox(Prompt, vbYesNo + vbQuestion, "E-Mail-Überprüfung") = vbNo Then
Cancel = True
End If
End If
Next Recipient
End Sub
- Ersetzen Sie
"ihre_korrekte_email@beispiel.com"
mit der E-Mail-Adresse, die Sie überprüfen möchten. - Schließen Sie den VBA-Editor.
Mit diesem Skript wird vor dem Senden jeder E-Mail überprüft, ob die E-Mail-Adresse des Empfängers der in AddressToCheck
definierten Adresse entspricht. Wenn dies der Fall ist, wird ein Dialogfeld angezeigt, das fragt, ob Sie sicher sind, dass Sie die E-Mail senden möchten. Wenn Sie “Nein” wählen, wird das Senden der E-Mail abgebrochen.
Überprüfen Sie die Adressen im Feld An, CC oder BCC mithilfe der Empfängersammlung
Sie können das VBA-Skript in Outlook so anpassen, dass alle Adressen im “An”, “CC” und “BCC” Feld überprüft werden, bevor die E-Mail gesendet wird. Hier ist ein Beispiel dafür, wie Sie dies tun können:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Recipient As Recipient
Dim AddressToCheck As String
Dim Prompt As String
' Die Adresse, die Sie vermeiden möchten
AddressToCheck = "falsche_adresse@beispiel.com"
For Each Recipient In Item.Recipients
If LCase(Recipient.Address) = LCase(AddressToCheck) Or _
LCase(Recipient.Name) = LCase(AddressToCheck) Then
Prompt = "Sie sind dabei, eine E-Mail an " & AddressToCheck & " zu senden. Sind Sie sicher?"
If MsgBox(Prompt, vbYesNo + vbQuestion, "E-Mail-Überprüfung") = vbNo Then
' Abbrechen, wenn der Benutzer Nein wählt
Cancel = True
Exit For
End If
End If
Next Recipient
End Sub
- Ersetzen Sie
"falsche_adresse@beispiel.com"
durch die E-Mail-Adresse, die Sie überprüfen möchten. - Schließen Sie den VBA-Editor.
Dieses Skript überprüft alle Empfänger im “An”, “CC” und “BCC” Feld einer E-Mail. Wenn die Adresse mit der in AddressToCheck
definierten Adresse übereinstimmt (unabhängig von Groß- und Kleinschreibung), wird ein Dialogfeld angezeigt, das fragt, ob Sie sicher sind, dass Sie die E-Mail senden möchten. Wenn Sie “Nein” auswählen, wird das Senden der E-Mail abgebrochen.
Prüfung auf mehrere Domains
Wenn Sie die E-Mail-Adressen auf mehrere Domains überprüfen möchten, können Sie eine Liste von verbotenen Domains erstellen und jede Adresse auf diese Domains überprüfen. Hier ist ein Beispiel, wie Sie das machen können:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Recipient As Recipient
Dim BannedDomains As Collection
Dim Domain As Variant
Dim AtPos As Integer
Dim RecipientDomain As String
Dim Prompt As String
' Liste von verbotenen Domains erstellen
Set BannedDomains = New Collection
BannedDomains.Add "beispiel1.com"
BannedDomains.Add "beispiel2.com"
BannedDomains.Add "beispiel3.com"
For Each Recipient In Item.Recipients
' E-Mail-Domain extrahieren
AtPos = InStr(Recipient.Address, "@")
If AtPos > 0 Then
RecipientDomain = Mid(Recipient.Address, AtPos + 1)
' Überprüfen, ob die Domain in der Liste der verbotenen Domains ist
For Each Domain In BannedDomains
If LCase(RecipientDomain) = LCase(Domain) Then
Prompt = "Die Domain " & Domain & " ist verboten. Möchten Sie trotzdem senden?"
If MsgBox(Prompt, vbYesNo + vbQuestion, "Domain-Überprüfung") = vbNo Then
Cancel = True
Exit For
End If
End If
Next Domain
End If
Next Recipient
End Sub
- Fügen Sie die Domains, die Sie überprüfen möchten, zur
BannedDomains
-Liste hinzu, indem Sie Zeilen wieBannedDomains.Add "beispiel.com"
hinzufügen. - Schließen Sie den VBA-Editor.
Dieses Skript extrahiert die Domain aus jeder Empfänger-E-Mail-Adresse und überprüft, ob sie in der Liste der verbotenen Domains enthalten ist. Wenn eine Übereinstimmung gefunden wird, wird ein Dialogfeld angezeigt, das den Benutzer fragt, ob er die E-Mail trotzdem senden möchte. Wenn der Benutzer “Nein” auswählt, wird das Senden der E-Mail abgebrochen.
Prüfung auf verschiedene Domänen
Wenn Sie E-Mail-Adressen vor dem Senden auf verschiedene Domänen überprüfen möchten, können Sie eine Liste von Domänen erstellen, gegen die jede Adresse geprüft wird. Hier ein Beispiel, wie Sie dies mit VBA in Outlook umsetzen können:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Recipient As Recipient
Dim AllowedDomains As Collection
Dim Domain As Variant
Dim AtPos As Integer
Dim RecipientDomain As String
Dim IsAllowedDomain As Boolean
Dim Prompt As String
' Liste von erlaubten Domains erstellen
Set AllowedDomains = New Collection
AllowedDomains.Add "erlaubte-domain1.com"
AllowedDomains.Add "erlaubte-domain2.com"
AllowedDomains.Add "erlaubte-domain3.com"
For Each Recipient In Item.Recipients
' E-Mail-Domain extrahieren
AtPos = InStr(Recipient.Address, "@")
If AtPos > 0 Then
RecipientDomain = Mid(Recipient.Address, AtPos + 1)
' Überprüfen, ob die Domain in der Liste der erlaubten Domains ist
IsAllowedDomain = False
For Each Domain In AllowedDomains
If LCase(RecipientDomain) = LCase(Domain) Then
IsAllowedDomain = True
Exit For
End If
Next Domain
' Warnung anzeigen, wenn die Domain nicht erlaubt ist
If Not IsAllowedDomain Then
Prompt = "Die Domain " & RecipientDomain & " ist nicht in der Liste der erlaubten Domains. Möchten Sie trotzdem senden?"
If MsgBox(Prompt, vbYesNo + vbQuestion, "Domain-Überprüfung") = vbNo Then
Cancel = True
Exit For
End If
End If
End If
Next Recipient
End Sub
- Fügen Sie die Domains, die Sie erlauben möchten, zur
AllowedDomains
-Liste hinzu, indem Sie Zeilen wieAllowedDomains.Add "erlaubte-domain.com"
hinzufügen. - Schließen Sie den VBA-Editor.
Dieses Skript extrahiert die Domain aus jeder Empfänger-E-Mail-Adresse und überprüft, ob sie in der Liste der erlaubten Domains enthalten ist. Wenn keine Übereinstimmung gefunden wird, wird ein Dialogfeld angezeigt, das den Benutzer fragt, ob er die E-Mail trotzdem senden möchte. Wenn der Benutzer “Nein” auswählt, wird das Senden der E-Mail abgebrochen.
Prüfung auf Nachrichten an interne und externe Adressen
Wenn Sie Nachrichten in Outlook darauf überprüfen möchten, ob sie sowohl an interne als auch an externe Adressen gesendet werden, können Sie ein VBA-Skript verwenden. Hier ist ein Beispiel, wie Sie dies machen können:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim Recipient As Recipient
Dim InternalDomain As String
Dim ExternalRecipientFound As Boolean
Dim InternalRecipientFound As Boolean
Dim Prompt As String
' Die Domain Ihrer internen E-Mail-Adressen
InternalDomain = "ihre-firma.com"
' Überprüfen Sie alle Empfänger
For Each Recipient In Item.Recipients
If InStr(Recipient.Address, "@" & InternalDomain) > 0 Then
InternalRecipientFound = True
Else
ExternalRecipientFound = True
End If
Next Recipient
' Wenn sowohl interne als auch externe Empfänger gefunden wurden, zeigen Sie eine Warnung an
If InternalRecipientFound And ExternalRecipientFound Then
Prompt = "Diese Nachricht wird an interne und externe Adressen gesendet. Möchten Sie fortfahren?"
If MsgBox(Prompt, vbYesNo + vbQuestion, "Überprüfung der Empfängeradressen") = vbNo Then
Cancel = True
End If
End If
End Sub
- Ersetzen Sie
"ihre-firma.com"
mit der Domain Ihrer internen E-Mail-Adressen. - Schließen Sie den VBA-Editor.
Dieses Skript überprüft vor dem Senden jeder E-Mail, ob sowohl interne als auch externe Empfänger vorhanden sind. Wenn dies der Fall ist, wird ein Dialogfeld angezeigt, das fragt, ob Sie sicher sind, dass Sie die Nachricht senden möchten. Wenn Sie “Nein” auswählen, wird das Senden der E-Mail abgebrochen.
Neue gesendete Nachrichten prüfen
Wenn Sie überprüfen möchten, ob neue gesendete Nachrichten sowohl an interne als auch an externe Adressen gerichtet sind, können Sie ein Ereignis in VBA verwenden, um auf das Senden der Nachricht zu reagieren. Hier ist ein Beispiel, wie Sie dies machen können:
- Drücken Sie
Alt + F11
, um den VBA-Editor in Outlook zu öffnen. - Gehen Sie zu
Insert > Class Module
, um ein neues Klassenmodul hinzuzufügen. - Benennen Sie das Klassenmodul um in
MailSendClass
indem Sie auf den Namen im Eigenschaftenfenster klicken. - Fügen Sie den folgenden Code in das Klassenmodul ein:
Public WithEvents SentItems As Outlook.Items
Private Sub Application_Startup()
Set SentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub
Private Sub SentItems_ItemAdd(ByVal Item As Object)
Dim MailItem As Outlook.MailItem
Dim Recipient As Recipient
Dim InternalDomain As String
Dim ExternalRecipientFound As Boolean
Dim InternalRecipientFound As Boolean
' Stellen Sie sicher, dass es sich bei dem Element um eine E-Mail handelt
If TypeOf Item Is MailItem Then
Set MailItem = Item
InternalDomain = "ihre-firma.com"
' Überprüfen Sie alle Empfänger
For Each Recipient In MailItem.Recipients
If InStr(Recipient.Address, "@" & InternalDomain) > 0 Then
InternalRecipientFound = True
Else
ExternalRecipientFound = True
End If
Next Recipient
' Wenn sowohl interne als auch externe Empfänger gefunden wurden, zeigen Sie eine Nachricht an
If InternalRecipientFound And ExternalRecipientFound Then
MsgBox "Eine gesendete Nachricht wurde sowohl an interne als auch an externe Adressen gerichtet."
End If
End If
End Sub
- Gehen Sie zu
Einfügen> Module
, um ein neues Modul hinzuzufügen. - Fügen Sie den folgenden Code in das Modul ein:
Dim MailSendEvents As MailSendClass
Sub InitializeHandler()
Set MailSendEvents = New MailSendClass
Set MailSendEvents.SentItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub
- Führen Sie das
InitializeHandler
Makro aus, um den Ereignishandler zu initialisieren. - Schließen Sie den VBA-Editor.
Nachdem Sie diesen Code implementiert und das InitializeHandler
Makro ausgeführt haben, wird jedes Mal, wenn eine Nachricht gesendet und dem “Gesendete Elemente” Ordner hinzugefügt wird, überprüft, ob die Nachricht sowohl an interne als auch an externe Adressen gerichtet ist. Wenn dies der Fall ist, wird eine Nachrichtenbox angezeigt.
Bitte beachten Sie, dass Sie Makros in Outlook aktivieren müssen, damit dieses Skript funktioniert. Dies kann Sicherheitsrisiken mit sich bringen, da Makros verwendet werden können, um schädlichen Code auszuführen. Stellen Sie sicher, dass Sie Makros nur von vertrauenswürdigen Quellen aktivieren.