HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Outlook programozása


Példaprogram letöltése

101456 bájt

Ha programból szeretnénk egy e-mail-t küldeni, akkor ezt egyszerűen megtehetjük a TNMSMTP komponens segítségével. Ekkor viszont az elküldött e-mail-nek semmi nyoma nem lesz a rendszerünkben, pedig előfordulhat olyan eset, hogy jó lenne, ha a saját programjaink által küldött e-mail-ek is meglennének. Még jobb lenne, ha ezek az e-mail-ek a többi, hagyományosan kézzel írt e-mail-jeink között lenne eltárolva.
Ha internetes levelezésünkhöz az MS Outlook nevű programját használjuk, akkor lehetőségünk nyílik arra, hogy programból készítsünk el egy e-mail-t az Outlook számára és annak küldését is erre a programra bízzuk. Így küldés után a programunk által generált e-mail-t megtaláljuk majd az Elküldött elemek mappájában.
További előnye ennek a megoldásnak az, hogy túl az egyszerű e-mail küldésen, bármi más funkcióját is elérhetjük, programozhatjuk az Outlook-nak.

Mellékelt példaprogramhoz persze szükség lesz a Delphi-n kívül az MS Outlook 98, vagy az MS Outlook 2000 programjára is. (Figyelem: Outlook és nem Outlook Express!)

Az Outlook függvényeinek, interfészeinek deklarációját megtaláljuk a mellékelt Outlook8.pas-ban. Melyet akár mi magunk is előállíthatunk ha a Project - Import type library menüpontot választjuk és a megjelenő ablakban a Microsoft Outlook Object Library-t.

A feladat megvalósításához kapcsolódnunk kell az Outlook programhoz. Erre kétféle lehetőség van: ha már fut az Outlook a gépen, akkor csatlakozhatunk ehhez a programhoz, de akár elindíthatunk egy új példányt is belőle.

A GetOrCreateObject függvényünk vizsgálja, hogy van-e már elindított példány. Ha nincs, akkor pedig elindít egy újat.
function GetOrCreateObject(const ClassName: string): IDispatch;
var
  unknown: IUnknown;
begin
  if Succeeded(GetActiveObject(ProgIDToClassID(ClassName), 
       nil, unknown)) then begin
    OleCheck(unknown.QueryInterface(IDispatch, result));
  end else begin
    result:=CreateOleObject(ClassName);
  end;
end;
Egy új levél létrehozásához az alábbi lépésekre van szükségünk. Az imént ismertetett GetOrCreateObject függvénnyel kapcsolódunk az Outlook programhoz. Ezt egy FApplication nevű variant típusú változóba tároljuk. Új e-mail létrehozásához meg kell hívnunk az FApplication CreateItem függvényét, mellyel egy új elemet hozhatunk létre az Outlook-ban. Hogy mi legyen ez az elem, azt a paraméterként átadott konstans határozza meg. Az olMailItem hatására jön létre az új e-mail. A CreateItem függvény visszatérési értékét egy újabb variant típusú változóba tároljuk, melynek FMailItem nevet adtunk.
A továbbiakban ezt használjuk fel az e-mail-ünk megfelelő paraméterezéséhez. A To nevű property-be adhatjuk meg, hogy kinek címezzük az e-mailt. A Subject property-be a tárgy, a Body property-be a levél szövege kerül.
Végül a Send függvény hívásával küldhetjük el a levelet. Ekkor az új e-mail bekerül az Outlook program Outbox (Postázandó) nevű mappájába és ha van élő internet kapcsolatunk, akkor elküldésre is kerül azonnal.
A fenti programkód lefutásakor, ha az Outlook program nem futott, akkor az csak a háttérben maradva indul el, így a felhasználó számára meg sem jelenik a képernyőn az Outlook program, ő csak a mi programunkat látja.
procedure TForm1.Button1Click(Sender: TObject);
var
  FApplication, FMailItem: variant;
begin
  FApplication:=GetOrCreateObject('Outlook.Application');
  FMailItem:=FApplication.CreateItem(olMailItem);
  FMailItem.To:='animare@animare.hu';
  FMailItem.Subject:='DSO.0301.Outlook';
  FMailItem.Body:='Ez egy próba mail.';
  FMailItem.Send;
  ShowMessage('Az új levél bekerült az Outbox 
      (Postázandó) mappába!');
end;
Nézzünk most egy másik feladatot, mely legyen az, hogy egy TListBox komponensbe kérdezzük le, hogy az Inbox (Beérkezett üzenetek) mappában milyen tárgyú levelek vannak és ezek kitől származnak.

Hasonlóan az előzőekhez, itt is kapcsolatot létesítünk először az Outlook programmal. Következő lépésként az FApplication GetNamespace függvényével lekérdezzük a MAPI névtér objektumát, melyet felhasználva megtudhatjuk az Inbox mappa objektumát, amit az FFolder változóba tárolunk.
Innen már csak egy ciklusra van szükségünk, mely végigmegy az összes elemen az Inbox-ban és sorban lekérdezi az adott e-mail küldőjének nevét és tárgyát.
procedure TForm1.Button2Click(Sender: TObject);
var
  FApplication, FNamespace, FFolder, FMailItem: variant;
  i: integer;
begin
  FApplication:=GetOrCreateObject('Outlook.Application');
  FNamespace:=FApplication.GetNamespace('MAPI');
  FFolder:=FNamespace.GetDefaultFolder(olFolderInbox);
  for i:=1 to FFolder.Items.Count do begin
    FMailItem:=FFolder.Items(i);
    ListBox1.Items.Add(FMailItem.SenderName+
     ' ['+FMailItem.Subject+']');
  end;
end;


Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 16. 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 |