Sunteți pe pagina 1din 8

MINISTERUL EDUCAŢIEI, CULTURII și CERCETĂRII al REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ a MOLDOVEI


FACULTATEA CALCULATOARE, INFORMATICĂ și MICROELECTRONICĂ
DEPARTAMENTUL INGINERIA SOFTWARE și AUTOMATICĂ

RAPORT la lucrarea de laborator Nr. 2


Disciplina: Programarea in retea
TEMA: SMTP | POP3 | IMAP

Elaborat: st. gr. TI-171 Iepuras Daniel


Verficat: conf. univ. Buldumac Oleg

Chișinău – 2020

Sarcina lucrarii
Să se creeze un program client de poștă electronică(MUA – Mail User Agent) apt să
trimită și să citească mesajele prin intermediul unui cont de poștă electronică.

Mersul lucrarii

Trimiterea mesajului
Pentru a trimite mesaje am folosit protocolul SMTP care permite aplicatiilor sa
transmita emailuri prin internet.
Pentru aceasta in primul rand avem nevoie de a mentiona adresa serverului SMTP si
sa obtinem proprietatile sistemului

Properties properties = new Properties();

properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");

Apoi este necesar de a instantia o sesiune de conectare la server


session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(myEmail, password);
}
});

iar in cele din urma apelam metoda care pregeteste mesajul

public Message prepareMessage() {

try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(myEmail));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
message.setSubject(subject);
message.setText(textBody);
return message;
}
catch (Exception e) {
Logger.getLogger(Gmail.class.getName()).log(Level.SEVERE, null, e);
}

return null;
}
si respectiv intr-un alt thread prin intermediul clasei Transport trimitem mesajul catre
destinatie.
final Message message = prepareMessage();
Thread sendMessage = new Thread(new Runnable() {
@Override
public void run() {
try {
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
});
sendMessage.start();
System.out.println("Message sent successfully");

Primirea mesajelor

Pentru a primi mesaje am folosit protocolul IMAP care permite accesul la mesaje din
foldere de e-mail de pe un server. 
Am creat un model pentru mesajele care trebuie primate
public class MessageModel implements Serializable {

private String Subject;


private String From;
private String Message;

public String getSubject() {


return Subject;
}

public void setSubject(String subject) {


Subject = subject;
}

public String getFrom() {


return From;
}

public void setFrom(String from) {


From = from;
}

public String getMessage() {


return Message;
}

public void setMessage(String message) {


Message = message;
}

Apoi am creat metoda ReciveMessages care in cele din urma ne va returna lista
noastra cu mesaje.
In aceasta metoda am declarant adresa serverului si provider-ul
String host = "imap.gmail.com";
String provider = "imaps";

cu ajutorul carora m-am conectat la server .


Session session = Session.getDefaultInstance(properties, null);
Store store = session.getStore(provider);
store.connect(host, email, password);

Pentru a gasi mesajele am folosit metoda getFolder a clasei Folder

Folder inbox = store.getFolder("INBOX");


inbox.open(Folder.READ_ONLY);

Dupa care am obtinut o listă de mesaje javamail ca un array de mesaje si prin


intermediul unui for am extras si am setat in modelul creat mai sus adresa de mail a
expediatorului , mesajul si subiectul;
Message[] messages = inbox.getMessages();

messageModels = new ArrayList<>();

for (int i = 0, n = messages.length; i < n; i++) {


Message message = messages[i];
messageModel = new MessageModel();
messageModel.setFrom(message.getFrom()[0].toString());
messageModel.setMessage(message.getContent().toString());
messageModel.setSubject(message.getSubject());

messageModels.add(messageModel);

Pentru trimiterea si primirea mesajlor am creat cate o clasa care extinde superclasa
AsyncTask pentru a rula toate procesele in background ruland un progress bar.
Codul sursa prezentat in Anexa A.

Întrebări la apărarea laboratorului:

Scopul protocolului SMTP


Scopul protocolul SMTP este de a permite aplicatiilor sa transmita emailuri in
Internet.

Cum se poate verifica dacă serverul SMTP funcționează utilizînd linia de


comandă?
Trebuie sa accesam Panoul de control > Programe > Activare sau dezactivarea
functiilor Windows. Apoi, facem check la “Telnet Client” si salvam modificarile. In
cele din urma deschidem cmd si introducem telnet smtp.servername.com 25;
 Care sunt comenzile SMTP ?

 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.

Pentru ce este nevoie de MUA, MSA, MTA și


MDA ?

MUA (Mail User Agent)


Aplicație client care permite primirea și trimiterea de e-mailuri. Poate fi o aplicație
desktop cum ar fi Microsoft Outlook / Thunderbird / ... sau bazată pe web, cum ar fi
Gmail / Hotmail.

MSA (Mail Submission Agent)


Un program de server care primește mail de la un MUA, verifică eventualele erori și
îl transferă (cu SMTP) către MTA găzduit pe același server.

MTA (Mail Transfer Agent)


O aplicație server care primește mail de la MSA sau de la un alt MTA. Acesta va găsi
(prin servere de nume și DNS) înregistrarea MX din zona DNS a domeniului
destinatar pentru a ști cum să transferați poșta. Se transferă apoi poșta (cu SMTP)
către un alt MTA (cunoscut sub numele de retransmisie SMTP) sau, dacă a fost atins
serverul destinatarului, către MDA.

MDA (Mail Delivery Agent)


Un program de server care primește mail de la MTA-ul serverului și îl stochează în
căsuța poștală. MDA este, de asemenea, cunoscut sub numele de LDA (Local
Delivery Agent).

Care este diferența dintre porturile 25, 465 și 587 ?


Porturile 465 și 587 sunt destinate clientului de e-mail pentru comunicarea pe serverul
de e-mail - trimiterea de e-mailuri utilizând protocolul SMTP.

Portul 465 este pentru SMTP


Criptarea SSL este pornită automat înainte de orice comunicare la nivel SMTP.

Portul 587 este destinat msa


Este aproape ca un port SMTP standard. MSA ar trebui să accepte e-mailul după
autentificare (de exemplu, după SMTP AUTH). Acesta ajută la oprirea spamului ieșit
atunci când administratorii de rețele DUL pot bloca conexiunile de ieșire la portul
SMTP (portul 25).

Care este diferența dintre porturile 110 și


995 ? 
Portul 995 este securizat POP3 (SSL – POP) iar 110 este pentru POP3 nesecurizat;

Care este diferența dintre porturile 143 și


993 ? 
993 este pentru IMAP4 prin SSL (IMAPS)

Cum funcționează protocolul


SMTP ? 

 Comunicarea între client / transmiţător şi server / receptor 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 trimiterea unui răspuns.
 După primirea mesajului cu codul 220 , clientul trimite comanda HELO prin care
îşi indică identitatea.
 Odată ce comunicarea a fost stabilită, clientul poate trimite unul sau mai multe
mesaje (prin comanda MAIL), poate încheia conexiunea sau poate folosi unele
servicii precum verificarea adreselor de e-mail.
 Serverul trebuie să răspundă după fiecare comandă indicând  dacă aceasta a fost
acceptată, dacă se mai aşteaptă comenzi sau dacă există erori în scrierea acestor
comenzi.
 Atunci când un mesaj este trimis către mai mulţi destinatari, protocolul SMTP
urmăreşte trimiterea datelor din mesaj o singură dată pentru toţi destinatarii care
aparţin aceluiaşi sistem destinaţie.

Scopul protocoalelor POP3 și IMAP


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

Diferența dintre POP3 și IMAP


Prima diferenta este ca cu IMAP mesajele primite si transmise sunt salvate pe server
si pot fi restaurate si vazute oricand iar cu POP3 mesajele primite vor putea fi vazute
doar partial de pe statia de lucru de pe care s-a efectuat operatia, iar cele trimise
deloc.In cazul distrugerii respectivei statii, mesajele sunt pierdute definitiv.
A doua deiferenta este ca IMAP este semnificativ mai rapid deoarece , mesajele vor fi
pastrate pe server.

A treia diferenta este ca IMAP nu ridica probleme la folosirea filtrelor iar cu POP3
mesajele mutate in alte foldere nu vor putea fi vizualizate.

Diferența dintre SSL și TLS


SSL este protocolul standard de securitate pentru stabilirea unei legături criptate
între un server web și un browser. TLS este un protocol care asigură securitatea
comunicării între aplicațiile client / server care comunică între ele prin intermediul
internetului.

Concluzie

Sistemul de poştă electronică este în acest moment o aplicaţie necesară pentru


utilizatorii de calculatoare (şi alte dispozitive ce permit accesul la e-mail) iar
protocolale implementate pentru manipularea mesajelor electronice oferă utilizatorilor
siguranţa că acestea ajung la destinaţie în timp util. Cele două protocoale de
comunicaţie descrise în această lucrare, SMTP – pentru transmiterea mesajelor de la
expeditor către calculatorul server (ce are rolul de oficiu poştal pentru destinatar) şi
IMAP – pentru preluarea mesajelor utilizatorilor de pe calculatoarele server care le
gestionează, au în acest moment cea mai răspândită utilizare printre sistemele de
calcul şi vor fi folosite şi în viitor apropiat datorită flexibilităţii si fiabilităţii oferite.
Comenzile prezentate pentru fiecare protocol sunt comenzile de bază care permit
testarea funcţionalităţii unui sistem de poştă electronic. De asemenea sunt şi
comenzile pe care fiecare client de e-mail le execută în mod transparent pentru
utilizator de fiecare dată când acesta trimite sau primeşte un e-mail.
Anexa A

https://github.com/danieliepp/SendAndReciveMail

Rezultatul final

Без
имени_1440p.mp4