SMTP

20.11.1997

Matias Karvinen
Teknillinen Korkeakoulu
mkarvine@cc.hut.fi

Tiivistelmä

SMTP on protokolla, joka määrittelee sähköpostin tehokkaan ja luotettavan kulun. SMTP:ssä määritellään kahden palvelimen, lähettäjän ja vastaajan välillä kulkevat viestit. Välitetyt viestit perustuvat ASCII-merkistöön ja viestejen kulku on molempisuuntaista. SMTP:n lähetysprosessi voidaan jakaa kolmeen eri vaiheessen: Vastaanottajan ja lähettäjän osoiteselvitykseen, sekä itse viestiin. Osotteiden selvitystä tukee DNS (Domain Name System).

Protokollan pohjautuen on toteutettu useampia sovelluksia, tunnetuin näistä lienee Sendmail.


Johdanto

SMTP (Simple Mail Transfer Protocol) on RFC 821:ssa määritelty protokolla [5], jonka tehtävä on määritellä sähköpostin luotettava ja tehokas kulku verkossa. Protokolla on alustariippumaton, ja vaatii ainoastaan siirtotien tiedolle. Tämä onkin osoittautunut protokollan suureksi eduksi. Internetissä kulkevat viestit kohtaavat matkalla useampia erityyppisiä verkon kuljetuspalveluita. Monesta sähköpostijärjestelmästä poiketen SMTP on ns. end-to-end-ratkaisu. Eli, lähettäjän palvelin ottaa yhteyttä suoraan vastaanottajan palvelimeen, ja säilyttää lähetetyn viestin, kunnes viesti on vastaanotettu.[2]

SMTP:palvelin voi myöskin käyttää matkalla olevia muita SMTP:palvelimia välittääkseen viestiä. Tämä vaatii kuitenkin välillä olevalta SMTP:palvelimelta tiedon lopullisesta vastaanottajan postilaatikon osoitteesta ja siitä vastaavasta palvelimesta.

SMTP:stä puhuttaessa viitataan usein moneen muuhunkin asiaan esim. sen sähköpostipalvelimiin kuten Sendmail, tai sen rinnakkaisiin protokolliin kuten RFC 822 tai RFC 1049, jossa on mm. määritelty viestin sisällön muodot.[4]

Kahden TCP/IP:palvelimen sähköpostiliikenteen sisällön määrittelevän protokollan virallinen nimi on MAIL (STD 10/RFC 821) [2].

2 SMTP:n toiminta

Lähetyspyynnön perusteella luodaan kaksisuuntainen siirtotie vastaanottavalle palvelimelle. Yhteys on suora, jos palvelimet käyttävät samanlaisia kuljetus palveluita, muussa tapauksessa yhteys joudutaan luomaan välillä olevan välittäjäpalvelimen kautta. Kun siirtoyhteys on vahvistettu lähettäjä lähettää MAIL-pyynnön, jos vastaanottaja suostuu pyyntöön vastataan OK-kuittauksella. MAIL-pyynnön argumenttina on aina lähettäjän osoite, tätä osoitetta tarvitaan jos muiden palvelimien kautta välitettyä viestiä ei jostain syystä voida reitittää perille. Tämän jälkeen seuraa RCPT-pyyntö, jossa on määritelty vastaanottajan osoite. Vastaanottajalla on nyt mahdollisuus, joko hyväksyä tai hylätä kyseinen osoite. Hylkäys ei kuitenkaan johda koko yhteyden hylkäämiseen, vaan koskee kyseistä vastaanottajaa. Vastaanottajia voi olla useampiakin, jos vastaanottajia on useampia ja postilaatikot ovat samalla palvelimella lähetetään vain yksi kopio viestistä tälle palvelimelle. Kun osoitteista on sovittu ollaankin valmiita viestin siirtoon. [5]

SMTP vastaa standardin mukaan palvelimen portissa nro. 25. Esim. telnet yhteyden SMTP:palvelimeen saa komennolla telnet palvelin 25. Käyttämällä SMTP:n syntaksia voi yhteyden luonnin jälkeen lähettää postia itse simuloimalla lähettäjäpalvelinta.

2.2 SMTP:n syntaksi

SMTP:n komentojen syntaksi perustuu ASCII-merkistöön, isoille ja pienille kirjaimille ei tehdä eroa. Tulee kuitenkin muistaa, että pienten ja isojen kirjainten erolla voi olla vaikutusta esim. käyttäjätunnusten kohdalla, tämä kuitenkin riippuu vastaanottavan palvelimen konfiguroinnista.

Komennot voidaan luokitella kolmeen eri vaiheeseen: MAIL, RCPT ja itse viesti: DATA. Näillä kolmella peruskomennolla voidaankin hoitaa koko lähetys.
Esim. ensimmäisen vaiheen MAIL-pyyntö on muotoa:

MAIL <SP> FROM:<lahettajan osoite> <CRLF> (SP=space, CRLF=carriage return) [2]

Onnistunut mail-proseduuri kuitataan 250 OK-sanomalla, eri virhetilanteille on omat koodinsa esim. jos vastaanottajan osoitetta ei löydy vastaanottavan palvelimen rekistereistä...[3,5]

2.3 FORWARD-välitys

Joissakin tapauksissa palvelin ei tunnista vastaanottajaa koska osoite on väärä, mutta tietää oikean osoiteen, tässä tapauksessa palvelin voi lähettää korjauskuittauksen lähettäjälle sisällyttäen viestiin oikean osoitteen:

251 User not local; will forward to <"uusi osoite">
Koodi 251 on tämän tyyppisessä tapauksessa käytettävä merkintä. Jos vastaanottaja tämän lisäksi kieltäytyy vastaanottamaan viestejä lähetysosoitteesta voidaan viestit uudelleenohjata:
551 User not local; please try <"uusi osoite">
[3,5]

2.4 VRFY ja EXPN

Täysveriseltä SMTP-palvelimelta pitäisi myös olla mahdollisuus tiedustella mahdollisista käyttäjistä tai vastaanottajista ja lisätä postituslistaan lisää vastaanottajia. Nämä ovat toteutettu VRFY ja EXPN komennoilla: VRFY-komennosta ja EXPN-komennosta palautetaan tieto kyseisen vastaanottajan tilanteesta. Esim. Jos vastaajaa ei löydy, kuittaus voisi olla:"553 User ambiguous" [5].

2.5 Muita toimintoija

Protokollaan liitty myös yhteyttä luodessa ns. HELO-kättely [2]. Siinä varmistetaan, että ollaan saatu yhteys kuviteltuun palvelimeen, protokollalle ei siis voi väärentää lähettäjän palvelimen domainia kertomalla väärää tietoa, tämä voidaan tietysti kiertää joidenkin toteutusten kohdalla. Varma tunnistaminen on verkossa vaikeaa.

Yleensä vastaanottajan osoitteesta erotetaan reitti, jolla sinne päästään. Tämä ns. forward-path sisältää osoitteen lisäksi reittitietoa.Tämän tiedon vastakohta ns. reverse-path toimii vastakkaisesti niin, että siirryttäessä palvelimelta toiselle reittitiedot siirtyvät forward-polusta reverse-polkuun.

Palvelimet voivat myös "vaihtaa" rooleja TURN-komennolla, jolloin vastaanottajasta tulee lähettäjä. Palvelimet voivat kuitenkin haluttaessa estää tämäntyyppisen toiminnan.

2.6 Rajoituksista

SMTP:n eri argumenteilla ja viestin sisällöllä on tiettyjä rajoitteita, jotka tulisi muistaa: Käyttäjänimellä ja domain-nimessä saa esiintyä enintään 64 merkkiä. Suurin rivin pituus on 1000 merkkiä. Suurin määrä samaalla kertaa bufferoituja vastaanottajia on 100. Yhden SMTP-komentorivin maksimipituus on itse komennon ja ctrl-merkin lisäksi 512 merkkiä. Polun (path) maksimipituus on 256 merkkiä.

Rajoitusten ylittämisestä tulee virheilmoitukset 500 (liian pitkä rivi), 501(liian pitkä polku) ja 552 (liiaan monta vastaanottajaa tai liian pitkä viesti).[5]

2.7 Headerit

Headerit sisältävät tietoa sähköpostista ja ne ovat esiteltyinä sähköpostin ensimmäisillä riveillä. Yleensä käyttäjän ei tarvitse välittää headertietueista, SMTP huolehtii niistä. Useimmiten kaikkia headereita ei näytetä lukijalle, kuitenkin jokaisella sähköpostiviestillä on headerit. Jos on epävarma viestin oikeasta alkuperästä voi olla syytä tutkailla headereita varmuudeksi. RFC 822 määrittelee tarkasti nämä viestin ns. headerit. [4] Formaatti jolla headerit on määritelty on seuraava:

Käytetyimpiä kenttiä ovat: Kenttien lisäksi voidaan sisällyttää headereihin tietoa ihmisille, johon protokolla ei ota kantaa. Tällaisessa tapauksissa kentän todellinen arvo laitetaan sulkujen sisälle.
Esim. "Matti Jokamies" <joku.jossain@suomessa.fi >. [2]

3 Sendmail

SMTP:n sovelluksia on kehittynyt ajan mittaan monia: Näistä tunnetuin ja käytetyin on Sendmail. Sendmailin on yhteensopiva perinteisten UNIX-tyyppisten palvelinten kanssa, sitä jaetaan myös freewarena. Sendmailia on kehitetty monen ohjelmoijan ja käyttäjän avuin. Sen suosio perustuukin juuri siihen, että se on ympäristönsä kasvatti, käytännössä hyväksi todettu. Tulevaisuuden näkymiä parantaa myös se, että sitä jaetaan esim. Microsoftin markkinaosuuksia ansiokkaasti syövän Linux freeware-käyttöjärjestelmän paketissa. [1]

Monet sendmailsovellukset pohjautuvat myös STMP:n laajennukseen ESMTP:hen. Sitä voi luokitella jonkiasteiseksi SMTP:n laajennukseksi, mutta se ei käsitä mittän uutta järisyttävää.

3.2 Sendmailin ominaisuuksia

Sendmailin ominaisuudet ovat kohtalaisen tunnettuja. Sendmailin konfiguraatiotiedostoissa voidaan uudelleenmääritellä vasttaanottajia,domaineja tai luoda ns. aliaksia, joidenka avulla voidaan toteuttaa helpommin muistettavia osoitteita käyttäjätunnuksille. Ylläpitäjä konfiguroi näitä teksti-tiedostoja joko käsin tai esim. Windows-ympäristössä käyttöliittymän kautta. Käsin päivitettävyys ei tuota vaikeuksia, syntaksi on helppoa ja nopesti hallittavissa.

Konfiguroimalla Sendmailtiedostot hyvin voidaan hallita esim. väärin osoitetut sähköpostit tai ohjata uusien domainejen sähköposteja vanhoihin osoitteisiin. Esim. jos yrityksellä on uusi domaini, mutta ei ole vielä luotu käyttäjätunnuksia tämän domainin alla toimivaan koneeseen voidaan uudet domain-päätteet vaihtaa helposti vanhoiksi. Lopputulos on, että lähettäjä luulee lähettävänsä sähköpostia osoitteseen käyttäjä@uusi.fi, mutta oikeasti postit ohjataan osoitteeseen käyttäjä@vanha.fi. Tämäntyyppinen konfigurointi tuo joustavuutta ja mahdollistaa kyseisten domainejen kaikkien sähköpostien helpon halinnan.

Sendmail tukee myös .forward-tiedostoa, jonka avulla käyttäjä voi uudelleenohjata omat sähköpostinsa muualle. Hylätyt kirjeet tallennetaan dead.letter nimisiin tiedostoihin. Sendmailissa voidaan määritellä pisin aika, joka voidaan käyttää viestin lähettämiseen, yleensä tämä aika on asetettu 5 päiväksi.[3]

4 DNS ja SMTP

DNS (Domain Name System) on SMTP:sovellusten apuna lähetettäessä postia. DNS sisältää tietoa internetin palvelinten osotteista. DNS:n maileihin liittyvän protokollan virallinen nimi on DNS-MX. Lähetyspyynnössä sovellus keskustelee paikallisen nimipalvelimen kanssa. MX tietue viittaa nimipalvelussa domainin sähköpostipalvelimeen. MX:tiedon yhteydessä annetaan myös prioriteetti. Tämä onkin tärkeää, sillä jos lähettäjä sijaitsee samalla palvelimella voi syntyä mailli-silmukoita. Sääntönä on, että maili lähetetään eteenpäin vain selaiselle palvelimelle, jolla on alempi prioriteettiluku, kuin omalla palvelimella.

Silmukoita voi myös syntyä, jos nimipalvelinten tiedot eivät ole ajantasalla. Tällaisia tapauksia syntyy yleensä nimipalveluiden päivitysten yhteydessä. Kun eripaikoissa olevien palvelinten tiedot eivät vastaa toisiaan. Tällaisia tapauksia voidaan välttää, jos MX-tietueen päivitys tehdään samalla tietueen viittaamiin palvelimiinn tyhjentämällä niiden MX:taulujen tallennukset.

Eli, jos esim. halutaan lähettä sähköpostia odoitteeseen iiro.teekkari@hut.fi, joutuu lähettäjä tekemään kyselyn hut.fi:domainin nimipalvelusta vastaavaan palvelimeen ja kysymään MX-tietuetta. MX-kenttä kertoo sähköpostipalvelimen, jossa toivon mukaan voidaan selvittää, kuka tämä iiro.teekkari on.

5 POP ja IMAP

Usein puhutaan SMTP:n yhteydessä myös POP- ja IMAP:protokollista.

POP (Post Office Protocol) ja IMAP (Interactive Mail Access Protocol) ovat protokollia, joilla haetaan sähköpostit sähköpostipalvelimelta. Ne vaativat SMTP:tä vähemmän levytilaa, koska itse viestejä ei säilytetä palvelimella. Nämä protokollat eivät myöskään vaadi jatkuvaa internetyhteyttä. Tämän tyyppiset ratkaisut ovat siis "halvempia" ja "kevyempiä" vaihtoehtoja. Tulee kuitenkin muistaa, että nämä protokollat määrittelevät vain pääsyn jo olemassa oleviin sähköposteihin, niissä ei määritellä sähköpostejen lähettämistä.

6 SMTP:n tulevaisuus

SMTP:protokolla on lisääntyvän sähköpostiviestinnän myötä kasvanut tärkeäksi viestintäprotokollaksi. Se on peruspiirteiltään suhteellisen yksinkertainen, mutta on osoittautunut käytännössä toimivaksi. SMTP:sovellusten suurimpia uhkia lienee muitakin internetsovelluksia vaivaavan käyttäjän identifikoinnin vaikeus. Koska perinteiset UNIX-käyttäjät liikkuvat käyttöjärjestelmien "matalalla tasolla" mahdollisuus vaikuttaa protokollaan liikennöintiin suoraa on osoittautunut uhkatekijäksi. Ihmiset luottavatkin ehkä liikaa viestin väitettyihin lähettäjiin. Käytännössä viestien väärentäminen on suhteellisen helppoa toimintaa tietylle tasolle asti, tästä ehkä suuri yleisö ei vielä ole tietoinen ja se voi käytännössä koitua kohtalokkaaksi monessakin tapauksessa.

Sähköposti on luultavasti tullut jäädäkseen, ainakin toistaiseksi. Tällä hetkellä sen arvellaan olevan käytetyin TCP/IP:sovellus [2].Sähköposti toimi monessa yrityksessä viestinnän lisäksi myös työntekijöiden memona ja jopa kalenterina. Sähköpostin vahvuuksia on sen ilmainen käyttö ja tästä syystä sähköposti on osittain korvannut esim. puhelinliikennettä.


Lähdeluettelo

Lisätietoja

Configuring Sendmail the First Time
Sendmailin konfigurointiapua
IMAP, POP and MAPI
Tietoa IMAP, POP ja MAPIsta
What is IMAP?
Tietoa IMAPista
PROTOCOL WALK-THROUGH
Tietoa aihepiiriin liittyvistä asioista
SMTP PROTOCOL
Lisätietoa SMTP:stä
A (Smoother) Engine Powers Network Email,?
Tietoa sendmailista ja protokollista
sendmail(1M) manual page
Apua sendmailin käyttöön
Typical Electronic Mail Facilities
Yleistä tietoa sähköposteista
Post Office Protocol - Version
FRC 1725
MAIL ROUTING AND THE DOMAIN SYSTEM
RFC 974
INTERACTIVE MAIL ACCESS PROTOCOL - VERSION
RFC 203
Caloca Paul,Muy Cool Sendmail Resources
Sekalaista sendmailiin liittyvää tietoa