Książka adresowa

0

Mam pytanie czy istnieje możliwośc z poziomu Delphi (lub innego języka\środowiska :p) wydobyc adresy e-mali z książki adresowaej windows. Jest mi to potrzebne do mojego klienta pocztowego, żeby nie trzeba było przepisywac wszystkich kontaktów z outlook'a.

0
t4iglo napisał(a)

Mam pytanie czy istnieje możliwośc z poziomu Delphi (lub innego języka\środowiska :p) wydobyc adresy e-mali z książki adresowaej windows. Jest mi to potrzebne do mojego klienta pocztowego, żeby nie trzeba było przepisywac wszystkich kontaktów z outlook'a.

Owszem :) Kiedyś też się nad tym męczyłem.
Gdzieś na stronie jedi jest biblioteka, która to robi, ale nie doszedłem do tego, jak to obsłużyć(pomimo dema!)

Są również komponenty to robiące, ale nie znalazłem żadnego darmowego.

Możnaby też przestudiować Api ze strony Microsoftu, ale to też niewiele mi dało.

Znalazłem jednak inne rozwiązanie. Chodzi o to, żeby importować plik csv. A więc klient musi wyeksportować książkę adresową do pliku csv, a Twój program importuje plik csv, co jest już można powiedzieć, że czystą formalnością.

0

Odczytuje spis adresów w książce Outlook (pliki WAB i WA~). :)

Ścieżki do plików:
9x - C:\WINDOWS\Dane aplikacji\Microsoft\Address Book
XP - C:\Documents and Settings\UŻYTKOWNIK\Dane aplikacji\Microsoft\Address Book\

Na Formę wrzuć sobie: Button1, Memo1 i Edit1

procedure TForm1.Button1Click(Sender: TObject);
var
 Plik: File of Byte;
 Buf: Array [1..300000] of Byte;
 Readed: Integer;
 Poz: Integer;
 MailStart,MailEnd: Integer;
 MailAdr: String;
 FindM: Integer;
 i : Integer;
 User : String;
 Duplicate: Boolean;
begin
  Memo1.Clear;
  AssignFile(Plik, Edit1.Text);
   Try
     Reset(Plik);
   Except
     On EInOutError do ;
   end;

  BlockRead(Plik, Buf,SizeOf(Buf), Readed);
  Poz:=0;
  
  While Poz <= Readed do
    Begin
      If(Buf[Poz]=Ord('@'))And(Buf[Poz-2]>=48)And(Buf[Poz-2]<=122) then
        Begin
        MailStart := 0;
        MailEnd := 0;
        FindM := 0;
      Repeat
       If(Buf[Poz-FindM]=0) then MailStart := Poz-FindM+2;
         FindM := FindM+2;
         Until MailStart > 0;
         FindM := 0;
      Repeat
        If(Buf[Poz+FindM]=0) then MailEnd := Poz+FindM-2;
          FindM := FindM+2;
          Until MailEnd > 0;
          MailAdr := '';
     
     For i := MailStart to MailEnd do
     If(Buf[i]<>0) then MailAdr := MailAdr + Chr(Buf[i]);

        Duplicate := False;

    For i := 0 to Memo1.Lines.Count-1 do
     If(Memo1.Lines[i] = MailAdr) then Duplicate := True;

     If(Duplicate=False) then Memo1.Lines.Add(MailAdr);

   end;
    Inc(Poz);
 end;
end;
0

Rozumiem że w xp bedzie mozliwe odczytanie tylko kontaktów użytkownika aktualnie zalogowanego (bo do pozostałych folderów user'ów nema dostępu :p)?

0

t4iglo: Jeśli nie masz praw admina, to jak byś chciał odczytać kontakty kogoś innego niż swoje? :D

0

Spoko rozumiem, ale z xp słabo obyty jestem :p Dzięki wszystkim za pomoc

0

Podbijam temat bo mam jeszcze jedno pytanie.

Jak odczytać adres mailowy kórego UŻYWA ta osoba ???? :)

0

Tak na marginesie chodzi chyba tu tylko o Otlook Express, bo z "duzym" Outlookiem to bedzie grubsza sprawa. Pliki *.PST sa raczej bardziej zamotane, niestety.

1 użytkowników online, w tym zalogowanych: 0, gości: 1