SMTP

**Vienkāršais pasta pārsūtīšanas protokols** jeb **SMTP** (no ) ir lietojumslāņa interneta protokols, kas paredzēts elektroniskā pasta sūtīšanai no klienta datora uz SMTP serveri vai starp serveriem. SMTP ir definēts standartā  (STD 10). Paplašinātais protokols ESMTP, kuru lieto mūsdienās, ir definēts .

SMTP var darboties divos režīmos: tiešsaistē (vēstule tiek nogādāta uzreiz uz lietotāja termināli; šis režīms mūsdienās praktiski vairs netiek izmantots) vai, izmantojot vēstuļu kastes (*Mail box*), kurās tiek nogādātas visas lietotājiem adresētās vēstules. Vēstuļu saņemšanai no pasta kastes klientam jāizmanto cits protokols, piemēram, POP3 vai IMAP.

SMTP ir relatīvi vienkāršs, uz tekstu bāzēts protokols. Klienta programma, izmantojot SMTP protokolu, izveido savienojumu ar SMTP serveri. Tālāk notiek datu apmaiņa dialoga režīmā, klientam sūtot komandas, un saņemot no servera atbildes. Serveris pēc vēstulē norādītā viena vai vairāku saņēmēju adresēm (vairumā gadījumu pārbaudot to esamību) nosūta vēstuli uz attiecīgā lietotāja pasta kasti.

Vēstuļu nosūtīšanai starp datoriem tiek iesaistītas īpašas programmas uz pasta serveriem — vēstuļu pārsūtīšanas aģenti (*Mail transfer agent*). Daži SMTP serveri vēstuļu pārsūtīšanai var izmantot ETRN.

## Vēsture
1970. gados, kad tika radīta e-pasta koncepcija, elektroniskās vēstules nosūtīšana bija samērā sarežģīts process. Tā, protokolam UUCP (*Unix-to-Unix Copy Protocol*) vajadzēja norādīt pilnu maršrutu no nosūtītāja līdz saņēmējam vai arī nodibināt tiešu savienojumu. (SMTP adresātu nosaka ar DNS palīdzību).

1980. gada septembrī tika publicēts MTP (*Mail Transfer Protocol*) , kas definēts , atjaunots  (1981. g. maijā). MTP izmantoja elementus no diviem TCP/IP protokoliem: telnet un FTP, taču FTP paredzēts galvenokārt datņu pārsūtīšanai, kas arī radīja MTP nepilnības.

1981. g. novembrī tika publicēts , kurā definēja vienkāršotu MTP protokolu — *Simple Mail Transfer Protocol* (SMTP). Tas bija "neatkarīgs" protokols, kurā netika izmantots FTP.  aprakstīja vēstuļu sūtīšanu ARPAnet teksta ziņojumu standartā, kas definēts . 1982. gada augustā tika publicēti  un , kuros tika aprakstīts uzlabotais SMTP protokols un ARPAnet teksta ziņojumu standarts. 1980. gados e-pasts kļuva populārs informācijas sūtīšanas veids, un tā sūtīšanai līdz pat mūsdienām izmanto galvenokārt SMTP.

1993. gadā tika publicēts () paplašinātais SMTP protokols *SMTP Service Extensions*, kas saglabāja saderību ar iepriekšējām sistēmām. Tas biežāk pazīstams kā ESMTP (*Extended SMTP*).  tika uzlabots 1994. g. () un 1995. gadā ().

2001. gadā tika publicēti  un  pārstrādātie dokumenti  un , kuros ietvertas visas izmaiņas no 1982. līdz 2001. gadam. Pašlaik  ir SMTP pamatstandarts.

Protokols sākotnēji bija izstrādāts teksta kodējumam ASCII; tas liedza iespēju sūtīt binārās datnes. Lai šo ierobežojumu novērstu, tika izstrādāts standarts MIME (*Multipurpose Internet Mail Extensions*), kas pārkodē binārās datnes SMTP protokolam pieņemamā veidā. Sākotnējos vēstuļu pārsūtīšanas aģentos teksta katra baita vecāko bitu vajadzēja nonullēt, kas radīja ziņojuma apjoma palielināšanos, ja vajadzēja nosūtīt 8 bitu baitus. Mūsdienās tiek izmantots 8BITMIME paplašinājums, kas ļauj binārās datnes nosūtīt tikpat vienkārši kā tekstu.

## Tehniskais apraksts
SMTP kā transporta protokolu visbiežāk izmanto TCP, bet to var veikt arī NCP, NITS un X.25. SMTP parasti izmanto TCP 25. portu.

### SMTP modelis
SMTP serverim jāapkalpo lokālie klienti un jānodod pasta sūtījumi citiem SMTP serveriem, ja saņēmējs nav šī datora klients. SMTP programmas var izpildīt divas lomas:
* **SMTP nosūtītājs** (*Sender-SMTP*) jeb **SMTP klients**. Klients nodibina divpusēju sakaru seansu ar lokālo SMTP serveri. Klients šajā gadījumā var būt arī cits SMTP serveris.
* **SMTP saņēmējs** (*Receiver-SMTP*) jeb **SMTP serveris**. Serveris saņem komandas no SMTP nosūtītāja, izpilda tās un sūta atpakaļ atbildi par darbības izpildi.
Kad e-pasta vēstule iet caur vairākiem SMTP serveriem, tad viens un tas pats serveris ir klients, kad nosūta ziņojumu, un serveris, kad saņem ziņojumu.

Pēc cita iedalījuma SMTP serveris var izpildīt šādas lomas:
* **Autors** (*Originator*) — programma, kas ģenerē elektronisko vēstuli un nosūta to.
* **Piegādātājs** (*Delivery*) — serveris, kas saņem vēstules un glabā tās līdz klienta pieprasījumam.
* **Retranslators** (*Relay*) — serveris, kas saņem sūtījumus no viena SMTP servera un nodod tos citam; tas neizpilda vēstuļu ģenerēšanas un piegādāšanas funkcijas.
* **Vārteja** (*Gateway*) — serveris, kas darbojas kā "tilts" starp SMTP protokolu un citu ziņojumu nogādāšanas sistēmu. Vārteja var modificēt SMTP ziņojuma saturu, lai pielāgotu to citai pasta sistēmai.

### Komandas
SMTP komandas sintakse:
  

Galvenās SMTP komandas:
* **ATRN** (*Authenticated TURN*) — pēc tam, kad klientu autentificēja SMTP serveris, šī komanda instruē SMTP saņēmēju atgriezt atbildes ziņojumu *OK*. Šajā gadījumā serverim jāuzņemas pasta sūtītāja funkcijas. Ja SMTP serveris atgriež ziņojumu par vārtejas neesamību (atbilde 502) un paliek par SMTP saņēmēju.
* **AUTH** (*Authentification*) — veic autentificēšanu. Klients nosūta lietotāja vārdu un paroli, lai serveris pārliecinātos par lietotāja identitāti pirms vēstules nosūtīšanas.
* **DATA** — nodod vēstules tekstu. Teksta beigu pazīme ir punkts, pirms kura un pēc kura ir jābūt jaunas rindas simbolam: .
* **EHLO** (*Extended hello*) — ESMTP gadījumā rekomendējamā komanda *HELO* vietā. Ja serveris atbalsta ESMTP, tas atgriež klientam kodu 250. Ja serveris neatbalsta ESMTP, tas atgriež kodu 500.
* **EXPN** (*Expand*) — prasa serverim, lai tas apstiprina, ka komandas arguments ir adresātu saraksts (*mailing list*). Ja tas tā ir, tad serveris klientam atgriež adresātu sarakstu.
* **HELO** (*Hello*) — komanda, kuru klients nosūta serverim, lai sāktu vēstules pārsūtīšanas seansu. Arguments ir nosūtītāja adrese.
* **HELP** — prasa SMTP serverim paskaidrojošo informāciju.
* **MAIL** — iniciē vēstules nosūtīšanu, kurā SMTP serverim nodotos datus tas nogādās vienā vai vairākās pasta kastēs vai pārsūtīs uz citu sistēmu (SMTP serveri). Komandas arguments ir atpakaļceļš (*reverse-path*), kas ir sūtītāja adrese.
* **NOOP** — komanda nozīmē "nav operācijas". Tā tikai atgriež ziņojumu *OK*.
* **QUIT** — sakaru seansa beigšana. Serveris, saņemot šo komandu, atgriež *OK* un aizver sakaru kanālu.
* **RCPT** (*Recipient*) — identificē vēstules individuālo saņēmēju. Ja vēstulei ir vairāki saņēmēji, tad šī komanda jālieto vairākkārt. Arguments ir saņēmēja adrese aiz vārda *TO:*.
* **RSET** (*Reset*) — atceļ pašreizējo vēstules nosūtīšanu. Serveris attīra visus buferus un stāvokļa tabulas. Serverim jānosūta atpakaļ "OK".
* **VRFY** (*Verify*) — pieprasa serverim apstiprinājumu, ka arguments ir pasta kastes lietotājs. Ja tas tā ir, tiek atgriezts lietotāja pilns nosaukums un adrese.

Mūsdienās gandrīz nekur vairs nelietotas komandas ir **SAML**, **SEND** un **SOML**, ar kurām vēstuli var pārsūtīt tieši uz lietotāja termināli, ja tas ir tiešsaistē.  standartā šo komandu izpilde nav obligāta.

## SMTP saņēmēja atbildes kodi
Uz katru komandu, ko sūta SMTP nosūtītājs, saņēmējam jāsniedz atbilde, kas sastāv no 3 cipariem. P

Pirmais cipars var būt:
* 1 — pozitīvas sagatavošanās atbilde. Komandu serveris pieņēmis, bet gaida citu komandu, lai darbību turpinātu vai pārtrauktu.
* 2 — pozitīvas pabeigšanas atbilde. Pieprasītā darbība izpildīta, un var pieteikt jaunu pieprasījumu.
* 3 — pozitīva starpatbilde. Komanda akceptēta, bet izpilde tiek aizturēta, gaidot papildu informāciju. SMTP klientam jādod cita komanda, lai šo informāciju nodotu.
* 4 — pagaidu negatīvas pabeigšanas atbilde. Komanda nav akceptēta, un pieprasītā darbība netika izpildīta. Kļūdas stāvoklis ir "pagaidu", un darbības izpildi var pieprasīt vēlreiz.
* 5 — pastāvīga negatīvas pabeigšanas atbilde. Atšķirībā no 4. atbildes, komandu nevar izpildīt, kamēr nav novērsts kļūdas iemesls. Kļūdas iemesls biežāk ir nepareizi ievadīta komanda vai argumenti.

Otrais cipars var būt:
* 0 — sintakse: saistīts ar komandas sintaksisku kļūdu vai to, ka serveris neatbalsta šādu komandu.
* 1 — informācija: atbilde informācijas pieprasījumam, piemēram, stāvokļa vai palīdzības informācija.
* 2 — sakaru savienojums: saistīts ar pārraides kanālu.
* 5 — pasta sistēma: saistīts ar servera pasta sistēmu.

Trešais cipars precizē 1. un 2. cipara kombināciju variantu.

Biežākie atbildes kodi:
211 — sistēmas stāvoklis vai palīginformācija;
214 — paskaidrojošā informācija;
250 — atbilde *OK* uz darbību, pabeigta;
251 — lietotājs nav lokālais, tiek pāradresēts tālāk;
252 — lietotājam nevar izpildīt *VRFY*, bet vēstule tiks akceptēta un mēģināts nogādāt;
354 — sākt vēstules teksta ievadi;
450 — darbība nav izpildīta, jo pastkastīte nav pieejama (pasta kaste aizņemta);
451 — darbība pārtraukta, kļūda apstrādē;
452 — darbība nav izpildīta nepietiekamas glabāšanas vietas dēļ;
500 — sintaksiskā kļūda vai nepazīstama komanda;
501 — sintaksiskā kļūda parametros vai argumentos;
502 — komanda nav realizēta;
503 — nepareiza komandu secība;
504 — komandas parametrs nav realizēts;
550 — darbība nav izpildīta, jo pastkastīte nav pieejama (pasta kaste nav atrasta, nav pieejas vai komanda atraidīta saskaņā ar drošības politiku);
551 — lietotājs nav lokāls, mēģiniet ar pāradresēšanu;
552 — darbība pārtraukta sakarā ar glabāšanas vietas izbeigšanos;
553 — darbība nav izpildīta sakarā ar sintaksisko kļūdu pasta kastes nosaukumā;
554 — transakcijas kļūme

## Atsauces