Programowanie w języku Delphi » Gotowce

Jak pobrać dane z kontaktów w MS Outlook

Na samym początku tego "Gotowca" chciałbym zwrócić uwagę, że poniższy tekst jest kierowany do początkujących.

Niejednokronie pisząc jakąś aplikację typu książka adresowa czy bardzo podobny program chcieliśmy importować kontakty, a konkretnie dane osobowe tych kontaktów z Microsoft Outlook do naszej aplikacji. Każdy kontakt w Microsoft Outlook posiada pola typu: Imię i Nazwisko, Miasto, Kraj, Kod pocztowy, Telefon (domowy/praca) oraz wiele, wiele innych potrzebnych i niepotrzebnych(moim zdaniem) pól.
Postaram się  pokazać jak "wyciągnąć" najpotrzebniejsze dane: Imię i Nazwisko, mail oraz numer telefonu kontaktów z MS Outlook. Każdy wedle woli może "wyciągnąć" dane jakie są mu potrzebne w jego programie, np. książce adresowej itp.
Zaczynamy..

Otwieramy Delphi. Na formę kładziemy:
3x Label
3x ListBox
1x Button

Teraz opiszę ich właściwości, byś ustawił je tak jak ja w swoim programie.

Właściwości każdego ListBoxa ustaw tak jak poniżej:
Width   = 120
Height  = 160


Rozmieść je na formie tak, by do siebie przylegały. Można oczywiście zastąpić 3 ListBoxy jednym ListView z kolumnami itp., ale ja w moim programie użyłem ListBoxów i na ich przykładzie cały ten art. opiszę.

Następnie umieść nad każdym z ListBoxów Label:
Caption pierwszego ustaw na: Imię i nazwisko
Caption drugiego ustaw na: e-mail
Caption trzeciego ustaw na: Telefon kontaktowy


Ustawienia komponnetów na formie mamy za sobą. Ktoś może powiedzieć, że nie potrzebnie to piszę, ale chcę w całości oddać wygląd mojego programu. Poza tym wszystko będzie estetycznie wyglądało.
Nasz program:

1.jpg 



I tak o to możemy przejść do najważniejszej części tego artykułu czyli samej idei "wyciągania" danych z kontaktów MS Outlook.

Na samym początku do sekcji USES dodajemy: ComObj.
Musimy zdefiniować jedną stałą, którą będzię folder kontaktów wewnątrz MS Outlook.  W tym celu po sekcji USES piszemy:
const
folder_kontaktow = $0000000A;



W sekcji var dodajemy:
Outlook, NameSpace, Kontakty, Kontakt : OleVariant;   
i : Integer;



Ok. Zmienne mamy zadeklarowane. Teraz klikamy dwa razy na Buttona. Delphi wygenorowł automatycznie zdarzenie <b>onClick</b>. Musimy teraz utworzyć połączenie (link) między naszą aplikacją a MS Outlookiem. W tym cely piszemy:
Outlook := CreateOleObject('Outlook.Application'); //Utworzenie linku(polaczenia) miedzy nasza app, a MS Outlook
NameSpace := Outlook.GetNameSpace('MAPI'); 



Nastepnie definiujemy kontakty:
Kontakty := NameSpace.GetDefaultFolder(folder_kontaktow); 

Teraz tylko pozostało nam wykonać pętlę, która będzie się wykonywać tyle razy ile znajduje się kontaktów w MS Outlook i umieści je w ListBox`ach.
for i := 1 to Kontakty.Items.Count  do
begin
Kontakt := Kontakty.Items.Item(i);
ListBox1.Items.Add(Kontakt.FullName); //Imie i Nazwisko
ListBox2.Items.Add(Kontakt.Email1Address); //Adres e-mail
ListBox3.Items.Add(Kontakt.BusinessTelephoneNumber); //Numer telefonu
end;
Outlook := UnAssigned; //Zwolnienie zmiennej Outlook



No i to wszystko. Skompiluj teraz program i sprawdź czy działa poprawnie. Jeżeli nie to przeanalizuj swój kod i sprawdź czy nie popełniłeś gdzieś błedu/ów.

Chciałem jeszcze powiedzieć, że sam proces "wyciągania" tak to nazwijmy może trwać małą chwilkę.
Dlaczego? Ponieważ, by utworzyć połączenie między jedną a drugą aplikacją obie muszą być uruchomione. Najprościej rzecz ujmując Delphi uruchamia MS Outlook tworzy z nim link i w tym momencie następuje wymiana danych miedzy aplikacjami.

Każdy kontakt w Microsoft Outlook posiada również inne pola niż te, które zastosowałem w swoim przykładzie. Do takich pól należą m.in. data urodzin, nazwa firmy, miasto, kraj i wiele, wiele innych. Poniżej umieszczam listę nazw tych pól.


Birthday
Business2TelephoneNumber
BusinessAddress
BusinessAddressCity
BusinessAddressCountry
BusinessAddressPostalCode
BusinessAddressPostOfficeBox
BusinessAddressState
BusinessAddressStreet
BusinessFaxNumber
BusinessHomePage
BusinessTelephoneNumber
CompanyAndFullName
CompanyMainTelephoneNumber
CompanyName
ComputerNetworkName
Department
Email1Address
Email1AddressType
Email1DisplayName
Email2Address
Email2AddressType
Email2DisplayName
Email3Address
Email3AddressType
Email3DisplayName
FirstName
FTPSite
FullName
FullNameAndCompany
GovernmentIDNumber
Hobby
Home2TelephoneNumber
HomeAddress
HomeAddressCity
HomeAddressCountry
HomeAddressPostalCode
HomeAddressPostOfficeBox
HomeAddressState
HomeAddressStree
HomeFaxNumber
HomeTelephoneNumber
Initials
ISDNNumber
JobTitle
Language
LastName
LastNameAndFirstName
MailingAddress
MailingAddressCity
MailingAddressCountry
MailingAddressPostalCode
MailingAddressPostOfficeBox
MailingAddressState
MailingAddressStreet
MiddleName
NickName
OfficeLocation
OrganizationalIDNumber
PersonalHomePage
PrimaryTelephoneNumber
Profession
Suffix
Title
WebPage







12 komentarzy

jakubkrol 2005-06-10 19:00

I TAK NIE DZIAŁA :P

typson 2003-11-13 12:14

Wlasnie przetestowalem to z outlookiem 97 uzywajacym serwera Exchange - dziala bez zarzutu!

Grzegorz 2003-10-30 21:28

Przepisałem kropka w kropkę i po uruchomieniu programu wypisuje mi taki oto komunikat błędu "Nieprawidłowy ciąg klasy". Dodam, że mam Windows-a XP i Delphi7, jeżeli to w czymś pomoże.

DevNull 2003-09-14 15:48

Pomimo iż ten gotowiec opublikowałem dość dawno, wkradł się jeden błąd. Ostateczna wersja tego gotowca jest bez błędów i działa poprawnie.
Chciałem tylko dodać, ze MS Outlook musi być skonfigurowany.

aZgon 2003-05-25 17:27

Nie ma sprawy, a czy to dziala tylko na MS outlook czy na outlook expres też bo nie wiem czy znowu ja coś robie czy to nie zadziala przy outlook expres, poza tym nie wiem czy to mozliwe ale jezeli dobrze zrozumialem to do pobrania tych kontaktow trzeba odpalic tego outlooka, wiec mozna go programmem odpalac ale z parametrem hide ??

DevNull 2003-05-24 11:44

azgon: Dziękuję za informację. Masz rację, że nie działa ze względu na to iż do sekcji USES należy dodać: ComObj. Ja natomiast pominąłem to w swoim gotowcu. Jeszcze raz dzięki, że zauważyłeś ten błąd.

aZgon 2003-05-24 09:00

No całkiem fajna sprawa ale u mnie jakoś nie za bardzo działa ... Napisałem tak jak mówileś i przy kompilacji zaznacza "CreateOleObject" i pisze ze jest niezdeklarowane ...
Może byś wżucił dosłownego gotowca ???

DevNull 2003-05-23 16:23

Materiał, który tutaj przedstawiłem służy wyłącznie celom edukacyjnym. Proszę tego nie traktować jako "lekcyjkę" dla osób piszących wirusiki albo aplikacje SPY.

Setesh 2003-05-23 15:29

Fajne - nic tylko zrobic vira ktory pobiera kontakty z ms outlocka i przeslac sie na inne e-maile ;-) - uwaznie lepiej tego uzywajcie i z rozsadkiem ;-) he he he he

Drajwer 2003-05-23 13:27

hehehehe a nie lepiej listview ?????

DevNull 2003-05-23 14:51

Drajwer: oczywiście, że można skorzystać z ListView, ale jak zwróciłeś uwagę to napisałem, że mój przykład przedstawię stosując ListBox`y
Dzięki za ocenę...