Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 85. - Microsoft Outlook

Jan Šindelář - 9.4.2003

Microsoft Outlook

Aby hned na začátku nedošlo k omylu, budeme se zabývat programem MS Outlook a ne Outlook Express! To jen tak pro upřesnění, i když věřím, že to byla zbytečná poznámka a všichni znají rozdíl mezi "velkým" a "malým" Outlookem.

A o jaké že spolupráci bude řeč? Naučíme se získat z Outlooku databázi kontaktů. To je jistě velmi užitečné a využitelné (nejen) v řadě kancelářských aplikací. Není pak nutné mít pro každou aplikaci zvláštní seznam přátel či obchodních kontaktů a může se čerpat jen z jednoho zdroje. A tím bude v našem případě právě Outlook, který je zřejmě v kancelářích či firmách jeden z nejpoužívanějších.

Nejjednodušší bude opět využít technologie OLE, která nám umožní poměrně snadno veškeré informace o kontaktech načíst. Tentokrát si není třeba (jako v jednom z předchozích příkladů s Excelem) lámat hlavu tím, jestli uživatel má nebo nemá Outlook nainstalován. Buď jej má a pak není problém a nebo jej nemá a získávání kontaktů je pak bezpředmětné.

K celému příkladu bude opět potřeba knihovna ComObj a když zdrojový kód porovnáte s tím, který jsme před časem použili na Excel, najdete velmi podobné konstrukce.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComObj, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  olFolderContacts = $0000000A;
var
  outlook, NameSpace, Contacts, Contact: OleVariant;
  i: Integer;
begin
  outlook := CreateOleObject(`Outlook.Application`);
  try
  NameSpace := outlook.GetNameSpace(`MAPI`);
  Contacts := NameSpace.GetDefaultFolder(olFolderContacts);
  for i := 1 to Contacts.Items.Count do
  begin
    try
    Contact := Contacts.Items.Item(i);
    Memo1.Lines.Add(Contact.FullName + ` <` + Contact.Email1Address + `>`);
    except
    end;
  end;
  finally
  Outlook := UnAssigned;
  end;
end;

end.

Po stisknutí tlačítka bude proveden pokus o načtení kontaktů z Outlooku a všechny budou postupně vypsány do komponenty Memo.

A co se vlastně bude vypisovat? Pohledem do zdrojáku zjistíte, že to bude položka FullName a Email1Address, tedy celé jméno a primární emailová adresa. Adresář obsahuje pro jednotlivé záznamy pochopitelně mnohem více položek. Jejich seznam následuje:

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

Myslím, že jejich použití je jasné a že není třeba ani složitě jednotlivé položky překládat. Snadno tak můžete získat jen ty informace, která vás zajímají.