Sunteți pe pagina 1din 9

Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei


Catedra Automatică și Tehnologii Informaționale

RAPORT

Lucrare de laborator Nr.4


la disciplina Programarea în Rețea
Tema: Protocoalele poștei electronice

A efectuat: st. grupei SI-131, Gheorghisenco L.

A verificat: Antohi Ionel

Chișinău 2016
Scopul lucrării
Proiectarea și programare aplicație client. Comenzile protocolului SMTP. Protocolul
POP3. Comenzile POP3 de autorizare, tranzacție și actualizare. 
Generalizare
Mandatată în câmpul comunicării încă de la începutul anilor 1970, poșta electronică a evoluat
de la un mijloc de interacțiune folosit de cei pasionați de lumea fascinantă a computerelor până la cel
mai frecvent mod de relaționare pe plat atât personal, cât și profesional.
Cu toate acestea, serviciul de e-mail a primit denumirea care l-a consacrat pe întreg
mapamondul la mai bine de un deceniu distanță. Și anume Ray Tomilson, autorul primului e-mail a
scris prima filă a istoricului serviciului de mesagerie.

Căi de comunicare
SMTP – Simple Mail Transfer Protocol, un standard internet pentru transmiterea mail-urilor,
care a luat viață în 1982 și a fost updatat în 2008 cu denumirea Extended SMTP.
Folosește în mod implicit portul 25 TCP. Iar pentru conexiunile securizate SSL, portul 465.
La fel determină adresa unui server pe baza înregistrării MX (Mail eXchange) din configurația
serverului DNS. De asemenea, anume acesta specifică modul în care mesajele sunt transmise între
procese SMTP aflate pe sisteme diferite, totodată oferind posibilitatea de transportare directă, fără a
memora însuși conținutul mesajului.
Comunicarea între client și server se realizează 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ă întârzie cu primirea acestui răspuns. După recepționarea mesajului
cu codul 220, clientul trimite comanda HELO prin care își va indica identitatea. In unele sisteme mai
vechi se trimite comanda EHLO, comanda EHLO indicând 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
încheia conexiunea sau poate folosi unele servicii precum verificarea adreselor de e-mail. Serverul
trebuie să răspundă după fiecare comandă, indicând astfel dacă aceasta a fost acceptată, dacă se mai
așteaptă comenzi sau dacă există erori în scrierea acestor comenzi.[ CITATION Sta \l 1048 ]
Un server SMTP trebuie să cunoască cel puțin următoarele 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 - informații detaliate.

Procesarea unui email are loc în felul ilustrat mai jos. Săgețile albastre pot fi implementate
utilizând variații ale SMTP. (vezi fig.1)

Fig.1 – Model de procesare.[ CITATION Tec16 \l 1048 ]

Cum a fost specificat anterior, implicit comunicarea are loc prin portul 25, dar
mai avem și:
- 587 (Submision) formalizat în RFC 6409;
- 465 depreciat în RFC 2487, dar utilizat de provide-ri;
- 2525 și multe altele pot fi utilizate în mod individual.
POP3 – 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 accesul unui server SMTP RFC821 ș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ă drept “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. 

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

 USER – transmite serverului numele utilizatorului;


 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;
 STAT – cere serverului numărul de scrisori şi volumul acestora în octeţi;
 LIST – cere serverului lista mesajelor din cutia poştală cu indicarea volumului ocupat de
acestea (poate fi cerut volumul unui mesaj specificat);
 RETR – cere mesajul cu identificatorul specificat;
 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;
 RSET – anularea marcării mesajului „pentru ştergere”;
 QUIT – Încheierea conexiunii TCP.
Astfel, putem observa relațiile dintre serverul SMTP și POP3, la fel căile de parcurgere a
mesajelor și afișarea acestora ulterioară pe E-mail client-ul specificat. (vezi fig.3)

Fig.3 – Interacțiunea și salturile de parcurgere a mesajului.[ CITATION MSD \l


1048 ]
Soluții
Conectarea la serverul SMTP și transmiterea mesajului introdus de utilizator în cadrul
interfeței aplicației:

private void button1_Click(object sender, EventArgs e)


{
var client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("1994florin@gmail.com",
"2*******\n");
var mm = new MailMessage(delaMail.Text, catreMail.Text, subjectBox.Text,
msgBox.Text);
mm.BodyEncoding = Encoding.UTF8;
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
try
{
client.Send(mm); // transmitere la serverul SMTP
}
catch (Exception)
{
throw;
}
finally
{
client.Dispose(); //inchidem fluxul
}
}
private void btnCiteste_Click(object sender, EventArgs e)
{
richTextBox1.ResetText();
var str = string.Empty;
var strTemp = string.Empty;
var data = Encoding.ASCII.GetBytes("RETR " + Convert.ToInt32(mesajIDBox.Text)
+ "\r\n");

stream.Write(data, 0, data.Length); //transmitem la server


reader = new StreamReader(stream);
while ((strTemp = reader.ReadLine()) != null)
{
if (strTemp == "." || strTemp.IndexOf("-ERR") != -1)
{
break;
}
str += strTemp;
}

var messBody = new BodyMeesage();


richTextBox1.AppendText("From: " + messBody.GetFrom(str));
richTextBox1.AppendText("\n\n"+messBody.GetBody(str));
}

private void btnDelete_Click(object sender, EventArgs e)


{
var enc = new ASCIIEncoding();

var data = enc.GetBytes("DELE " + Convert.ToInt32(mesajIDBox.Text) + "\r\n");


stream.Write(data, 0, data.Length);
reader = new StreamReader(stream);

Pentru a transmite primul email, e nevoie să populăm câmpurile cu datele receptorului și


transmițătorului, la fel subiectul acestuia și mesajul propriu-zis. (vezi fig.4)

Fig. 4 – Realizarea sarcinii, transmiterea mesajului prin SMTP.


Pentru recepționarea datelor transmise utilizăm POP3 și ne conectăm la account-ul dat. (fig.5)
Fig.5 – Obținerea corpului mesajului la nivel jos prin POP3.
Concluzie

Efectuând acest mic studiu, putem spune că anume protocoalele SMTP și POP3 au
revoluționat comunicarea în întreaga lume, iar Ray Tomilson, creatorul primului email va rămâne în
istorie datorită unui mic simbol ‘@’, al conexiunii sentimentelor și emoțiilor prin simple caractere.
La fel putem menționa că această comunicare se realizează prin texte ASCII. Inițial clientul va
stabili conexiunea către server și va așteapta de la el un răspuns specific “220 Service Ready”, care ne
anunță că acesta e gata de a întreține legătura curentă. De asemenea, se poate lua în calcul și faptul că
SMTP va funcționa mai rapid atunci când atât expeditorul cât și destinatarul mesajului sunt legați în
aceeași rețea.
Odată cu stabilirea comunicării, clientul poate trimite unul sau mai multe mesaje, poate
încheia conexiunea sau folosi unele servicii precum verificarea adreselor de e-mail. Serverul va
răspunde după fiecare comandă, indicând dacă e acceptată.
Bibliografie
1. Lee, Edward A. Coding Quotes. http://algorithm.com.au/. [Online] March Saturday, 2016.
http://algorithm.com.au/code/quotes/.
2. Dumitru, Ciorbă. Note de laborator. Moodle. [Online] March 9, 2016.
http://moodle.ati.utm.md/mod/book/view.php?id=2541.
3. Inc, Stack Exange. When should you use multithreading. www.stackoverflow.com. [Online]
March 13, 2016. http://stackoverflow.com/questions/7419619/when-should-you-use-pop3
4. MSDN.Protocol Data Structures. www.blogs.msdn.com. [Online] March 12, 2016.
http://blogs.msdn.com/b/pfxteam/archive/2008/06/18/8620615.aspx.
5. Oracle. Essential Classes. www.docs.oracle.com. [Online] March 9, 2016.
http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html.
6. Florin, Rusu. Laborator4. www.gitlab.ati.utm.md. [Online] March 15, 2016.
https://gitlab.ati.utm.md/rusu.florin/laborator1/tree/master/Lab4
7. Foundation, .NET. Tidy.net Portable. www.nuget.org. [Online] March 21, 2016.
https://www.nuget.org/packages/TidyNetPortable.
8. Dumitru, Ciorba. Aplicație client de poștă. ciorba.name. [Online] April 8, 2016.
http://ciorba.name/?p=292.
9. TechTarget. What is POP3. searchexchange.techtarget.com. [Online] April 9, 2016.
http://searchexchange.techtarget.com/definition/POP3.