Aplicaţie client de poştă electronică (partea 2)

Feb 28th, 2011 | By | Category: Educatie, Rețele de calculatoare

Pentru o înţelegere mai bună a ceea ce trebuie să realizeze un client de poştă electronică, vom studia iniţial protocoalele SMTP(Simple Mail Transfer Protocol) şi POP3(Post Office Protocol version 3). Natura acestor protocoale implică posibilitatea de accesare interactivă a serverelor respective utilizînd comenzile textuale.

Aplicaţia iniţială de testare şi studiere va fi Telnet-ul. Aplicaţia dată este un client de tip consolă şi poate fi lansată din consola sistemului de operare (Start->Run). Clientul Telnet va transmite întocmai comenzile textuale serverului de poştă electronică. De aceea în consola aplicaţiei date este necesar de scris fără erori. Altfel, va trebui să reveniţi şi să reintroduceţi comanda.

Configurarea serverului de poştă electronică

În partea întâi al acestui articol am decis să utilizăm Quick ‘n Easy Mail Server de Pablo van der Meer. Am scris că este robust (figura 1), nu necesită instalări sofisticate şi, cel mai important, este simplu în utilizare.

Figura 1 – Fişierele aplicaţiei Quick ‘n Easy Mail Server

Configurarea serverului ales nu necesită aptitudini deosebite de administrare şi se realizează în următorii paşii:

1. Selectăm opţiunea Show Configuration din panelul General (figura 2).

Figura 2 – Proprietăţile generale ale serverului Quick ‘n Easy Mail Server

2. Setăm porturile pentru serviciile POP3 şi SMTP (dacă nu le dorim pe cele implicite: respectiv 110 şi 25);

3. Pentru fiecare utilizator aplicaţia va crea un director propriu în Mailboxes, plasat direct în directorul rădăcină al discului C. Proprietatea Mail Folder va păstra calea spre directorul respectiv. Dacă nu dorim ca scrisorile noastre să fi stocate aici, nu ne rămâne decât să indicăm o altă cale.

4. Pentru că taburile AdvancedRelayForward Rules sunt mai puţin importante acum, vom selecta tabulDomains (Figura 3).

5. Este preferabil ca adresa noastră de testare să fie asemeni unei adrese reale, adică ceva gendumitru@ciorba.name, unde ciorba.name este numele domenului în care se află serverul de poştă electronică. Astfel operând cu un server de testare vom simula domenul la distanţă, adăugând numele acestuia în lista tabului Domains, la apăsarea butonului Add…

Figura 3 – Adăugarea noului domen

6. Ultimele setări sunt realizate pentru adăugarea noilor utilizatori, pentru aceasta selectăm opţiunea Show User Accounts din panelul General;

7. Din panelul User Account Tasks alegem Add User Account şi adăugăm datele utilizatorului (Figura 4). Severul nostru este unul de testare şi de aceea Vă recomand ca parola să nu fie prea lungă ;) .

Figura 4 – Adăugarea unui nou utilizator

8. Start! şi lansaţi serverul.

Protocolul SMTP

Sarcina de bază a protocolului SMTP (Simple Mail Transfer Protocol) este de a asigura transferul de mesaje electronice. Acum acest protocol este un standard de facto pentru transferul de mesaje electronice. Iar ultimele modificări, descrise inclusiv şi în RFC-ul 5321 din 2008, vin să întărească acest fapt. Desigur s-ar putea să mi se reproşeze că acest RFC descrie de acum un nou protocol, extins şi mai fiabil, protocolul ESMTP (Extended SMTP). Dar dacă să privim în esenţa acestuia din urmă, noi avem acelaşi protocol SMTP.

Schema generală de funcţionare a sistemului de poştă electronică a fost prezentată în figura 1 al primei părţi. Astfel, primul lucru ce realizează orice client, este conectarea cu serverul SMTP, utilizând o conexiune TCP la portul 25.

Prin conexiunea obţinută se va transmite mesajul. Ca apoi serverul SMTP să-şi realizeze cea dea doua funcţie importantă: forwarding-ul, adică retransmiterea scrisorii serverului destinatar. În cazul nostru, aplicaţia va determina că destinaţia este însuşi serverul local şi toate operaţiile de forwarding vor fi comprimate la acelaşi server de poştă electronică.

Comenzile protocolului SMTP, transmise de client, vor indica serverului ce operaţii trebuie să execute. Fiecare comandă SMTP constă din cuvântul cheie de patru litere ce descrie operaţia, şi parametrii săi, separaţi prin spaţiu (SP). La fel, protocolul prevede ca la sfârşitul fiecărei comenzi să fie plasate simbolurile CRLF (Carriage Return, Line Feed), care în Telnet de obicei sunt generate la apăsarea tastei Enter:

cmnd<SP>parametru<CRLF>

Recomandarea RFC 822 (mai nou RFC 2822) ne descrie formatul MIME al mesajului de poştă electronică, compus din date pentru „plic”, antet şi conţinut. Datele pentru plic sunt utilizate doar de aplicaţiile de transfer, iar cele din antet pot fi prezentate şi utilizatorului. Antetul este compus din cîmpuri ce descriu destinatarul, expeditorul, data compunerii mesajului, subiectul scrisorii, etc. Adică acest antet nu este altceva, decît descrierea scrisorii noastre transmise serverului.

Starea serverului SMTP este determinată de operaţia cerută de utilizator şi este descrisă prin coduri de stare: numere de la 100 la 999, urmate de o descriere succintă.

Utilizând clientul Telnet după o cerere de conexiune de forma

Telnet> o 127.0.0.1 25

o sesiune simplă de comunicare cu un server SMTP poate consta în mai multe faze de transmitere de la client (C) şi primire de la server (S) a următoarelor şiruri:

Faza 1. Iniţierea dialogului

S: 220 Quick 'n Easy Mail Server
C: HELO dc
S: 250 OK

Faza 2. Indicarea datelor necesare „plicului”: expeditorul

C: MAIL FROM: DeLaMine <delamine@example.org>
S: 250 Ok

… şi destinatarul

C: RCPT TO: dumitru <dumitru@ciorba.name>
S: 250 Ok

Faza 3. Transmiterea measajuui

Iniţierea

C: DATA
S: 354 End with <CRLF>.<CRLF>

Scrierea antetului, care va conţine date prezentate utilizatorului prin intermediul clientului său

C: From: "DeLaMine" <delamine@example.org>
C: To: dumitru <dumitru@ciorba.name>
C: Subject: Mesaj de testare

Scrierea mesajului propriu-zis:

C:
C: Un mesaj test
C: .
S: 250 OK: Queued as: 42DD7C24A2D74B8983AF8432DF8EB452

Faza 4. Finalizarea sesiunii de lucru

C: QUIT
S: 221 Bye

Faza 5. Serverul va închide conexiunea

Protocolul SMTP mai prevede şi alte comenzi de interacţiune, pe care nu le-am prezentat aici. Le-am considerat nesemnificative pentru a înţelege cum va lucra clientul nostru simplu SMTP, dar pe care Vă recomand să le studiaţi.

Protocolul POP3

Conform schemei generale de lucru a sistemului de poştă electronică, mesajele transmise se vor păstra în cutiile poştale ale utilizatorului. Cutiile poştale în diverse sisteme sunt realizate diferit: fie aplicaţia va utiliza un careva sistem de gestiune a bazelor de date, fie va utiliza un sistem propriu de stocare bazat pe directorii şi fişiere. Oricum accesarea cutiilor se realizează prin protocoale standarde Internet, din care cele mai relevante sunt POP3 şi IMAP (Internet Message Access Protocol).

Protocolul IMAP este un protocol mai nou şi mai sofisticat, care prevede funcţionalităţi evoluate pentru serverele de poştă electronică. Dar simplitatea şi popularitatea protocolului POP3 m-a determinat să optez anume pentru el.

Interacţiunea clientului şi serverului POP3 este determinată de trei faze: autentificare, tranzacţie şi reînnoire. Faza de autentificare este prima după stabilirea conexiunii TCP la portul 110. Dacă la această fază identificarea utilizatorului a avut loc cu succes urmează faza de tranzacţie. În această fază utilizatorul va putea citi scrisorile din cutia poştală, va putea şterge scrisorile, sau va putea cere careva informaţie de stare a cutiei poştale. La închiderea sesiunii de lucru se va trece în faza de reînnoire, în care scrisorile utilizatorului marcate ca şterse, vor fi şterse, iar cele noi venite vor fi transferate în cutia poştală. Este important de menţionat că accesul la cutia poştală este realizat exclusiv.

Mai jos este prezentată lista succintă a comenzilor protocolului POP3:

  1. USER – transmite serverului numele utilizatorului
  2. PASS – transmite serverului parola cutiei poştale. Atenţie! Doar utilizînd clienţi şi servere ce susţin TLS (Transport Layer Security), SSL (Secure Sockets Layer) sau alte protocoale de securizare analogice se poate garanta transmiterea sigură a parolei.
  3. STAT – cere serverului numărul de scrisori şi volumul acestora în octeţi
  4. LIST – cere serverului lista mesajelor din cutia poştală cu indicarea volumului ocupat de acestea (poate fi cerut volumul unui mesaj specificat)
  5. RETR – cere mesajul cu identificatorul specificat
  6. DELE – marchează mesajul specificat ca „pentru ştergere”. Atenţie! Mesajul va fi şters doar în faza de reînnoire, adică la închiderea sesiunii de lucru
  7. RSET – anularea marcării mesajului „pentru ştergere”.
  8. QUIT – Încheierea conexiunii TCP

Utilizând clientul Telnet după o cerere de conexiune de forma

Telnet> o 127.0.0.1 110

o sesiune simplă de comunicare cu un server POP3 poate consta în transmiterea de la client (C) şi primire de la server (S) a următoarelor şiruri:

S: +OK Quick 'n Easy Mail Server ready
C: user dumitru
S: +OK
C: pass pa
S: +OK authentication successful
C: stat
S: +OK 3 957
C: list
S: +OK scan listing follows
S: 1 301
S: 2 281
S: 3 349
S: .
C: retr 2
S: +OK 281 octets
S: from: exemple@mail.md
S: to: dumitru@ciorba.name
S: subject: Mesaj de testare
S:
S: Un mesaj test
S: .
C: dele 2
S: +OK message 2 marked as deleted
C: quit
S: +OK session ended

Simplitatea protocolului POP3, completat de protocoale gen TLS sau SSL, şi complexitatea adiţională impusă serverelor de către protocolul IMAP, determină utilizarea în sistemele de poştă electronică, şi în continuare, a protocolului POP3, în pofida tuturor neajunsurilor sale.