Next: A Sendmail üzembe állítása
Up: Sendmail telepítése és beállítása
Previous: Tartalom
  Tartalom
Szakaszok
Az elektronikus levelezésnek az emberen kívül kétféle résztvevője van. Az egyik
az, amivel a levelezést igénybe vevő felhasználó kerül kapcsolatba, tehát elküldi
az általa megszerkesztett üzenetet, illetve elolvashatja a mailbox-ában található
leveleket. Ezeket a programokat Mail User Agent-eknek (MUA) nevezzük
(pl. pine, mailx, Pegasus Mail, Eudora stb.). A másik csoportba az ún. Mail
Transport Agent (MTA) programok tartoznak; ezeknek a feladata az, hogy a küldő
MUA-től, vagy egy másik MTA-től kapott levelet átadják a fogadó MUA-nek vagy
egy másik MTA-nek. Egy elektronikus üzenet MTA-ek láncolatán keresztül jut el
a küldő MUA-től a címzettig.
A sendmail program tulajdonképpen már 1980 óta létezik különféle formákban.
A 4BSD és a 4.1BSD rendszerekben delivermail néven jelent meg, míg a
4.2BSD-ben sendmail-ként. A hálózatos UNIX rendszerek körében elég hamar
uralkodó levelezőrendszerré vált. A sendmail program elsősorban Eric
Allman (Berkeley) nevéhez fűződik, bár ő 1987-91-ig szüneteltette ilyen irányú
tevékenységét. Az 1991 után megjelent (és jelenleg is futó) új változatot nevezik
8-as verziónak1.
A sendmail szerepét a következő ábrával lehet összefoglalni:
A sendmail program tehát nem kerül közvetlenül kapcsolatba a felhasználóval,
és nem kézbesít levelet2. Utóbbi alól az az egy eset jelent kivételt, amikor a kimenet közvetlenül egy
file-ba kerül. Az üzenetet a címtől függően átadja egy másik mailer (MTA)
programnak, szükség szerint módosítva azt (ez leginkább a címeknek a fogadó
hálózat számára megfelelően történő átírását jelenti). A valódi kézbesítés hiánya
különösen a helyi leveleknél szembetűnő (elvileg megtehetné, hogy ő maga teszi
az üzenetet a címzett mailbox-ába), ez azonban azt jelenti, hogy nem kell törődni
azzal, hogy az adott rendszerben hol vannak a mailbox-ok, milyen a formátumuk,
milyen locking mechanizmus használatos rájuk stb.
A sendmail, mint MTA, a következő módokon tud üzenetet átvenni és átadni:
- Argumentumok és exit státusz. Ez a UNIX rendszerekben szokásos módja
az adatátvitelnek: itt ez azt jelenti, hogy a címzett(ek) a mailernek átadott
paraméter(ek)ként jelenik(-nek) meg, míg maga az üzenet a standard inputon
érkezik. A mailer kimenete probléma esetén visszaküldhető a feladónak.
A mailer exit státuszát megkapja.
- SMTP protokoll UNIX pipe-pár felett. Ez esetben is elindítunk egy új
folyamatot, de a kommunikáció itt az SMTP protokollnak megfelelően történik,
beleértve a címzettek átadását is.
- SMTP protokoll IPC csatorna felett. Az átvitel folyamata hasonló az előzőhöz,
de a kommunikáció itt egymástól függetlenül, sőt akár különböző gépeken futó
folyamatok között történik. Ez a módja a távoli gépen futó sendmail folyamathoz
való kapcsolódásnak, ami nem más, mint az SMTP alapú levelezés.
A szabványos felületek használatának köszönhetően a sendmail nagy mértékben
nyitott új mailer-ek támogatására.
A küldő program az előbbi három módszer valamelyikét használva kéri meg a sendmail-t
az üzenet továbbítására. Az üzenettovábbítás két lépésben történik: először
beolvassa és eltárolja az üzenetet, majd elküldi. Ha az elküldés során valami
probléma van, a sendmail előállít egy új üzenetet, amiben értesíti a
feladót a hibáról.
Az üzenettovábbítás lépései:
- 1.
- Címzettek listájának előállítása. Ha a sendmail meghívása az első
két mód valamelyikével történt, elsőként a parancssori argumentumok feldolgozása
kerül sorra (opciók, esetleg címzettek). Ezután a címzettek listája az argumentumok
vagy az SMTP protokoll RCPT parancsa alapján állítható elő. A listán egyetlen
cím sem szerepelhet többször, a végtelen hurkok és a többszörösen megkapott
levelek elkerülése végett. A lista előállításakor a szintaktikai ellenőrzés
mellett a helyi címek ellenőrzése és az alias-ok feloldása is megtörténik.
A host-nevek és az egyéb címek ellenőrzése csak az elküldéskor történik meg.
- 2.
- Az üzenet beolvasása. Az üzenetnek egy fejléccel kell kezdődnie; ezt
a sendmail kielemzi és a memóriában tárolja. A törzs tetszőleges szöveg
lehet -- tehát bináris adat nem --; ezt egy átmeneti file-ba teszi. Az üzenetet
akkor is beolvassa, ha nem volt érvényes címzett (majd ezután hibajelzéssel
visszaküldi).
- 3.
- Az üzenet elküldése. Minden egyes címzetthez az üzenetet átadja a megfelelő
mailer-nek; egy címzett host-ra egyszerre küldi el az összes levelet (az egyszerre
csak egy címzettet elfogadó mailer-eket megfelelően kezeli). Minden egyes elküldött
levél elé odatesz egy egyedi fejlécet. Ezután a mailer státuszát megkapja és
ellenőrzi.
- 4.
- Sorbaállítás újbóli elküldésre. Ha a mailer státusza azt jelzi, hogy
bár nem tudta elküldeni az üzenetet, később még képes lehet rá, a sendmail
félreteszi az üzenetet a mail queue-ba, és később újra megpróbálkozik
vele.
- 5.
- Vissza a feladónak. Ha valamilyen hiba jelentkezik, a sendmail
visszaküldi a levelet a feladónak: a helyzettől függően visszapostázza, vagy
(pl. lokális levél esetén) a $HOME/dead.letter file-ba írja.
Az üzenettovábbítás folyamatának megtervezésekor az volt a fő szempont, hogy
minden egyes elküldött üzenet megbízhatóan eljusson a címzetthez, vagy ha ez
nem lehetséges, valaki mindig értesüljön róla, tehát egyetlen üzenet se tűnjön
el nyomtalanul.
Next: A Sendmail üzembe állítása
Up: Sendmail telepítése és beállítása
Previous: Tartalom
  Tartalom
Hamori Andras
1999-03-21