POP3 sau Protocolul Post Office – Versiunea 3 este, alături de IMAP, unul din protocoalele utilizate de un calculator gazdă pentru recepționarea poștei electronice (e-mail).

Cu siguranță, tipurile nodurilor mai mici în Internet deseori nu sunt practice să întrețină un sistem de transport al mesajului (MTS). De exemplu, o stație de lucru este posibil să nu dispună de suficiente resurse (spațiu pe disc) cu scopul de a permite un server SMTP RFC 821 și asociază un sistem local de trimitere mail pentru a fi ținut rezident și să ruleze continuu. Similar, poate deveni costisitor (sau imposibil) să menții un computer interconectat la un IP-style rețea pentru o perioadă mai mare de timp (nodul duce lipsă de resursa cunoscută ca “conectivitate”). În ciuda acestora, deseori este foarte util să deservești poșta acestor noduri mai mici și deseori sprijină un utilizator agent (UA) să ajute la manipularea poștei electronice. Pentru a rezolva această problemă, un nod care întreține o entitate MTS oferă un serviciu maildrop pentru aceste noduri înzestrate mai puțin. POP3 a intenționat să permită unei stații de lucru acces dinamic la maildrop de pe un server gazdă într-un mod util. De obicei, aceasta înseamnă că protocolul POP3 este utilizat pentru a permite unei stații de lucru să primească poșta pe care serverul o stochează. POP3 nu a intenționat să furnizeze operații extinse de manipulare a poștei de pe server; normal poșta este descărcată de pe server și apoi ștearsă. Un protocol mai avansat (și mai complex), IMAP4, a fost discutat în RFC 1730. În continuare, termenul “client gazdă” (client host) se referă la o gazdă ce utilizează serviciul POP3, cât timp termenul “server gazdă” (server host) se referă la o gazdă care oferă serviciul POP3.

Operația de bază Inițial, serverul pornește serviciul POP3 ascultând TCP portul 110. Când clientul dorește să utilizeze serviciul, este stabilită o conexiune TCP cu serverul. Când conexiunea s-a realizat, serverul POP3 trimite un salut. Clientul și serverul POP3 schimbă comenzi și răspunsuri până când conexiunea este închisă sau abandonată. Comenzile în POP3 sunt formate din caractere (modul insenzitiv), posibil să fie urmate de unul sau mai multe argumente. Toate comenzile sunt termintate prin perechea CRLF (\r\n). Șirul de caractere ce formează comanda și argumentele sunt caractere ASCII. Comenzile și argumentele sunt separate printr-un singur caracter SPACE. Comenzile au lungimea de 3 sau 4 caractere. Fiecare argument poate avea lungimea până la maxim 40 de caractere. Răspunsurile în POP3 constau dintr-un indicator de status și o comandă, posibil urmată de informații adiționale. Toate răspunsurile sunt terminate prin perechea CRLF. Răspunsurile pot fi de lungime de până la 512 caractere, incluzând și CRLF. În mod curent, sunt doi indicatori de status: pozitv (“+OK”) și negativ (“-ERR”). Serverul trebuie să trimită “+OK” și “-ERR” scrise cu litere mari (upper case). Răspunsurile la comenzi sunt multi-linie. În aceste cazuri, care sunt clar indicate mai jos, după trimiterea primei linii a răspunsului și a perechii CRLF , orice linie adițională este trimisă și fiecare linie se termină cu perechea CRLF. Când toate liniile răspunsului au fost trimise, este trimisă o linie finală, care formează un octet terminal (cod zecimal 046, “.”) și perechea CRLF. Dacă orice linie a răspunsului multi-linie începe cu acest octet terminal, linia este completată cu octeți terminali. Deci, un răspuns multi-linie se termină cu 5 octeți “CRLF.CRLF”. Când examinează un răspuns multi-linie, clientul verifică să vadă dacă linia începe cu octetul terminal. Dacă da și ceilalți octeți sunt CRLF, primul octet al liniei (octetul terminal) este scos. Dacă da și dacă CRLF urmează imediat caracterul terminal, atunci răspunsul de la serverul POP3 este terminat și linia ce conține “.CRLF” nu este considerată parte a răspunsului multi-linie. O sesiune POP3 evoluează direct printr-un număr de stări în timpul vieții ei. O dată ce conexiunea TCP a fost deschisă și severul POP3 a trimis salutul, sesiunea întră în stare de AUTHORIZATION. În această stare, clientul trebuie să se identifice serverului POP3. O dată ce clientul a făcut acest lucru cu succes, serverul își formează resursele asociate în funcție de maildrop-ul clientului, și sesiunea întră în starea de TRANSACTION. În această stare, clientul cere acțiuni serverului POP3. Când clientul a emis comanda QUIT, sesiunea întră în starea de UPDATE. În această stare, serverul POP3 eliberează orice resursă dobândită în timpul stării de TRANSACTION și spune “goodbye”. Apoi conexiunea TCP este închisă. Serverul trebuie să răspundă la o nerecunoaștere, neimplementare sau o comandă invalidă printr-un indicator de stare negativ. Serverul trebuie să răspundă unei comenzi cerute când sesiunea este într-o stare incorectă, printr-un indicator de stare negativ. Nu există o metodă generală pentru un client care să distingă un server ce nu are implementată o comandă opțională, de un server care nu dorește sau nu poate să proceseze o comandă. Un server POP3 poate avea timp de inactivitate (autologout). Ca timp trebuie să fie cel puțin 10 minute. Primirea oricărei comenzi de la client în timpul acelui interval, este de ajuns să reseteze “autologout timer”. Când timpul expiră, sesiunea nu poate intra în starea de UPDATE – serverul ar trebui să închidă conexiunea TCP fără a șterge nici un mesaj sau fără a trimite vreun răspuns clientului.

Starea AUTHORIZATION

O dată ce conexiunea TCP a fost deschisă de un client POP3, serverul POP3 emite o linie de salut. Acesta poate fi orice răspuns pozitiv. Un exemplu poate fi: S: +OK POP3 server ready Sesiunea POP3 este acum în starea de AUTHORIZATION. Clientul trebuie acum să se identifice și să se autentifice serverului POP3. Două mecanisme posibile pentru aceasta sunt descrise în acest document, combinația comenzilor USER și PASS și comanda APOP. Ambele mecanisme sunt descrise în acest document. Mecanisme suplimenatare de autentificare sunt descrise în RFC 1734. Cât timp există mai multe mecansime de autentificare acestea sunt cerute de toate serverele POP3, un server POP3 trebuie să suporte, bineînțeles, cel puțin unul din aceste mecanisme. O dată ce serverul POP3 a fost determinat complet, utilizarea oricărei comenzi de autentificare a clientului, ar trebui să-i dea acces la maildrop-ul potrivit; serverul POP3 dobândește acces exclusiv pentru blocarea maildrop-ului, fiind necesară prevenirea modificării și ștergerii mesajelor înainte ca sesiunea să intre în starea UPDATE. Dacă blocajul este dobândit cu succes, serverul POP3 răspunde cu un indicator de stare pozitiv. Sesiunea POP3 intră acum în starea TRANSACTION, cu nici un mesaj marcat pentru ștergere. Dacă maildrop-ul nu a putut fi deschis din diferite motive (ex. blocajul nu a putut fi realizat, clientul nu are acces la maildrop, sau maildrop-ul nu poate fi citit), serverul POP3 răspunde cu un indicator de stare negativ. (Dacă s-a realizat blocajul și serverul POP3 intenționează să răspundă cu un indicator de stare negativ, atunci el trebuie să se deblocheze înainte de respingerea comenzii). După returnarea negativă a indicatorului de stare, serverul poate închide conexiunea. Dacă serverul nu închide conexiunea, clientul poate emite fie o nouă comandă de autenficare și să pornească din nou, fie poate emite comanda QUIT. După ce serverul POP3 a deschis maildrop-ul, este asociat un număr fiecărui mesaj și se notează mărimea fiecărui mesaj în octeți. Primului mesaj din maildrop îi este asociat numărul de mesaj “1”, celui de-al doilea “2” și așa mai departe, astfel încât celui de-al n-lea mesaj îi este asociat numărul de mesaj “n”. În POP3 comenzile și răspunsurile, toate numerele de mesaje și mărimea mesajelor sunt exprimate în baza 10 (decimal). Iată un rezumat al comenzii QUIT în starea AUTHORIZATION: QUIT

Argumente: nici unul

Restricții: nici una

Răspunsuri posibile: +OK

Exemple: C: QUIT S: +OK dewey POP3 server signing off

Starea TRANSACTION O dată ce clientul s-a identificat cu succes serverului POP3 și serverul POP3 a fost blocat și a deschis maildrop-ul corespunzător, sesiunea POP3 este acum în starea de TRANSACTION. Clientul poate emite în acest moment oricare dintre următoarele comenzi POP3, în mod repetat. Eventual, clientul emite comanda QUIT și sesiunea POP3 intră în starea de UPDATE. STAT STAT

Argumente: nici unul

Restricții: Poate fi dată doar în starea TRANSACTION

Comentariu: Serverul POP3 emite un răspuns pozitiv într-o linie care conține informații pentru maildrop. Această linie este numită “drop listing” pentru acea casuță poștală.Cu scopul de a simplifica analiza, toate serverele POP3 au nevoie să utilizeze un format sigur pentru “drop listing”-s. Răspunsul pozitiv constă din “+OK” urmat de un singur spațiu, numărul de mesaje din maildrop, un singur spațiu, mărimea maildrop-ului în octeți. Acest memo nu determină nici o condiție ce urmează după mărimea maildrop-ului. Implementările minimale ar trebui doar să sfârșească linia de răspuns cu lități opționale ce permit clientului analiza mesajelor din maildrop sunt discutate mai târziu. De observat că acele mesaje marcate pentru ștergere nu sunt numărate în total.

Răspunsuri posibile: +OK nn mm

Exemple: C: STAT S: +OK 2 320

LIST LIST [msg]

Argumente: Un număr de mesaj (opțional), care, dacă este prezent, nu poate să se refere la un mesaj marcat pentru ștergere.

Restricții: Pot fi date doar în starea TRANSACTION

Comentariu: Dacă a fost dat un argument, serverul POP3 emite un răspuns pozitiv cu o linie ce conține informații pentru acel mesaj. Această linie este numită “scan listing” pentru mesajul respectiv. Dacă nici un argument nu a fost dat, serverul POP3 emite un răspuns pozitiv, atunci răspunsul dat este multi-linie. După +OK inițial, pentru fiecare mesaj din maildrop, serverul POP3 răspunde cu o linie ce conține informații despre acel mesaj. Această linie mai este numită “scan listing” pentru acel mesaj. Dacă nu sunt mesaje în maildrop, atunci serverul POP3 răspunde fără “scan listings” – emite un răspuns pozitiv urmat de o linie conținând octetul terminal și perechea CRLF. În scopul simplificării analizei, toate serverele POP3 sunt condiționate să utilizeze un format sigur pentru “scan listings”. Un “scan listing” conține numărul de mesaj al mesajului, urmat de un singur spațiu și mărimea exactă a mesajului în octeți. Metode pentru calcularea exactă a mărimii mesajului sunt descrise în secțiunea Formatul Mesajului. Acest memo nu determină nici o condiție referitoare la ce urmează după mărimea mesajului în “scan listig”. Implementările minimale ar trebui să termine acea linie de răspuns cu perechea CRLF. Implementările mai avansate pot include și alte informații, în urma analizei mesajului. Notă: Acest memo descurajează puternic implementările ce furnizează informații suplimentare în “scan listing”. Alte facilitați opționale ce permit clientului să analizeze mesajele din maildrop sunt discutate mai târziu. De observat că mesajele marcate pentru ștergere nu sunt listate.

Răspunsuri posibile: +OK scan listing follows -ERR no such message

Exemple: C: LIST S: +OK 2 messages (320 octets) S: 1 120 S: 2 200 S: . … C: LIST 2 S: +OK 2 200 … C: LIST 3 S: -ERR no such message, only 2 messages În maildrop

RETR RETR msg

Argumente: Un număr de mesaj (obligatoriu) ce nu se referă la un mesaj marcat pentru ștergere.

Restricții: Poate fi dată doar în faza de TRANSACTION

Comentariu: Dacă serverul POP3 emite un răspuns pozitiv, atunci răspunsul dat este multi-linie. După +OK ințial, serverul POP3 trimite mesajul corespunzator numărului de mesaj, fiind atent la completarea caracterului terminal.

Răspunsuri posibile: +OK urmat de mesaj -ERR no such mesaj

Exemple: C: RETR 1 S: +OK 120 octets S: <the POP3 server sends the entire message here> S: .

DELE DELE msg

Argumente: Un număr de mesaj (obligatoriu) care nu poate să se refere la un mesaj marcat pentru ștergere.