SMTP

Simple Mail Transfer Protocol (prescurtat, SMTP; în traducere aproximativă Protocolul simplu de transfer al corespondenței) este un protocol simplu din suită de protocoale de Internet, care este folosit la transmiterea mesajelor în format electronic în rețea de calculatoare. SMTP folosește portul de aplicație 25 TCP („smtp”) și determină adresa unui server SMTP pe baza înregistrării MX (Mail eXchange, „schimb de corespodență”) din configurația serverului DNS.

Protocolul SMTP specifică modul în care mesajele de poștă electronică sunt transferate între procese SMTP aflate pe sisteme diferite. Procesul SMTP care are de transmis un mesaj este numit client SMTP iar procesul SMTP care primește mesajul este serverul SMTP.

Istoric 
SMTP a inceput sa fie folosit mai des la inceputul anilor ‘80. La acea vreme era mai putin folosit decat UUCP (Unix to Unix CoPy), care era mai potrivit pentru transmiterea e-mail-urilor intre mașini ce nu erau conectate permanent. SMTP însa functionează mai bine când atât expeditorul cât și destinatarul mesajului sunt legați in rețea tot timpul.
Sendmail a fost unul din primele programe care au implemetat acest protocol. Din 2001 au aparut încă cel puțin 50 de programe care implementeaza SMTP( atat servere cat si clienti). Printre cele mai cunoscute servere SMTP amintim Postfix, qmail, Novell GroupWise, Exim, Novell NetMail si Microsoft Exchange Server.

Funcționare 
Comunicarea intre client și server se realizeaza prin texte ASCII. Inițial clientul stabilește conexiunea către server și așteaptă ca serverul să-i răspundă cu mesajul “220 Service Ready” . Dacă serverul e supraîncărcat, poate să întarzie cu trimirea acestui raspuns. Dupa primirea mesajului cu codul 220 , clientul trimite comanda HELO prin care isi va indica identitatea. In unele sisteme mai vechi se trimite comanda EHLO, comanda EHLO indicand faptul că expeditorul mesajului poate sa proceseze extensiile serviciului și dorește să primească o listă cu extensiile pe care le suportă serverul. Dacă clientul trimite EHLO iar serverul îi răspunde ca aceasta comandă nu e recunoscută, clientul va avea posibilitatea să revină și să trimită HELO.
 
Odată ce comunicarea a fost stabilită, clientul poate trimite unul sau mai multe mesaje, poate incheia conexiunea sau poate folosi unele servicii precum verificarea adreselor de e-mail. Serverul trebuie să raspundă după fiecare comandă indicand astfel dacă aceasta a fost acceptată, dacă se mai asteaptă comenzi sau dacă există erori în scrierea acestor comenzi. 

Pentru a trimite un mesaj se foloseste comanda MAIL prin care se specifica adresa clientului. Dacă aceasta comanda este corecta serverul va raspunde cu mesajul “250 OK”. Clientul trimite apoi o serie de comenzi RCPT prin care specifică destinatarii mesajului. Serverul va raspunde cu “550 No such user here”, sau “250 OK”, in functie de corectitudinea comenzii primite. După ce se specifică destinatarii, și serverul acceptă comenzile, se trimite comanda DATA, prin care serverul e anunțat că expeditorul va incepe sa scrie conținutul mesajului. Serverul poate răspunde cu mesajul "503 Command out of sequence" sau "554 No valid recipients" dacă nu a primit comenzile MAIL sau RCPT sau aceste comenzi nu au fost acceptate. Dacă serverul va raspunde cu mesajul “354 Start mail input”, clientul va putea introduce textul mesajului. Sfarșitul mesajului e marcat cu <CR><LF>.<CR><LF>.

Un server SMTP trebuie să cunoască cel putin urmatoarele comenzi : 
 HELO - identificare computer expeditor; 
 EHLO - identificare computer expeditor cu cerere de mod extins; 
 MAIL FROM - specificarea expeditorului; 
 RCPT TO - specificarea destinatarului ;
 DATA - conținutul mesajului;
 RSET – Reset; 
 QUIT - termină sesiunea; 
 HELP - ajutor pentru comenzi; 
 VRFY - verifica o adresa; 
 EXPN - expandează o adresa; 
 VERB - informatii detaliate.

Realizarea comunicației SMTP - exemplu 

Funcționarea protocolului SMTP poate fi testată simplu prin inițierea unei conexiuni TCP folosind un client de telnet.

 telnet mailhost.domeniu.ro 25

 Server: 220 mailhost.domeniu.ro ESMTP
 Client: HELO host.domeniu.ro
 Server: 250 Hello host.domeniu.ro
 Client: MAIL FROM: utilizator@domeniu.ro
 Server: 250 Ok
 Client: RCPT TO: utilizator@altdomeniu.ro
 Server: 250 Ok
 Client: DATA
 Server: 354 End data with <CR><LF>.<CR><LF>
 Client: Subject: test
 Client: un mesaj test
 Client: .
 Server: Mail queued for delivery. Vodafone România  
 Client: QUIT
 Server: 221 Closing connection. 2.

Vezi și 

 Corespondență în buclă (infinită)
 Autentificare 
 SMTP-AUTH (ESMTPA)
 SMTP extins (ESMTP)
 Ident
 specificație SPF (Sender Policy Framework)
 DNSSEC

Legături cr.yp.to 

 The Hash Convention for Mail System Status Codes (HCMSSC)
 Infrastructura mail a Internet-ului
 Manual SMTP

Alte legături 
  
 Diagramă SMTP  (PDF)
 Diagramă a distribuției e-mail-ului  (PDF, PNG  )
 SMTP în clientul Mozilla Thunderbird Include informații despre trecerea peste blocarea portului 25

Poștă electronică
Protocoale de nivel aplicație