Outlook 2010 Marco Empfängermailadresse(n) auslesen - nicht Anzeigename
Hallo Admins,
ich versuche mittels Outlook-Makro die Empfängeradresse eingehender Mails zu ermitteln. Leider wird mir dort immer nur der Anzeigename dargestellt. Gibt es eine Möglichkeit die nackte Mailadresse zu ermitteln? Meine Versuche bisher waren leider erfolglos. Ich zähle auf euch.
Danke & Gruß
Joni
ich versuche mittels Outlook-Makro die Empfängeradresse eingehender Mails zu ermitteln. Leider wird mir dort immer nur der Anzeigename dargestellt. Gibt es eine Möglichkeit die nackte Mailadresse zu ermitteln? Meine Versuche bisher waren leider erfolglos. Ich zähle auf euch.
Danke & Gruß
Joni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 290908
Url: https://administrator.de/forum/outlook-2010-marco-empfaengermailadressen-auslesen-nicht-anzeigename-290908.html
Ausgedruckt am: 23.12.2024 um 11:12 Uhr
10 Kommentare
Neuester Kommentar
Hallo Joni,
In einem kompletten Kontext mit dem NewMailEx-Event welches auf alle neue Mails reagiert könnte das so aussehen:
Durchlaufe einfach die Recipients Collection des MailObjects und lass dir die Adressen anzeigen.
Grüße Uwe
In einem kompletten Kontext mit dem NewMailEx-Event welches auf alle neue Mails reagiert könnte das so aussehen:
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim m As MailItem, varEntryIDs as Variant, i as Integer, objItem as Object
varEntryIDs = Split(EntryIDCollection, ",")
For i = 0 To UBound(varEntryIDs)
Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
If objItem.Class = olMail Then
Set m = objItem
For Each rec In m.Recipients
MsgBox rec.Address
Next
End If
Next
End Sub
Grüße Uwe
Jaaaaa, das es hier um einen Exchange geht ging leider nicht aus deinem Post hervor. Bin leider gerade noch länger unterwegs. Poste dir morgen dann im Laufe des Tages die Lösung für den Exchange.
Grüße Uwe
P.s. so aus dem Kopf heraus solltest du die SMTP-Adresse via PropertyAccessor und der entsprechenden MAPI Eigenschaft abfragen können
Grüße Uwe
P.s. so aus dem Kopf heraus solltest du die SMTP-Adresse via PropertyAccessor und der entsprechenden MAPI Eigenschaft abfragen können
For each rec in m.Recipients
Msgbox rec.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E")
Next
Das Problem ist das wenn man z.B. über OWA oder einen Outlook-Client intern eine Mail verschickt löst Exchange den Alias automatisch zur Hauptadresse des Postfachs auf und schreibt diese Hauptadresse auch in den TO: Mailheader, dagegen kannst du nichts machen.
Wenn du die tatsächlichen Adressen aus dem TO: Mailheader brauchst hier eine Methode zum Extrahieren der Mailadressen aus dem Transportheader
Grüße Uwe
Wenn du die tatsächlichen Adressen aus dem TO: Mailheader brauchst hier eine Methode zum Extrahieren der Mailadressen aus dem Transportheader
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim m As MailItem, varEntryIDs As Variant, i As Integer, objItem As Object, regex As Object, headers As String
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True: regex.Global = True: regex.MultiLine = True
regex.Pattern = "^To:(.*)"
varEntryIDs = Split(EntryIDCollection, ",")
For i = 0 To UBound(varEntryIDs)
Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
If objItem.Class = olMail Then
Set m = objItem
headers = m.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
Set to_matches = regex.Execute(headers)
If to_matches.Count > 0 Then
regex.Pattern = "[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}"
Set to_mails = regex.Execute(to_matches(0).submatches(0))
If to_mails.Count > 0 Then
For Each mail In to_mails
MsgBox mail
Next
End If
End If
End If
Next
End Sub
Zitat von @joni2000de:
Dein
ist nicht optimal, da bei mehreren Mailadressen, sprich wenn im Header ein Zeilenumbruch vorhanden ist, nur die Adressen der 1. Zeile berücksichtigt werden.
Schön das du meinen Test bestanden hast Mach ich ab und zu ob die Leute sich mit dem Code auch beschäftigen, der Pattern müsste natürlich so lauten:Dein
regex.Pattern = "^To:(.*)"
^To:([\s\S]*)^Subject
Jetzt muss ich halt im Code prüfen, welche der Mailadressen die "meine" ist.
Kannst du ja schnell mit einem Dictionary-Object machen.Als denn...
Grüße Uwe