Windows - SMTP Service események

Cikkünkben mégnézzük az SMTP szolgáltatás eseményeit. Végigkövetjük egy üzenet útját a küldéstől a célba érkezésig. Külön foglalkozunk a protokoll eseményekkel és a szállítási folyamatokkal.
Bevezető
A Windows 2000 szerver operációs rendszer önmagában tartalmazza az SMTP szolgáltatást, az IIS 5.0 szerveren belül. Az Exchange 2000 kihasználja az SMTP által nyújtott lehetőségeket, mivel kiváló megoldást tartalmaz folyamat várakozó listák készítésére. Az SMTP nem függ az Exchange-től, fordítva azonban fennáll a függőségi viszony.
Az Exchane 2000 az SMTP szállítási eseményeket kezelő architektúrájára épült, ezáltal üzenetfolyamatokat tudunk testre szabni, kezdeményezni különféle kiszolgálók között. Mindemellett protokoll eseményeket használhatunk arra, hogy az SMTP-t külön kiterjesztett ESMTP (Extended) parancsokkal egészítsük ki. Az így kiegészített szolgáltatás segítségével hasznos alkalmazásokat fejleszthetünk. Lássuk ezeket pontosabban:
Protokoll események:
  • Végrehajthatunk számlázó, számla-kiegyenlítő számításokat több hosszú időtartamú kapcsolat segítségével
  • SMTP-n keresztül figyelemmel kísérhetjük a rendszert azáltal, hogy új ESMTP, azaz extended SMTP parancsokat definiálunk
Szállítási események:
  • Továbbíthatunk minden levelet egy tartomány postafiókjába
  • Minden levél végére elutasítást tehetünk, ami elhagyja a hálózatot
  • Minden Internetről bejövő levelet megvizsgálhatunk kulcsszó, tárgy vagy csatolt állományok alapján
  • Vírust kereshetünk
  • Spam üzeneteket szűrhetünk ki
Használhatjuk a mail relay szolgáltatást, hogy levelező rendszerünket megvédjük az Internet felől érkező támadásokkal szemben. A Windows 2000 csak a 25-ös port-on engedélyez kommunikációt.
Események áttekintése
Az SMTP szolgáltatás eseményei csak COM objektumokon keresztül érhetők el. Az események gyorsak, és nem igényelnek különösebb erőforrást, segítségükkel az üzeneteket alacsony szinten tudjuk elérni.
A következőkben egy magas szintű áttekintést láthatunk egy üzenet áthaladásáról az SMTP szolgáltatáson:
  • Protokoll események
Egy levelet küldünk SMTP segítségével a hálózaton a Windows 2000 szerver SMTP szolgáltatásának. Ebből a szemszögből az érdekes számunkra, hogy mi történik a levéllel a kiszolgálók közötti átvitel során. Ezek az események SMTP specifikusak, és lehetővé teszik számunkra, hogy módosítsunk a ráépülő protokoll eseményein.
  • Szállítási események: OnSubmission/OnArrival (Küldés/Fogadás)
Amikor egy levélüzenet érkezik a kiszolgálóra (ami a levélnek lehet egy következő ugrása, vagy végcélja) a szállító események lépnek életbe. Ekkor az OnSubmission esemény aktiválódik. Ez az esemény arra készteti az ütemezőt, hogy megvizsgálja a meta adatbázist, hogy az üzenethez megfeleltethető-e valamely esemény. Az adatbázis értesíti az ütemezőt minden eseményről, ami süllyedést (sink) okoz, és az ütemező a válaszában értesül az üzenetekről, valamint arról, hogy mely sink-et kell futtatni és mikor. A feldolgozás sorrendje a sink prioritásától függ, ami a meta adatbázisban regisztrálva van. Ezek a sink-ek megírhatók úgy, hogy párhuzamosítva működjenek, és közben más üzeneteket is fel lehessen dolgozni, mialatt az előző egy hosszabb folyamaton esik át. A sink-eket úgy is meg lehet írni, hogy az ütemező fenntartson belőlük egy példányt későbbi használatra. Ez növeli a teljesítményt, a sink-ek többször is meghívhatóak.
Egy másik metódusa az OnSubmission esemény kezelésének a CDO_OnArrival használata. Ezzel az eseménnyel egy sink megírható bármely Collaboration Data Objects (CDO) nyelven, mint pl.: a Visual Basic és a VBScript. A CDO_OnArrival esemény csomagolásnak felel meg, az OnSubmission szállító esemény körül, ami egy kezelőt nyújt a levélnek CDO formátumban. A CDO_OnArrival használatának legnagyobb haszna az, hogy a CDO üzenet objektum interfészének nagyon sok hasznos metódusa van, mint például a MIME és RFC 822 fejlécelemző. A legnagyobb hátránya az, hogy a CDO jelentős többletterheléssel dolgozik és szinkronműködésű. A CDO_OnArrival esemény a legalkalmasabb olyan sink-ek esetén, amelyek csak néhány üzeneten futnak. A OnSubmission/OnArrival esemény az egyedüli, amely CDO interfészt nyújt és tartalmazza annak a lehetőségét is, hogy VB nyelveken sink-eket írjunk. A OnSubmission esemény ad lehetőséget arra, hogy új címzetteket adjunk hozzá a levélhez.
  • Transzport esemény: Előkategorizáló. Ez az esemény hasonló az OnSubmission eseményhez, kivéve azt, hogy ez nem támogat CDO verziót. Ennél az eseménynél minden címzettnek már hozzáadottnak kell lennie (az OnSubmission esemény alatt) az üzenethez és az utolsó meghatározhatatlan címzett listának is az üzenetben szerepelnie kell.
  • Transzport esemény: Kategorizáló. A kategorizáló célja, hogy elvégezzük a címjegyzék vizsgálatot, és megállapítsunk a küldőket, fogadókat. Kategorizáló esemény sink-ek hozzáadhatnak extra attribútumokat a vizsgálathoz anélkül, hogy teljesítménycsökkenés történne, vagy módosíthatja az attribútum keresés útját a címjegyzékben. Amint korábban említettük, az alapértelmezett kategorizáló sink-ek (amelyek megjelennek alapértelmezésben az Internet System Manager UI-n keresztül) postázódnak a Windows 2000 segítségével, vagy létrehozhatunk saját sink-et Visual C++ segítségével. A kategorizáló eseménynek nincs CDO verziója.
  • Transzport esemény: Utókategorizáló. Az utókategorizáló eseményben, a terjesztési lista kibővítése történik meg és az aktuális címzettek listázódnak, így összeszámolható, hogy ki fog másolatot kapni az üzenetből, és például használhatjuk ezt a számot a címzett limit vizsgálathoz. Nincsenek alapértelmezett sink-ek, de sajátot készíthetünk Visual C++ segítségével, ami futhat a levélüzeneten. Az utókategorizálónak sincs CDO verziója.
  • Transzport esemény: Útválasztás. Windows 2000 SMTP service küldi az üzeneteket ponttól pontig a végső címzett célkiszolgálójához alapértelmezésben. Nincs útválasztó esemény sink installálva alapértelmezettként a Windows 2000-ben, és nincs CDO verziója ennek az eseménynek. Az útválasztó sink az Exchange 2000-el települ, meghatározva, hogy hová ugrik a levél végül, és küldi a levelet tovább arra a helyre, amely a connector-on keresztül definiálva van. Ha az üzenet elindul egy másik kiszolgálóra, az útválasztó sink újrakalkulálja a következő ugrást és elküldi a levelet az új ugrás irányába.
  • Meghajtó események tárolása. Ez az esemény azt kezeli, hogy a levél környezete hogyan folytatódik. Két fő tároló meghajtó esemény létezik: az egyik kezeli azokat az üzeneteket, amelyek az SMTP-n keresztül érkeztek és várakozniuk kell, a másik kezeli azokat, amelyek a helyi kézbesítéshez címzettek a szerveren. Az alapértelmezett esemény sink a Windows 2000-el települ. SMTP service tárolja az üzeneteket fájl rendszer könyvtárakban. Amikor az Exchange 2000 feltelepül, ez utóbbi tároló meghajtó lecserélődik egy másikra, amely küldi a helyi címzésű üzeneteket az Exchange 2000 Web Storage rendszerébe.
  • Protokoll események. Ha a levél üzenet egy másik rendszerbe szándékozik tovább haladni, az SMTP protokoll események lépnek elő újra és a levelek átesnek ezen a folyamaton újra minden ugrásnál egészen addig, amíg meg nem találják a végső céltárolójukat.