Wyciąganie adresu nadawcy przez VBA

Pytania, problemy, uwagi związane ze starszymi wersjami Microsoft Outlook 2003, 2002 (XP), 2000, 98

Moderator: Moderatorzy

Wyciąganie adresu nadawcy przez VBA

Postprzez negatyv » Śr 29.05.2019 11:16

Witam,
Podobno poruszany temat, ale znalazłem tylko to:

Jak wyciągnąć adres nadawcy w formie "janek@example.com"?

W przypadku mejli z poza domeny nie mam problemu, ale zależy mi na mejlach z domeny.

Atrybut SenderEmailAddress klasy MailItem wyciąga mi nazwę domenową w stylu:

/O=ASDF/OU=FASD/ itd.

Dzięki i pozdrawiam,
MS
Autor 123Office.pl, blog poświęcony programom pakietu MS Office.
Moderator ExcelForum.pl.
negatyv
 
Posty: 25
Dołączył(a): Cz 16.02.2012 12:36

Re: Wyciąganie adresu nadawcy przez VBA

Postprzez OShon » Śr 29.05.2019 12:09

Witam kolegę. Kopę lat.
No to jest to jeden z problemów który można prosto rozwiązać podłączając się do GAL.
Fakt że taki dziwny adres jest tylko wew sieci, bo potem leci już w SMTP normalny to można to zrobić tak:

Kod: Zaznacz cały
        Dim gal As Outlook.AddressList
        Dim exchAddressEntries As Outlook.AddressEntries
        Dim exchAddressEntry As Outlook.AddressEntry
       
        Set gal = Application.Session.GetGlobalAddressList
        Set exchAddressEntries = gal.AddressEntries

No i w kolekcji exchAddressEntries wyszukać poleceniem .find po nazwie adresata .Name jego adres SMTP .address
albo bezpośrednio odczytać .AddressEntries.Item() jak to w kolekcji.
Pętlą nie polecam bo czasami to kilka tyś adresatów w AD
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re: Wyciąganie adresu nadawcy przez VBA

Postprzez negatyv » Śr 29.05.2019 12:34

Dzięki Oskar
W moim przypadku w tej kolekcji jest prawie 700K adresów.

Ostatecznie poradziłem sobie takim kodem:

Kod: Zaznacz cały
        If olItem.SenderEmailType = "EX" Then
            txt = olItem.Sender.GetExchangeUser.PrimarySmtpAddress
        ElseIf olItem.SenderEmailType = "SMTP" Then
            txt = olItem.SenderEmailAddress
        End If


Znajomość VBA to najlepsza supermoc tych czasów.
Autor 123Office.pl, blog poświęcony programom pakietu MS Office.
Moderator ExcelForum.pl.
negatyv
 
Posty: 25
Dołączył(a): Cz 16.02.2012 12:36

Re: Wyciąganie adresu nadawcy przez VBA

Postprzez OShon » Śr 29.05.2019 13:10

oo widzisz :)
Dziwna ta konstrukcja ale cóż. Czasami trzeba się przemóc że uzyskanie listy z kolekcji jest po prostu mało możliwe.

Kiedyś robiłem taki skrypt w .NET do sprawdzenia po LDAPie czy ktoś podał adres z korpo czy z poza (gdzie nie powinien otrzymać danych przygotowanych przez serwer).
Ale jak będziesz chciał to sprawdź możliwości polecania .FindOne działające bardzo szybko no ale to już inne środowisko.
Trzeba oprzeć sie na System.DirectoryServices i tam jest polecenie .SearchResult
Jak będziesz kiedyś zainteresowany to ci podam taki kod.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10800
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl


Powrót do Microsoft Outlook

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 8 gości