Centrum Skrypciarzy - Microsoft Office

Jak dokonać selekcji wiadomości programu Outlook pod względem adresu e-mail?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

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 dokonać selekcji wiadomości programu Outlook pod względem adresu e-mail?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Wasz artykuł o filtrowaniu wiadomości e-mail (j.ang.) w programie Microsoft Outlook to prawie to, czego mi potrzeba, ale nie do końca: jak dokonać selekcji wiadomości z programu Outlook pod względem adresu e-mail nadawcy?

-- SJS

Cześć Skrypciarze! Odpowiedź

Cześć, SJS. Mamy nadzieję, że to nie Ciebie spotkał piszący te słowa Skrypciarz podczas cotygodniowej wizyty na siłowni. Tak, przeczuwaliśmy, ze to nie Ty, ale należało się upewnić. Otóż Skrypciarz, który zawsze chodzi na siłownię ze swoim synem, z chwilą przestąpienia progu siłowni zauważył, że jakiś facet przygląda mu się uważnie groźnym wzrokiem mówiącym: „Jeden z nas nie wyjdzie stąd żywy”. Na początku postanowił nie zwracać na niego uwagi, przekonany, że tamten się pomylił. Jednak gdy jego syn zapytał, czy będzie się bił z tamtym kolesiem, piszący te słowa Skrypciarz zdał sobie sprawę, że to nie przelewki.

Bardzo dziwne. Nie chodzi o to, że nasz Skrypciarz nie jest przyzwyczajony do przyglądających mu się dziwnym wzrokiem ludzi, jednak zdarza się to zazwyczaj w pracy. Na siłowni przeważnie słychać chichot, kiedy przechodzi, a następnie wybuch śmiechu, gdy próbuje podnieść sztangę.

W każdym razie, piszący te słowa Skrypciarz spędził cały weekend zastanawiając się, dlaczego całkiem obcy facet przyglądał mu się tak intensywnie na siłowni. Ale nie znalazł odpowiedzi na to pytanie. Potem jednak pomyślał, że może ten facet chciał wiedzieć jak, na przykład, dokonać selekcji wiadomości e-mail pod względem adresu. Może napisał do Skrypciarzy i nie dostał żadnej odpowiedzi.

Zapobiegawczo zatem przepraszamy za zwłokę i obiecujemy na przyszłość szybsze reagowanie na zapytania.

A oto jak można dokonać selekcji wiadomości programu Outlook pod względem adresu e-mail nadawcy:

Const olFolderInbox = 6



Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")

Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)



Set colItems = objFolder.Items

Set colFilteredItems = colItems.Restrict("[SenderEmailAddress] = 'kenmyer@fabrikam.com'")



For Each objMessage In colFilteredItems

    Wscript.Echo objMessage.Subject

Next

Ale po co od razu taki wściekły wzrok? Zaraz wytłumaczymy, jak to działa. Naprawdę. Zaczynamy od określenia stałej o nazwie olFolderInbox i nadajemy jej wartość 6; to mówi skryptowi, z którym folderem programu Outlook (w tym wypadku z folderem Skrzynka odbiorcza) mamy zamiar pracować. Następnie tworzymy wystąpienie obiektu Outlook.Application i łączymy się z przestrzenią nazw MAPI. Następnie stosujemy poniższy wiersz kodu w celu wywołania metody GetDefaultFolder i połączenia się z folderem Skrzynka odbiorcza:

Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

A teraz do rzeczy: Najpierw używamy następującego wiersza kodu w celu pobrania kolekcji wszystkich elementów (czyli wiadomości e-mail) znajdujących się w folderze Skrzynka odbiorcza:

Set colItems = objFolder.Items

Macie rację, nie chcemy przecież wszystkich elementów ze Skrzynki odbiorczej. Zamiast tego, chcemy pobrać tylko te wiadomości, które zostały wysłane przez kenmyer@fabrikam.com. Do tego potrzebny nam jest ten wiersz kodu:

Set colFilteredItems = colItems.Restrict("[SenderEmailAddress] = 'kenmyer@fabrikam.com'")

Pobieramy teraz podzbiór elementów znajdujących się w Skrzynce odbiorczej. W tym celu wywołujemy metodę Restrict i przekazujemy jej dwa parametry:

  • [SenderEmailAddress], właściwość, pod względem której dokonamy selekcji. Zauważmy, że nazwa właściwości musi znajdować się w nawiasach kwadratowych.
  • kenmyer@fabrikam.com, kryterium zastosowane dla filtra. W tym wypadku, chcemy otrzymać tylko wiadomości e-mail, w przypadku których właściwość SenderEmailAddress ma wartość kenmyer@fabrikam.com.

Dobre pytanie: czy możemy zastosować dla filtra kilka kryteriów naraz? Oczywiście, że tak. Oto na przykład filtr, który wybiera informacje wysłane przez kenmyer@fabrikam.com lub by packerman@contoso.com:

Set colFilteredItems = colItems.Restrict _

    ("[SenderEmailAddress] = 'kenmyer@fabrikam.com' OR [SenderEmailAddress] = _

'packerman@contoso.com'")

Jedną rzecz musimy mieć na uwadze: mianowicie, ponieważ mamy do czynienia z adresami e–mail, zabezpieczenia programu Outlook mogą nam przeszkadzać, kiedy uruchomimy skrypt. Oznacza to, że wyskoczy okno dialogowe z informacją, iż ktoś próbuje uzyskać dostęp do adresów e-mail; będziemy musieli wyrazić zgodę na dostęp skryptu do danych. Więcej informacji na ten temat można znaleźć w artykule (j.ang.) dotyczącym filtrowania wiadomości e-mail.

Po zastosowaniu filtra, uruchamiamy pętlę For Each, która przejdzie przez wszystkie elementy w przefiltrowanej kolekcji. W naszym przykładowym skrypcie wywołujemy echo wartości właściwości Subject; jednakże można także wywołać echo jakiejkolwiek (lub wszystkich) właściwości obiektu MailItem (j. ang.).

To by było na tyle. Wszyscy powinni być zadowoleni. Mamy nadzieję.

 Do początku strony Do początku strony

Centrum Skrypciarzy - Microsoft Office