OLE + Outlook + Address Global List

0

Potrzebuję wyciągnąć adres email z Address Global List w Outlooku. Oto kod (znaleziony gdzieś w sieci):

procedure TForm1.Button2Click(Sender: TObject);
var
OutlookApp, MapiNamespace, AddrList, AddressEntries: Variant;
AddrEntry: string;
begin
  //Get the Outlook Application object.
  OutlookApp := CreateOleObject('Outlook.Application');
  //Get the MAPI NameSpace object.
  MapiNamespace := OutlookApp.GetNameSpace('MAPI');
  AddrList := MapiNamespace.AddressLists('Global Address List');
  AddressEntries := AddrList.AddressEntries;
  try
    try
      Memo1.Lines.Clear;
      AddrEntry := AddressEntries.GetFirst;
      repeat
        Memo1.Lines.Add(AddrEntry);
        AddrEntry := AddressEntries.GetNext;
      until false;
      except
        // we must be at the end
      end;
  finally
    Memo1.Lines.Add(AddrEntry);
    OutlookApp := NULL;
  end;
end;

Linijka:

AddrList := MapiNamespace.AddressLists('Global Address List');

powoduje taki błąd:

Project Project1.exe raised exception class EOleException with message 'Próba wykonania operacji nie powiodła się. Nie można odnaleźć obiektu'.

Czy może tu mieć znaczenie język systemu?

Mój system to Windows 7, mam zainstalowany Outlook 2010 (razem z pakietem Office) i jest on włączony.

0
abrakadaber napisał(a):

http://www.rapware.nl/prod_easymapi_page1.asp?SubMenu=EasyMAPI

Trochę szkoda mi wydawać tyle kasy na taką pierdółkę. Zwłaszcza, że jedyne czego potrzebuję, to tylko pobrać adres email z listy.
Znalazłem parę przykładów w VB, ale jakoś ciężko mi idzie tłumaczenie tego na Delphi (bardzo kiepsko znam VB).

0

Okazało się, że błąd z pierwszego postu był spowodowany tym, że u mnie ten folder miał polską nazwę i go nie znajdowało pod nazwą angielską.
Ogólnie cały mój problem polega na tym, że po kliknięciu przycisku ma się otworzyć okno Outlooka (książka adresowa), gdzie wybieram dowolny kontakt i ma mi to zwrócić adres w formacie coś@coś.pl. Niestety niektóre z tych kontaktów są to kontakty Exchange, należące do Globalnej Listy Adresów i z pobraniem tych adresów mam problem.

0

Użyłem komponentu TOutlookApplication. Udało mi się wydobyć listę z Global Address List, ale pola Address zawierają stringi z nazwą kontaktu w Exchange, a normalnego adresu email brak. Wygląda to tak:

/o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Jan Kowalski

Mogę też wyciągnąć z nich EntryID, ale nie bardzo potrafię uzyskać adres email na jego podstawie... Czy ktoś może doradzić jak wydobyć adres znając EntryID?

procedure TForm1.Button5Click(Sender: TObject);
var ns: OutlookXP._NameSpace;
    ALists: OutlookXP.AddressLists;
    AList: OutlookXP.AddressList;
    AEntries: OutlookXP.AddressEntries;
    AEntry: OutlookXP.AddressEntry;
    i, j: integer;
begin
  ns:=OutlookApplication1.GetNamespace('MAPI');
  ALists:=ns.Session.AddressLists;

  Memo1.Clear;

  for i := 1 to ALists.Count do
    begin
      AList:=ALists.Item(i);

      Memo1.Lines.Add('>>'+AList.Name);  // wyświetlenie nazwy folderu

      AEntry:=AList.AddressEntries.GetFirst;

      for j:= 1 to AList.AddressEntries.Count-1 do
      begin
        AEntry:=AList.AddressEntries.Item(j);
        Memo1.Lines.Add('Adres:  '+AEntry.address); // adresy z poszczególnych elementów
        Memo1.Lines.Add('EntryID:  '+AEntry.ID); // EntryID poszczególnych elementów
      end;
    end;
end;

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