Jak utworzyć listę wszystkich osób znajdujących się na liście dystrybucyjnej programu Microsoft Outlook?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
Jak utworzyć listę wszystkich osób znajdujących się na liście dystrybucyjnej programu Microsoft Outlook?
Cześć, Skrypciarze! Jak utworzyć listę wszystkich osób znajdujących się na liście dystrybucyjnej programu Microsoft Outlook?
-- KH
Cześć, KH. Wiesz, to bardzo interesujące pytanie. Okazuje się, że w niektórych sytuacjach odpowiadanie na pytania wcale nie jest takie proste. Dotyczy to zwłaszcza sytuacji, kiedy ktoś usilnie stara się odwrócić naszą uwagę i po prostu nam dokucza. Skrypciarz piszący te słowa od rana jest obiektem takich zaczepek, a wszystko to dlatego, że chciał być miły i powiedział o trzy słowa za dużo. Słowa, dodajmy, skierowane do Redaktorki. Ale co tam. Zaciskając zęby stara się to wszystko cierpliwie znosić, jakoś odpokutować w końcu musi. Same przeprosiny nie wystarczą jak się okazuje. Ratunku!!! Ktoś przecież musi odpowiedzieć na to pytanie. Uff…. Chwila spokoju. Do dzieła.
Zaraz, na czym skończyliśmy. A tak, lista dystrybucyjna; spróbujmy poniższego wiersza kodu:
Const olFolderContacts = 10
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderContacts)
Set objList = objFolder.Items("Approved Vendors")
For i = 1 to objList.MemberCount
Set objMember = objList.GetMember(i)
Wscript.Echo objMember.Name & ", " & objMember.Address
Next
Jak widać, tworzenie listy członków listy dystrybucyjnej programu Outlook jest w zasadzie całkiem proste. Zaczynamy od określenia stałej o nazwie olFolderContacts i nadania jej wartości 10; dzięki temu skrypt będzie szukał listy dystrybucyjnej w folderze Contacts (w którym lista dystrybucyjna umieszczona jest domyślnie). Następnie stosujemy poniższe trzy wiersze kodu w celu utworzenia wystąpienia obiektu Outlook.Application i połączenia się z przestrzenią nazw MAPI oraz folderem Contacts :
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderContacts)
Teraz możemy zacząć działać. Załóżmy, że chcemy utworzyć listę członków listy dystrybucyjnej Approved Vendors. Aby to zrobić, najpierw stosujemy poniższy wiersz kodu w celu połączenia się z listą Approved Vendors:
Set objList = objFolder.Items("Approved Vendors")
Nie dzieje się tutaj jeszcze nic szczególnego, po prostu tworzymy odwołanie do danej listy dystrybucyjnej. Gdybyśmy chcieli połączyć się z inną listą dystrybucyjną, podczas tworzenia identyfikatora obiektu podalibyśmy nazwę tej właśnie listy:
Set objList = objFolder.Items("Northwest Region Team")
Po utworzeniu połączenia możemy już zrobić listę wszystkich członków. W tym celu uruchamiamy pętlę For Next, która działa od numeru 1 do numeru oznaczającego liczbę członków umieszczonych na liście. A skąd mamy wiedzieć, ile osób jest na tej liście? To bardzo proste, nie musimy tego wiedzieć; powie nam to właściwość MemberCount programu Outlook:
For i = 1 to objList.MemberCount
Wewnątrz tej pętli używamy metody GetMember w celu uzyskania informacji o poszczególnych członkach listy, pojedynczo i z oznaczeniem każdego członka wskaźnikiem (zmienna licznika „i”):
Set objMember = objList.GetMember(i)
Za każdym razem, gdy zastosujemy metodę Getmember, otrzymamy obiekt AddressEntry. To z kolei umożliwi nam wywołanie echa wartości właściwości Name oraz Address:
Wscript.Echo objMember.Name & ", " & objMember.Address
W efekcie otrzymamy coś, co wygląda następująco:
Ken Myer, kenmyer@fabrikam.com
Pilar Ackerman, pilarackerman@contoso.com
Jonathan Haas jhaas@wingtiptoys.com
Za każdym razem, gdy będziemy próbować uzyskać informacje o członkach listy dystrybucyjnej, pojawi się okno dialogowe z zapytaniem, czy naprawdę chcemy zezwolić na dostęp do tych informacji. Jeżeli odpowiemy „Tak”, skrypt uzyska i wyświetli żądane dane. Jeżeli natomiast odpowiemy „Nie” lub całkowicie zignorujemy okno dialogowe, żadne informacje nie zostaną pobrane ani wyświetlone. Jaki z tego wniosek? Nie można tak po prostu uruchomić skryptu i pozwolić mu działać, należy odpowiedzieć na zapytanie okna dialogowego. Następnie będzie można już pozwolić skryptowi działać samodzielnie, chociaż prawdopodobnie jego praca zajmie tylko kilka sekund. (Oczywiście w zależności od liczby osób znajdujących się na liście dystrybucyjnej.)
Z tego powodu możemy zechcieć zrobić listę osób umieszczonych się na wszystkich listach dystrybucyjnych za jednym zamachem. Żaden problem. Zakładając, że wszystkie listy dystrybucyjne znajdują się w folderze Contacts, poniższy kod powinien to załatwić:
Const olFolderContacts = 10
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderContacts)
Set objItems = objFolder.Items
For i = 1 to objItems.Count
If TypeName(objItems.Item(i)) = "DistListItem" Then
Set objList = objItems.Item(i)
Wscript.Echo objList.DLName
For j = 1 to objList.MemberCount
Set objMember = objList.GetMember(j)
Wscript.Echo objMember.Name & ", " & objMember.Address
Next
Wscript.Echo
End If
Next
Na sam koniec, Skrypciarz piszący te słowa chciałby zapewnić, że w przyszłości będzie bardziej uważał na swoje słowa. I już nigdy nie będzie się starał być miły.
Oczywiście to żart. Skrypciarz ten ZAWSZE jest miły. Czasami tylko trochę przesadza.
Do początku strony |