Automatische Anrede mit Name in Outlook beim Antworten auf Mails
Hallo zusammen,
ich bin auf der Suche nach einer Lösung für folgendes Problem. Ich nutze Office 365 und Outlook lokal auf dem PC. Da ich jeden Tag zig Mails beantworten muss, hätte ich gerne, dass wenn ich eine Mail beantworte die Anrede mit Name also z.B.: "Hallo Herr XYZ" automatisch eingefügt wird.
Der vollständige Name und E-Mail Adresse ist in den Kontakten vorhanden. Es muss doch irgendwie möglich sein das zu automatisieren?!
Vielleicht hat mir hier jemand einen Tipp?
MfG
ich bin auf der Suche nach einer Lösung für folgendes Problem. Ich nutze Office 365 und Outlook lokal auf dem PC. Da ich jeden Tag zig Mails beantworten muss, hätte ich gerne, dass wenn ich eine Mail beantworte die Anrede mit Name also z.B.: "Hallo Herr XYZ" automatisch eingefügt wird.
Der vollständige Name und E-Mail Adresse ist in den Kontakten vorhanden. Es muss doch irgendwie möglich sein das zu automatisieren?!
Vielleicht hat mir hier jemand einen Tipp?
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 441363
Url: https://administrator.de/contentid/441363
Ausgedruckt am: 21.11.2024 um 15:11 Uhr
18 Kommentare
Neuester Kommentar
Mit nem VBA Skript in Outlook normalerweise auch kein Hexenwerk.
Beim Reply Event der Mail in den Kontakten nach der Mail-Adresse suchen und die Anrede extrahieren, im Body einsetzen, fertig.
Beim Reply Event der Mail in den Kontakten nach der Mail-Adresse suchen und die Anrede extrahieren, im Body einsetzen, fertig.
Auf Anfrage kann ich dir sowas schreiben, für Lau ist das dann aber nicht.
Zitat von @Marco8383:
Bei meinem CRM geht das ohne Probleme... Nur nutze ich für Mails Outlook, da der Mail Client vom CRM nicht so toll ist...
Mit VBA Skripten habe ich mich noch nicht auseinander gesetzt... Gibt es hier vielleicht schon etwas fertiges?
OK, schau mal im Internet mit Hilfe Deiner favorisierten Suchmaschine. Ansonsten sind hier bestimmt Communityteilnehmer, welche dies gegen Bezahlerung erledigen. Eine Antwort diesbezüglich hast Du schon bekommen.Bei meinem CRM geht das ohne Probleme... Nur nutze ich für Mails Outlook, da der Mail Client vom CRM nicht so toll ist...
Mit VBA Skripten habe ich mich noch nicht auseinander gesetzt... Gibt es hier vielleicht schon etwas fertiges?
Gruss Penny.
Servus @Marco8383 ,
hab dir das mal schnell in VBA zusammengescriptet. Wurde hier unter Outlook 2019 getestet, sollte aber auch in älteren Versionen und Office 365 laufen. Der Code supported auch sogenannte InlineResponses bei denen ohne Extra Inspector auf Mails geantwortet wird.
Wenn man das Projekt signieren möchte macht man das im VBA Editor unter Extras >Digitale Signatur. Hat man das Projekt signiert kann man im TrustCenter umstellen auf die 2. Option von oben indem man nur signierten Code zulässt. Dazu muss dann einmalig beim Start von Outlook der Signatur vertraut werden.
Die Anpassung der Begrüßungen kann in der Funktion GetPersonalSalutationForMailSender der Klasse vorgenommen werden.
Viel Spaß damit, wie immer ohne Gewähr auf Leib und Leben.
Grüße Uwe
p.s. Persönliche Anpassungen gerne gegen Aufwandsentschädigung per PN
hab dir das mal schnell in VBA zusammengescriptet. Wurde hier unter Outlook 2019 getestet, sollte aber auch in älteren Versionen und Office 365 laufen. Der Code supported auch sogenannte InlineResponses bei denen ohne Extra Inspector auf Mails geantwortet wird.
1. Folgenden Code im VBA-Editor von Outlook im Abschnitt ThisOutlookSession bzw. DieseOutlookSitzung einfügen
' Exlorers object in current application
Dim WithEvents allExplorers As Explorers
' collection which will hold all explorers
Dim ExplorerCollection As New Collection
' when new explorer is created
Private Sub allExplorers_NewExplorer(ByVal Explorer As Explorer)
On Error Resume Next
AddExplorerEvents Explorer
End Sub
' on outlook startup
Private Sub Application_Startup()
On Error Resume Next
AddExplorerEvents ActiveExplorer
Set allExplorers = Application.Explorers
End Sub
Private Sub AddExplorerEvents(ByVal exp As Explorer)
' create event class
Dim c As New newExplorerClass
' and add Explorer Object to its public variable
Set c.actExplorer = exp
' add explorer to collection
ExplorerCollection.Add c
End Sub
2. Dann ein neues Klassenmodul über Einfügen > Klassenmodul erstellen. In der Eigenschaften-Pane der Klasse benennt man die Klasse um in newExplorerClass und stellt sicher das die Klasse unter "Instancing" auf Private gestellt ist.
3. In die neu erstellte Klasse fügt man nun folgenden Code ein:
' Explorer Object to work on
Public WithEvents actExplorer As Explorer
' current Message object working on
Dim WithEvents actMessage As MailItem
' Function to get personal salutation
Private Function GetPersonalSalutationForMailSender(ByVal mail As MailItem) As String
Dim strSalutation As String, strLastName As String, strCompanyName As String, strTitle As String, folderContacts As Folder
' search contact from sender address entry
' if the sender is an Exchange User...
If mail.Sender.AddressEntryUserType = olExchangeUserAddressEntry Then
Dim exUser As ExchangeUser
' get exange user obect
Set exUser = mail.Sender.GetExchangeUser
If Not exUser Is Nothing Then
' get properties
strLastName = exUser.LastName
strCompanyName = exUser.CompanyName
' Get title from LDAP "title" attribute (Deutsch: "Position" , sorry there is no real DisplayName Prefix attribute in AD)
strTitle = exUser.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3A17001E")
End If
Else ' other entry
Dim c As ContactItem
' try to get contact from local address book
Set c = mail.Sender.GetContact
' if entry found use properties
If Not c Is Nothing Then
strLastName = c.LastName
strCompanyName = c.CompanyName
strTitle = c.Title
End If
End If
' when Lastname ist not empty
If strLastName <> "" Then
' different salutations for different titles
Select Case strTitle
Case "Herr"
strSalutation = "Sehr geehrter Herr " & strLastName & ","
Case "Doktor"
strSalutation = "Sehr geehrter Doktor " & strLastName & ","
Case "Professor"
strSalutation = "Sehr geehrter Professor " & strLastName & ","
Case "Firma"
strSalutation = "Sehr geehrte Firma " & strCompanyName & ","
Case "Frau"
strSalutation = "Sehr geehrte Frau " & strLastName & ","
Case "Familie"
strSalutation = "Sehr geehrte Familie " & strLastName & ","
Case Else
strSalutation = "Sehr geehrte Damen und Herren,"
End Select
' if Lastname is empty check company
ElseIf strCompanyName <> "" Then
strSalutation = "Sehr geehrte Firma " & strCompanyName & ","
Else ' generic string
strSalutation = "Sehr geehrte Damen und Herren,"
End If
' append additional newline to salutation
strSalutation = strSalutation & vbNewLine
' set return of function
GetPersonalSalutationForMailSender = strSalutation
End Function
' Response is Inline-Response
Private Sub actExplorer_InlineResponse(ByVal Item As Object)
Dim strSalutation As String
' get personal salutation and set body of inline response
With Item
strSalutation = GetPersonalSalutationForMailSender(actMessage)
If .BodyFormat = olFormatHTML Then
.HTMLBody = RewriteHTMLBody(.HTMLBody, strSalutation)
Else
.body = strSalutation & vbNewLine & .body
End If
End With
End Sub
' keep track of current item
Private Sub actExplorer_SelectionChange()
If Not actExplorer Is Nothing Then
With actExplorer
If .Selection.Count > 0 Then
If .Selection(1).Class = olMail Then
Set actMessage = .Selection(1)
End If
End If
End With
End If
End Sub
' if item is replied to
Private Sub actMessage_Reply(ByVal Response As Object, Cancel As Boolean)
Dim res As MailItem, strSalutation As String, actInspector As Inspector
Set actInspector = ActiveInspector
' check if there is an active Inspector (if not it's an inline response)
If Not actInspector Is Nothing Then
' if the item in the activeinspector is not the message replied to it's an inlineresponse, so exit event
If actInspector.CurrentItem <> actMessage Then Exit Sub
' create response
Set res = actMessage.Reply
With res
' get personal salutation from Sender-Contact in address book
strSalutation = GetPersonalSalutationForMailSender(actMessage)
' determine body format and set body
If .BodyFormat = olFormatHTML Then
.HTMLBody = RewriteHTMLBody(.HTMLBody, strSalutation)
Else
.body = strSalutation & vbNewLine & .body
End If
' Cancel original response
Cancel = True
' show new response object
.Display
End With
End If
End Sub
' prepend HTML content to body
Function RewriteHTMLBody(body As String, prepend As String) As String
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True
regex.Pattern = "(<body[^>]*>)([\s\S]+)"
RewriteHTMLBody = regex.Replace(body, ("$1" & prepend & "<br/>$2"))
Set regex = Nothing
End Function
4. Nun im Trust-Center von Outlook sicherstellen das Makros ausgeführt werden dürfen (Datei>Optionen>TrustCenter>"Einstellungen für das Trustcenter"). Entweder alle, oder besser man signiert den Code im VBA Editor und lässt nur signierten Code zu.
Wenn man das Projekt signieren möchte macht man das im VBA Editor unter Extras >Digitale Signatur. Hat man das Projekt signiert kann man im TrustCenter umstellen auf die 2. Option von oben indem man nur signierten Code zulässt. Dazu muss dann einmalig beim Start von Outlook der Signatur vertraut werden.
5. Nun muss Outlook zwingend neu gestartet sonst kann der Code nicht laufen, da die Events erst nach einem Neustart von Outlook aktiv werden.
Die Anpassung der Begrüßungen kann in der Funktion GetPersonalSalutationForMailSender der Klasse vorgenommen werden.
Viel Spaß damit, wie immer ohne Gewähr auf Leib und Leben.
Grüße Uwe
p.s. Persönliche Anpassungen gerne gegen Aufwandsentschädigung per PN
Probier mal das hier:
Reply Assistant - Vorlagen, automatische Anrede, Serien-E-Mails und mehr für Outlook
Funktioniert ziemlich gut.
Gruß,
Jens
Reply Assistant - Vorlagen, automatische Anrede, Serien-E-Mails und mehr für Outlook
Funktioniert ziemlich gut.
Gruß,
Jens
Hallo erst mal, so viel Zeit sollte noch sein!
Gruß @colinardo
danke für den Aufwand. WO sind die Funktionen bei Outlook dann zum ändern. Finde keine. Danke für eine Antwort.
Wie meinen? Die Funktionsweise kann in der Funktion unter Punkt 3 ab Zeile 7 im Code nach belieben angepasst werden (GetPersonalSalutationForMailSender). Beschreibung mal vollständig lesen wäre sinnvoll .Gruß @colinardo
ich hatte es so verstanden, dass ich die einstellungen in outlook direkt verändere. in der VBA kann ich nicht erkennen wo der zusatz "sehr geehrte Damen und Herren" für Emails die keine antworten sind zu ändern ist. Weißt du was ich meine? also beim öffnen einer neuen email. Vllt kannst mir das helfen??
Zitat von @Seba12345:
ich hatte es so verstanden, dass ich die einstellungen in outlook direkt verändere.
Nein, geht nicht, deswegen existiert der Thread hier ja ich hatte es so verstanden, dass ich die einstellungen in outlook direkt verändere.
in der VBA kann ich nicht erkennen wo der zusatz "sehr geehrte Damen und Herren" für Emails die keine antworten sind zu ändern ist.
Der Code oben ist nur für "Antworten" gedacht, weil es nur dort bereits einen Kontakt gibt.Wenn man den obigen Code noch für "neue Mails" eine Begrüßung ergänzen möchte nimmt man stattdessen diesen Code für die Klasse unter Punkt 3.
In Zeile 153 kannst du dann deinen String anpassen der für neue Mails gilt.
.Body = "Sehr geehrte Damen und Herren," & vbNewLine & .Body
' Explorer Object to work on
Public WithEvents actExplorer As Explorer
' current Message object working on
Dim WithEvents actMessage As MailItem
' inspector inspection
Dim WithEvents myInspectors As Inspectors
' Function to get personal salutation
Private Function GetPersonalSalutationForMailSender(ByVal mail As MailItem) As String
Dim strSalutation As String, strLastName As String, strCompanyName As String, strTitle As String, folderContacts As Folder
' search contact from sender address entry
' if the sender is an Exchange User...
If mail.Sender.AddressEntryUserType = olExchangeUserAddressEntry Then
Dim exUser As ExchangeUser
' get exange user obect
Set exUser = mail.Sender.GetExchangeUser
If Not exUser Is Nothing Then
' get properties
strLastName = exUser.LastName
strCompanyName = exUser.CompanyName
' Get title from LDAP "title" attribute (Deutsch: "Position" , sorry there is no real DisplayName Prefix attribute in AD)
strTitle = exUser.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3A17001E")
End If
Else ' other entry
Dim c As ContactItem
' try to get contact from local address book
Set c = mail.Sender.GetContact
' if entry found use properties
If Not c Is Nothing Then
strLastName = c.LastName
strCompanyName = c.CompanyName
strTitle = c.Title
End If
End If
' when Lastname ist not empty
If strLastName <> "" Then
' different salutations for different titles
Select Case strTitle
Case "Herr"
strSalutation = "Sehr geehrter Herr " & strLastName & ","
Case "Doktor"
strSalutation = "Sehr geehrter Doktor " & strLastName & ","
Case "Professor"
strSalutation = "Sehr geehrter Professor " & strLastName & ","
Case "Firma"
strSalutation = "Sehr geehrte Firma " & strCompanyName & ","
Case "Frau"
strSalutation = "Sehr geehrte Frau " & strLastName & ","
Case "Familie"
strSalutation = "Sehr geehrte Familie " & strLastName & ","
Case Else
strSalutation = "Sehr geehrte Damen und Herren,"
End Select
' if Lastname is empty check company
ElseIf strCompanyName <> "" Then
strSalutation = "Sehr geehrte Firma " & strCompanyName & ","
Else ' generic string
strSalutation = "Sehr geehrte Damen und Herren,"
End If
' append additional newline to salutation
strSalutation = strSalutation & vbNewLine
' set return of function
GetPersonalSalutationForMailSender = strSalutation
End Function
Private Sub actExplorer_Activate()
With actExplorer
If .Selection.Count > 0 Then
If .Selection(1).Class = olMail Then
Set actMessage = .Selection(1)
End If
End If
End With
End Sub
' Response is Inline-Response
Private Sub actExplorer_InlineResponse(ByVal Item As Object)
Dim strSalutation As String
'get personal salutation and set body of inline response
With Item
strSalutation = GetPersonalSalutationForMailSender(actMessage)
If .BodyFormat = olFormatHTML Then
.HTMLBody = RewriteHTMLBody(.HTMLBody, strSalutation)
Else
.body = strSalutation & vbNewLine & .body
End If
End With
End Sub
' keep track of current item
Private Sub actExplorer_SelectionChange()
If Not actExplorer Is Nothing Then
With actExplorer
If .Selection.Count > 0 Then
If .Selection(1).Class = olMail Then
Set actMessage = .Selection(1)
End If
End If
End With
End If
End Sub
' if item is replied to
Private Sub actMessage_Reply(ByVal Response As Object, Cancel As Boolean)
Dim res As MailItem, strSalutation As String, actInspector As Inspector
Set actInspector = ActiveInspector
' check if there is an active Inspector (if not it's an inline response)
If actInspector Is Nothing Then Exit Sub
' if the item in the activeinspector is not the message replied to it's an inlineresponse, so exit event
If actInspector.CurrentItem <> actMessage Then Exit Sub
' Cancel original response
Cancel = True
' create response
Set res = actMessage.Reply
With res
'CreateObject("Scripting.FilesystemObject").OpenTextFile("C:\Users\Uwe\Desktop\htmlbody.txt", 2, True).Write .HTMLBody
' get personal salutation from Sender-Contact in address book
strSalutation = GetPersonalSalutationForMailSender(actMessage)
' determine body format and set body
If .BodyFormat = olFormatHTML Then
.HTMLBody = RewriteHTMLBody(.HTMLBody, strSalutation)
Else
.body = strSalutation & vbNewLine & .body
End If
' show new response object
.Display
End With
End Sub
' prepend HTML content to body
Function RewriteHTMLBody(body As String, prepend As String) As String
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True
regex.Pattern = "(<body[^>]*>)([\s\S]+)"
RewriteHTMLBody = regex.Replace(body, ("$1" & prepend & "<br/>$2"))
Set regex = Nothing
End Function
' class initializer
Private Sub Class_Initialize()
' set inspectors object
Set myInspectors = Application.Inspectors
End Sub
' event is run on creation of new inspectors
Private Sub myInspectors_NewInspector(ByVal Inspector As Inspector)
With Inspector.CurrentItem
' if it's a new item insert a default salutation in the body
If .EntryID = "" And .Subject = "" Then
.body = "Sehr geehrte Damen und Herren," & vbNewLine & .body
End If
End With
End Sub
Klappt einwandfrei, Outlook 2010-2019 hier getestet! Du machst also bei der Einrichtung einen Fehler oder befolgst die Anleitung nicht exakt, oder interpretierst die angebotene Funktion des Skriptes nicht richtig, beim TO und bei diversen anderen Usern denen ich das Skript per PN zusätzlich weiter angepasst habe läuft es ja auch, der Fehler muss also bei dir liegen. Prüfe erst mal ob das Startup Makro bei dir überhaupt anläuft (Breakpoints setzen um zu sehen ob sie bei dir überhaupt getriggert werden), wenn nicht brauchst du gar nicht weiter zu machen, dann sind Makros bei dir nicht richtig aktiviert worden. Ebenso sind die Positionen der Skripte entscheidend, diese dürfen nicht in irgendwelchen Modulen abgelegt sein! Also mach es richtig dann klappt es auch 100%. Dem Skript ist es egal ob IMAP oder Exchange or whatever, das spielt bei den Makros hier keine Rolle.
Mehr Support gibt's dazu von meiner Seite nur noch per PN!
Btw. schönen Rest von Himmelfahrt.
Uwe
p.s. freundlich Grüßen oder dich an der Community beteiligen darfst du hier gerne auch, nur mal so nebenbei bei kostenlosem Dauer-Support ...
Mehr Support gibt's dazu von meiner Seite nur noch per PN!
Btw. schönen Rest von Himmelfahrt.
Uwe
p.s. freundlich Grüßen oder dich an der Community beteiligen darfst du hier gerne auch, nur mal so nebenbei bei kostenlosem Dauer-Support ...
Hallo Uwe,
erstmal ganz herzlichen Dank für das tolle Skript! Ich glaube, das es eine tolle Hilfe sein könnte, nur leider bekomme ich es nicht zum laufen.
Gleiches Problem unter Outlook 2016 und Outlook 365:
Bei einer neuen Email erscheint "Sehr geehrte Damen und Herren,", dementsprechend scheint das Skript richtig geladen zu werden.
Wenn ich auf eine Email antworte, erscheint leider gar nichts. Wenn ich am Anfang jeder Prozedzur Haltepunkte setze, und dann auf eine Email antworte, durchläuft er
und dann
der gleichen Prozedur.
Dann wird noch
durchlaufen, aber ohne Anrede einzufügen - was richtig ist, da es keine neue Email ist.
Hat jemand ein ähnliches Problem - und eine Lösung?
Danke für Eure Hilfe... Hans
erstmal ganz herzlichen Dank für das tolle Skript! Ich glaube, das es eine tolle Hilfe sein könnte, nur leider bekomme ich es nicht zum laufen.
Gleiches Problem unter Outlook 2016 und Outlook 365:
Bei einer neuen Email erscheint "Sehr geehrte Damen und Herren,", dementsprechend scheint das Skript richtig geladen zu werden.
Wenn ich auf eine Email antworte, erscheint leider gar nichts. Wenn ich am Anfang jeder Prozedzur Haltepunkte setze, und dann auf eine Email antworte, durchläuft er
Private Sub actMessage_Reply(ByVal Response As Object, Cancel As Boolean)
On Error Resume Next
Dim res As MailItem, strSalutation As String, actInspector As Inspector
Set actInspector = ActiveInspector
' check if there is an active Inspector (if not it's an inline response)
If Not actInspector Is Nothing Then
End If
End Sub
Dann wird noch
Private Sub myInspectors_NewInspector(ByVal Inspector As Inspector)
Hat jemand ein ähnliches Problem - und eine Lösung?
Danke für Eure Hilfe... Hans
Servus Hans,
aus Interoperabilitätsgründen mit InLine-Response Antworten (mit aktiviertem Lesebereich) musst du die Mail erst in einem neuen Fenster öffnen und dann auf Antworten klicken. Wenn du also keinen Lesebereich nutzt Doppelklick auf die Nachricht und dann auf Antworten klicken, wenn dass nicht gewollt ist Vorschaufenster aktivieren und die Inline-Response nutzen. Der Reply-Eventablauf ist in Outlook leider nicht sehr einheitlich.
Grüße Uwe
aus Interoperabilitätsgründen mit InLine-Response Antworten (mit aktiviertem Lesebereich) musst du die Mail erst in einem neuen Fenster öffnen und dann auf Antworten klicken. Wenn du also keinen Lesebereich nutzt Doppelklick auf die Nachricht und dann auf Antworten klicken, wenn dass nicht gewollt ist Vorschaufenster aktivieren und die Inline-Response nutzen. Der Reply-Eventablauf ist in Outlook leider nicht sehr einheitlich.
Grüße Uwe
Hallo Uwe,
nach langem Ausprobieren habe ich es zum Laufen bekommen. Es funktioniert gut, nur leider ist im Exchange Adressbuch keine "Position" hinterlegt. D.h. es kommt immer zu "Sehr geehrte Damen und Herren".
Da ich das Exchange Adressbuch nicht ändern kann, habe ich die Kontake in ein lokales Adressbuch gespeichtert. Und wollte dann ein Feld mit der persönlichen Anrede belegen und diese auslesen.
Um die "Position" des Absenders auf dem lokalen Adressbuch zu suchen, ist doch der folgende Code gedacht:
Leider bleibt "c" immer auf "Nothing" wenn ich mit Haltepunkt die Prozedur durchlaufe und mit der Maus auf "c" zeige.
Danke für Deine / Eure Hilfe!
Hans
nach langem Ausprobieren habe ich es zum Laufen bekommen. Es funktioniert gut, nur leider ist im Exchange Adressbuch keine "Position" hinterlegt. D.h. es kommt immer zu "Sehr geehrte Damen und Herren".
Da ich das Exchange Adressbuch nicht ändern kann, habe ich die Kontake in ein lokales Adressbuch gespeichtert. Und wollte dann ein Feld mit der persönlichen Anrede belegen und diese auslesen.
Um die "Position" des Absenders auf dem lokalen Adressbuch zu suchen, ist doch der folgende Code gedacht:
Dim c As ContactItem
' try to get contact from local address book
Set c = mail.Sender.GetContact
' if entry found use properties
If Not c Is Nothing Then
strLastName = c.LastName
strCompanyName = c.CompanyName
strTitle = c.Title
End If
Danke für Deine / Eure Hilfe!
Hans