HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Outlook felhasználói mappa nevek lekérdezése


Példaprogram letöltése

18711 bájt

Az Outlook programozásával már foglalkoztunk néhány korábbi cikkünkben. Mostani példánkban egy TreeView-be beolvassuk az összes olyan mappa tartalmát, amely email-eket tartalmaz, valamint a mappák neve alatt az email-eket is megjelenítjük.
Az Outlook-ban a mappák a fájlrendszer könyvtáraihoz hasonlóan érhetők el. Egy mappa tartalmazhat további mappákat, valamint a mappa típusától függően email-eket, találkozókat, névjegyeket, stb.

A Form1 OnCreate eseményénél csatlakozunk az Outlook-hoz a CreateOleObject függvénnyel. Az FOutlook egy OleVariant típusú változó. Ahhoz, hogy a mappákhoz hozzáférjünk szükségünk lesz egy NameSpace objektumhoz, amit a GetNameSpace függvénnyel kérdezhetünk le. Ennek egy paramétere van, ami mindig "MAPI" kell, hogy legyen. Szükségünk lesz még a "Törölt elemek" mappa nevére is, majd a későbbiekben meglátjuk, hogy miért.
procedure TForm1.FormCreate(Sender: TObject);
begin
  FOutlook:=CreateOleObject('Outlook.Application');
  FNameSpace:=FOutlook.GetNameSpace('MAPI');
  FDeletedItemsFolder:=FNameSpace.GetDefaultFolder(3).Name;
end;
A mappák beolvasása a Button1 OnClick eseményénél történik meg. Ez az email-ek számától függően hosszabb ideig is eltarthat. A Folders változóba lekérdezzük az alap mappák objektumát. Ebből általában csak egy van, és a "Személyes mappák" névre hallgat. A Folders objektum Item property-je MAPIFolder típusú objektumokat tartalmaz, melyek a tényleges mappák. Ezek a mappák tartalmazzák az Outlook elemeket, amilyen például az email is.
procedure TForm1.Button1Click(Sender: TObject);
…
  TreeView1.Items.Clear;
  Folders:=FNameSpace.Folders;  i:=0;
  while i<Folders.Count do begin
    MAPIFolder:=Folders.Item[i+1];
    ScanFolders(nil, MAPIFolder);    inc(i);
  end;
  TreeView1.Items[0].Expand(false);
end;
Fent már említettük, hogy egy mappa további mappákat is tartalmazhat, tehát nyilvánvaló, hogy rekurzív eljárással tudjuk csak az összes mappa tartalmát beolvasni. Ez az eljárás a ScanFolders. Ennek két paramétere van: a TreeNode a TreeView azon eleme, ami alá a mappa kerül, a MAPIFolder pedig egy Outlook mappa objektum.
Nekünk csak azok a mappák kellenek, melyek email-eket tartalmaznak. Ezt a DefaultItemTpye property-ből tudhatjuk meg. Ha ennek értéke 0, akkor a mappában található elemek emailek, vagyis MailItem osztályú objektumok. Egy gond viszont van, mivel a "Törölt elemek" mappa is alapértelmezetten ilyen elemeket tartalmaz, viszont ebben lehetnek más típusú elemek is. Tehát az eljárás elején rögtön ellenőrizzük, hogy a mappa nem a "Törölt elemek" mappa-e, és alapértelmezetten MailItem objektumokat (0) tartalmaz-e.
procedure TForm1.ScanFolders (TreeNode:TTreeNode; MAPIFolder:OleVariant);
…
  if (MAPIFolder.DefaultItemType<>0)
  or (MAPIFolder.Name=FDeletedItemsFolder) then Exit;
A FolderName és FolderItems változókban eltároljuk a mappa nevét, és a mappa elemeinek számát, ami tulajdonképpen az emailek száma.
  FolderName:=MAPIFolder.Name;
  FolderItems:=MAPIFolder.Items.Count;
Ha a TReeNode értéke nil, akkor ez a mappa a TreeView gyökérkönyvtárába kerül, ha pedig nem, akkor a TreeNode elem alá.
  if TreeNode=nil
  then NewNode:=TreeView1.Items.Add(TreeNode, FolderName)
  else NewNode:=TreeView1.Items.AddChild(TreeNode, FolderName);
  NewNode.ImageIndex:=0;  NewNode.SelectedIndex:=0;
…
Egy ciklussal végigmegyünk a mappa almappáin, és meghívjuk rekurzívan a ScanFolders eljárást. Ezzel elérjük, hogy minden mappát átnézünk, és egy adott mappában található további mappák az emailek fölött fognak megjelenni.
  
  i:=0;
  while i<MAPIFolder.Folders.Count do begin
    ScanFolders(NewNode, MAPIFolder.Folders.Item[i+1]);
    inc(i);
  end;
Ha az összes almappát beolvastuk, akkor jöhetnek az emailek. Ezeket egy egyszerű ciklussal lekérdezhetjük. A MAPIFolder osztály Items property-je MailItem objektumokat tartalmaz, de csak abban az esetben, ha a DefaultItemType property értéke 0. Ezt viszont már az eljárás elején ellenőriztük, tehát itt már nem kell megtennünk. A MailItem objektum SenderName property-je a feladó nevét, a Subject a levél tárgyát és a ReceivedTime a dátumot tartalmazza. Ezt a három tulajdonságot jelenítjük meg a TreeView-ben.
  t:=1;
  while t<=MAPIFolder.Items.Count do begin
    mi:=MAPIFolder.Items(t);
    MailSender:=mi.SenderName;   MailSubject:=mi.Subject;
    MailReceived:=mi.ReceivedTime;
    NewMailNode:=TreeView1.Items.AddChild(NewNode, MailSender+': '+MailSubject+' ('+MailReceived
       +')');
    NewMailNode.ImageIndex:=1;    NewMailNode.SelectedIndex:=1;
    inc(t);
  end;
  Label1.Caption:='';
end;


Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 462. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |