
A Windows szolgáltatás működéséhez szükséges egy munkakönyvtár. A mellékelt példaprogram alapértelmezés szerint a c:\MailService könyvtárat használja. Mielőtt futtatná a mellékelt példaprogramot, hozza létre a szolgáltatás munkakönyvtárát, és helyezze el benne a Settings.ini állományt. Az ini állományban kell megadni a szolgáltatás beállításait. Itt adja meg a mailszerver címét, és belépési adatait. Az Interval értéke határozza meg a letöltés sűrűségét.
A szolgáltatás használatához telepítenie kell azt. A telepítést parancssorból végezheti, az –install kapcsoló használatával. Telepítés után, a szolgáltatás „E-mail üzenetek letöltése” névvel kerül be a Windows szolgáltatások közé.
A szolgáltatás munkakönyvtárát a Unit1.pas 21. sorában található ServicePath konstans értéke határozza meg.
Windows szolgáltatás készítéséhez válasszuk a File – New – Other menüpontot. A megjelenő New Items ablakban válasszuk a New fül Service Application elemét.
Létrejövő alkalmazásunkban egy DataModul szerű ablakot láthatunk, Service1 névvel. Ennek az ablaknak az eseményein keresztül vezérelhetjük Windows szolgáltatásunk működését.
A szolgáltatás a Windows szolgáltatások között a DisplayName-ben megadott szöveg alapján lesz bejegyezve.
Az idő telését egy TTimer komponens segítségével figyeljük. Az FTimer objektumot a szolgáltatás OnCreate eseményében hozzuk létre. Ha egy másodperces késleltetést akarunk, akkor az Interval értékét 1000-re kell állítanunk. A Timer OnTimer eseményének bekövetkezésekor a DoTimer metódust hívjuk meg.
Egy szolgáltatást ki- és be lehet kapcsolni, fel lehet függeszteni, majd ismét lehet folytatni. Hogy ezek a funkciók hibátlanul működjenek, az OnContinue, OnPause, OnShutDown, OnStart, OnStop eseményekben gondoskodnunk kell az FTimer ki- és bekapcsolásáról.
Amikor a szolgáltatás elindul, létrejön az OnExecute esemény. Ebben az eseményben gondoskodnunk kell arról, hogy a szolgáltatás ne érjen véget, csak ha leállítják. Ezt egy végtelen ciklus segítségével érhetjük el.
while not Terminated do begin
Sleep(1000);
ServiceThread.ProcessRequests(False);
end;
A beállításokat egy ini állományban adjuk meg. Az ini állományt a TIniFile osztály segítségével kezelhetjük. Egy kulcs értékének kiolvasására a ReadString metódus szolgál.
POP3.Host:=IniFile.ReadString('Settings','HostAddress','');
A levelek letöltéséhez az Indy Clients paletta IdPop komponensét használjuk fel. A Host property-ben adhatjuk meg a mailszerver címét. Felhasználó nevünket a UserID, jelszavunkat a Password property-kben adhatjuk meg.
A megadott szerverhez a Connect metódus meghívásával csatlakozhatunk. A kapcsolatot a Disconnect utasítással bonthatjuk.
A szerveren található, letölthető üzenetek számát a CheckMessages értéke adja meg.
for i:=1 to POP3.CheckMessages do begin
Egy üzenetet sorszáma alapján tölthetünk le, a Retrieve metódus segítségével.
m:=TIDMessage.Create(Nil);
POP3.Retrieve(i,m);
Az üzenet tárgyát a Subject property, a küldőt a Sender.Address értéke adja meg.
Az üzenet szövegét és csatolt állományait a MessageParts kollekción keresztül érhetjük el. A kollekció kétfajta elemet tartalmazhat. Üzenetet – TIDText és csatolt állományt – TIDAttachment.
A ClassType property értékéből olvashatjuk ki, hogy az adott elem éppen melyik.
if m.MessageParts[j].ClassType=TIDAttachment then begin
Attachment:=m.MessageParts[j] As TIDAttachment;
Attachment.SaveToFile(ServicePath+'\Attachments\'+Attachment.FileName);
end;
Ha törölni akarjuk a leveleket a szerverről, akkor azt a Delete metódus használatával tehetjük meg.
if LowerCase(Delete)='y' then
for i:=1 to POP3.CheckMessages do
POP3.Delete(i);
Ha az alkalmazást fel akarjuk venni a Windows szolgáltatások közé, akkor parancssorból el kell indítanunk az alkalmazást az –install paraméterrel.
MailDownloadService – install
Ha a programot el akarjuk távolítani a szolgáltatások közül, akkor az –uninstall paramétert kell alkalmaznunk.
A Windows szolgáltatások vezérlő ablakát a Start – Beállítások – Vezérlőpult – Felügyeleti eszközök – Szolgáltatások kiválasztásával érhetjük el.