Introducere .................................................................................................................................................. 4 Motivaia dezvoltrii acestei lucrri .......................................................................................................... 4 Structura lucrrii ....................................................................................................................................... 4 Capitolul 1: Cercetare n domeniu ............................................................................................................ 6 1.1 Cteva concepte de baz despre interaciunea om-calculator ....................................................... 6 1.1.1 Utilizatorii nceptori i utilizatorii experimentai ................................................................ 6 1.1.2 Adaptabilitate i adaptarea utilizatorului .............................................................................. 7 1.2 Sistemele de pot electronic i proiectarea ...................................................................................... 7 1.2.1 Funcionalitatea potei electronice ............................................................................................... 7 1.2.2 Istoricul potei electronice ........................................................................................................... 9 1.2.3 Proiectarea interfeei potei electronice .................................................................................... 10 1.2 Pota electronic i utilizatorii de calculatoare ........................................................................... 12 1.2.1 Adaptarea interfeei la utilizator.......................................................................................... 12 Capitolul 2: IMAP i alte tehnologii asociate ......................................................................................... 14 2.1 Concepte de baz .............................................................................................................................. 14 2.2 IMAP atribute specifice ................................................................................................................. 15 2.3 MIME ................................................................................................................................................ 16 2.3.1 Mesajul ca un container ............................................................................................................. 17 2.3.2 Caractere internaionale n mesaje ............................................................................................. 18 2.3.3 Susinerea MIME n IMAP ........................................................................................................ 18 2.4 Flow-ul protocolului IMAP .............................................................................................................. 19 2.4.1 Comenzi i rspunsuri ................................................................................................................ 21 2.4.2 Strile serverului IMAP ............................................................................................................. 24 2.4.3 Sincronizarea mailbox................................................................................................................ 25 2.4.4 Schimbri n mailbox ................................................................................................................. 26 2.4.5 Preluarea i manipularea mesajelor ............................................................................................ 27 2.4.6 Interogri asupra altor mailbox-uri ............................................................................................ 27 2.4.7 Cutare, sortate i threading ....................................................................................................... 28 3
2.4.8 Manipularea mailbox ................................................................................................................. 28 2.4.9 Terminarea sesiunii .................................................................................................................... 29 2.4.10 Extensii IMAP ......................................................................................................................... 29 2.5 Alte protocoale de accesare ale mesajelor stocate pe server ............................................................. 29 2.5.1 POP3 .......................................................................................................................................... 29 2.5.2 Webmail ..................................................................................................................................... 30 2.5.3 IMAP, POP3 sau Webmail ........................................................................................................ 31 Capitolul 3: Proiectarea aplicaiei Smart E-mail Client ................................................................... 33 3.1 Tehnologii utilizate ........................................................................................................................... 33 3.1.1 Arhitecturi i abloane de proiectare .......................................................................................... 33 3.1.1 Model-View-Controller ............................................................................................................. 33 3.1.2 Struts 2 ....................................................................................................................................... 34 3.1.3 Hibernate i BD .......................................................................................................................... 38 3.1.4 JavaMail API ............................................................................................................................. 50 Concluzii .................................................................................................................................................... 54 Referine i Bibliografie ............................................................................................................................ 55 Anex .......................................................................................................................................................... 57
4
Introducere
Motivaia dezvoltrii acestei lucrri
Deoarece pota electronic este des folosit de ctre majoritatea utilizatorilor de calculator i joac un rol important n schimbul de informaii, am dorit s fac o lucrare despre sistemul e-mail care poate fi folosit pe diferite platforme, i de a arta importana acesteia n viaa oricrei persoane care intr n contact cu tehnologia. Pe lng interfaa tot mai soficticat pe care o are un astfel de sistem, tehnologiile care stau la baz sunt cruciale n funcionarea ct mai eficient a potei electronice. Aceasta ofer o mai mare securitate i confidenialitate dect scrisorile obinuite cu care oamenii erau obinuii nainte de apariia unei astfel de aplicaii bazat pe Internet. Un sistem e-mail multiplatform ofer utilizatorilor o mai mare mobilitate n a trimite i primi mesaje, dar i de a gestiona mesajele deja primite.
Structura lucrrii
Capitolul 1 reprezint o cercetare n domeniu pentru a afla cum este influenat viaa utilizatorilor de pota electronic. Sunt prezentate cteva aspecte referitoare la utilizatorii nceptori, dar i la cei experimentai, care sunt diferenele majore dintre acetia, cum se adapteaz unui sistem e-mail i cum un sistem e-mail se adapteaz n funcie de tipul de utilizator. Mai departe, capitolul 1 prezint un istoric pe scurt referitor la modul n care a evoluat sistemul e-mail, dar i care sunt funcionalitile unui astfel de sistem i cum ar trebui s fie proiectat astfel nct s satisfac nevoile utilizatorilor.
Capitolul 2 prezint modul de funcionare a unor protocoale care stau la baza unui sistem e- mail bine definit. Fr aceste protocoale i standarde, nu poate fi dezvoltat o aplicaie web bazat pe comunicarea ntre clieni prin intermediul potei electronice. Capitolul 2 pune n lumin, de asemenea, care sunt diferenele majore dintre aceste protocoale i n ce contexte sunt utilizate, care este scopul i funciile lor majore n funcionarea potei electronice.
5
Capitolul 3 prezint modul n care aplicaia Smart E-mail Client este proiectat i care sunt tehnologiile importante care stau la baza dezvoltrii acesteia. Tehnologiile, abloanele de lucru i instrumentele utilizate sunt descrise n detaliu i exemplificate pe baza aplicaiei dezvoltate. Acestea sunt: Model-View-Controller, Struts 2, Hibernate, JavaMail.
ncheiera reprezint cteva scurte concluzii la care am ajuns n urma parcurgerii i finalizrii studiului legat de aceast tem.
6
Capitolul 1: Cercetare n domeniu
Exist o larg cercetare cu privire la e-mail (pota electronic), iar prile descrise aici acoper numai cteva aspecte ale acestuia. Capitolul este divizat n mai multe seciuni care vor cuprinde trsturi de baz legate despre interaciunea om-calculator, funcionaliti de baz ale potei electronice i de asemenea vor fi date i cteva exemple de sisteme. 1.1 Cteva concepte de baz despre interaciunea om-calculator
1.1.1 Utilizatorii nceptori i utilizatorii experimentai
Exist, probabil, attea moduri de a utiliza pota electronic ci utilizatori ale acesteia exist, i nu ar fi corespunztor s se vorbeasc despre utilizatorii potei electronice ca i cum ar fi un grup omogen. Aadar, vor fi definite dou grupuri: nceptori i experimentai. Cele dou categorii sunt doua extreme pe o scar continu unde utilizatorii care au n timp trec de la nceptori la experimentai. Utilizatorii nceptori sunt cei care abia au nceput s nvee s utilizeze pota electronic i nu cunosc dect puine comenzi, cele de baz. n schimb, cei experimentai cunosc foarte bine comenzile i nu au nicio problem de nelegere. Cu timpul, fiecare poate s devin experimentat, dar numai aceeia care i dezvolt cunotine de nelegere ale task-urilor pot deveni experi.
Fig. 1.1.1.1 Fig. 1.1.1.1 nceptorii i experimentaii sunt dou valori extreme pe scara timpului n timp ce naivii i experii sunt dou extreme pe scara cunotinelor. Colurile rotunde reprezint imposibilitatea de a deveni un expert fr experien i de a rmne utilizator naiv cu mult experien. 7
1.1.2 Adaptabilitate i adaptarea utilizatorului
Utilizatorul i sistemul pot s se adapteze unul celuilalt. Exist trei termeni legai de adaptare care trebuie definii: adaptabilitatea pasiv, adaptarea pro-activ i adaptarea utilizatorului. Adaptabilitatea pasiv este atunci cnd programul este tolerabil-utilizator. Un exemplu ar fi atunci cnd utilizatorul decide s utilizeze o interfa n englez sau n romn n aplicaia sa. Adaptarea pro-activ este atunci cnd programul singur se adapteaz utilzatorului. De exemplu, dac o persoan terge constant mesajele de la cineva fr s le deschid, programul e- mail ar putea s ntrebe dac trebuie s tearg ntotdeuna mesajele de la persoana respectiv. O astfel de adaptare este dificil, i trebuie implementat cu grij. Adaptarea poate fi administrat de ctre ageni inteligeni care ajung la concluzii din modul n care utilizatorul manevreaz mesajele i s ncerce presupuneri inteligente legate de cum vrea utilizatorul s aib mesajele organizate, spre exemplu. Adaptatea utilizatorului este atunci cnd utilizatorul unui sistem i adapteaz comportamentul sistemului. De exemplu, cnd o funcie de cutare n e-mail necesit ca utilizatorul s specifice n ce folder s caute, utilizatorul s-ar putea adapta sistemului nu prin folosirea folderelor cu scopul de a simplifica cutrile prin toate mesajele.
1.2 Sistemele de pot electronic i proiectarea
1.2.1 Funcionalitatea potei electronice
Pota electronica este un sistem de comunicare bazat pe calculator unde mesajele pot fi scrise de ctre un exepeditor pe un calculator. Aceste mesaje sunt apoi transmise prin calculatoare la adresa serverului de mail unde pot fi deschise i citite de ctre destinatar. Original aceste mesaje puteau s conin doar text, dar n zilele noastre tot ce e stocabil pe un calculator poate fi transmis prin mesajele potei electronice. Mesajele care conin alte informaii dect text sunt considerate mesaje cu ataamente (attachments). Aceste ataamente sunt de obicei fiiere create cu alte programe dect programul potei electronice. Exist sisteme e-mail care pot manipula informaii cum sunt imagini, sunete i video fr asistena altor aplicaii. 8
Pota electronic se deosebete de alte servicii de comunicare, cum este chat sau talk, prin caracterul su asincron. Asincronizarea se refer la posibilitile pe care le au expeditorul i destinatarul unui mesaj de a trimite i de a citi mesajele n timpi diferii. Acest timp este divizat n trei pri: timpul dintre crearea mesajului i timpul transmisiei (permind expeditorului s modifice mesajul), timpul dintre transmisie i deschiderea mesajului de ctre expeditor, i nu n ultimul rnd, timpul dintre deschiderea i raspunderea la mesaj. Sistemul asincron necesit ca mesajele s fie stocate pe calculator. Dac numrul mesajelor stocate devine mare, muli utilizatori prefer s grupeze aceste mesaje n dosare (folders). n unele sisteme, dosarele pot conine i alte dosare. Un dosar poate fi numit, de asemenea, director, catalog sau categorie. n majoritatea sistemelor de pot electronica doar coninutul unui dosar este vizibil la un moment dat. Pentru a vizualiza coninutul altui dosar, acest dosar trebuie manual selectat. Dosarul unde toate mesajele noi sunt primite se numete inbox. Acest dosar i alte dosare sunt individuale: fiecare utilizator al potei electronice are propriile dosare, iar mesajele nu pot fi citite, n mod normal, de ctre alii. Dosarul inbox este singurul dosar vizibil atunci cnd utilizatorul pornete un sistem de pot electronic. Mesajele potei electronice sunt compuse din dou pri: o list de antete (headers) i un coninut (body). Coninutul este folosit pentru mesajul actual. Antetele sunt formate dintr-o etichet (tag) i un cuprins (content) care definete, spre exemplu, ctre cine trebuie trimis mesajul (antetul ctre, To:, ca etichet i adresa sau adresele ca i coninut), i subiectul mesajului (antetul Subject). Cteva dintre aceste antete sunt obligatorii, dar majoritatea sunt opionale. Acceptate pe scar larg n Internet sunt antetele definite n RFC 822, dar antetele noi pot fi adaugate la fel ca antetele definite n RFC 1800. Toate sistemele de pot electronica au funcionalitatea de a raspunde la mesaje prin comanda reply, pentru mesajele care au fost primite. Aceast comand umple automat cmpul de adres (cu adresa expeditorului a mesajului primit) i cmpul pentru subiectul mesajului ( cu acelai subiect ca al mesajului primit). Des, cuprinsul subiectului este precedat de un Re: pentru a identifica mesajul la o replic. Cnd sunt adugate noi antete, vor fi instrumente (mail tools) care nu vor putea interpreta aceste antete, dar n sistemul experimental de pot electronic aceastea vor fi utilizate pentru a aduga noi funcionaliti. Antetele pot, de exemplu, s fie folosite pentru a confirma trimiterea 9
mesajului. Sunt sinteme care au posibilitatea confirmrii livrrii mesajelor, de exemplu: COM, Memo i Lotus Notes. Utilizatorii au nevoie de a stoca adresele altor utilizatori. Aceste adrese pot fi stocate n cartea de adrese (address book), n scopul de a trimite acelai mesaj ctorva destinatari n acelai timp prin folosirea a scurtturilor (short-cut) de nume. Exist, n multe cazuri, o linie subire ntre sistemele de pot electronica i sistemele de conferin informatic care, de asemenea, manipuleaz mesaje asincrone scrise. Diferena dintre pota electronica i sistemul de conferin pur, este c mesajele potei electronice sunt direcionate la adrese cu nume, n timp ce mesajele postate n sistemul de conferin pot fi citite de toat lumea (oricine care are acces la conferin pe timpul perioadei n care mesajul este postat). n listele de distribuie ale potei electronice, doar aceeia care sunt membrii ai listei la timpul trimiterii mesajului vor primi o copie. n zilele noastre, cteva sisteme de pot electronic au fost extinse la sisteme groupware pentru colaborare care sunt integrate cu baze de date, procesoare de text, instrumente de desenat i foi de calcul (spreadsheets). Groupware poate fi definit ca: program care a fost proiectat ca s fie utilizat de mai mult dect o persoan. 1.2.2 Istoricul potei electronice
n anii trzii 1960, primul sistem de pot electronic a fcut posibil trimiterea de mesaje de ctre utilizatori de pe acelai calculator. n 1970, multe calculatoare din SUA au devenit conectate printr-o reea numit ARPAnet (Advanced Research Projects Agency). Pota electronic a devenit curnd una dintre cele mai folosite aplicaii , iar definiii ale antetelor obinuite au devenit necesare. O sut de ani mai trziu, LAN (Local Area Network) au fcut posibil dezvoltarea de sisteme de pot electronic pentru utilizarea prin LAN. Pe parcursul ultimului deceniu, LAN i WAN (Wide Area Network) au fost conectate pentru a forma Internetul. Dou viziuni ale evoluiei potei electronice au urmat: cea a utilizatorului i un punct de vedere tehnic. Pliskin (1989) a dat descrierea avantajelor un vis minunat a devenit realitate; pentru a fi accesibil zilnic i gratuit i problemelor potei electronice. Ea a reportat din propria sa experien urmatoarele probleme ale potei electronice:
10
1. Dificuti n adresare Cnd oamenii comunic sunt probleme dese cu gsirea adreselor. 2. Probleme de fiabilitate Nu exist posibilitatea de a ti dac un mesaj a ajuns la destinaie sau nu, pn cnd destinatarul nu rspunde. 3. Limitri ale mediului Este imposibil s se trimit orice n afar de texte simple, i nu sunt posibiliti de a trimite semnturi ( de exemplu ntr-un contract). 4. Probleme cu interfaa Utilizatorii trebuie des s se recalifice atunci cnd csua potal este transferat la o alt combinaie de calculatoare gazd i reea. De cnd studiul lui Pliskin a fost fcut, a trecut mult timp, iar problemele pe care ea le-a descris au fost rezolvate. Antetele sunt definite pentru a permite confirmarea recepionrii mesajelor, dar funcionalitatea de a manipula acest lucru nc lipsete n majoritatea recepionrii mesajelor. Mesajele cu alt cuprins dect textele simple sunt posibil de trimis n zilele noastre prin MIME (Multipurpose Internet Mail Extensions) care definete modul n care cuprinsul mesajelor trebuie interpretat. 1.2.3 Proiectarea interfeei potei electronice
nainte s se neleag discuiile despre interfa i proiectare, trebuie definii doi termeni: feedback i manipulare direct. Feedback-ul poate fi definit ca trimiterea napoi utilizatorului informaii despre ce aciune a fost executat i ce rezultate s-au obinut. Feedback-ul este important aa nct utilizatorul tie ce face calculatorul. Feedback-ul poate fi divizat n trei tipuri diferite unde informaia arat urmatoarele lucruri: 1. Calculatorul a neles instruciunea utilizatorului. 2. Instruciunea a fost executat i cum. 3. Execuia ar putea s ia timp. Un exemplu este adugarea unui ataament mesajului. Ar trebui s existe o diferen vizual ntre un mesaj cu ataament i unul fr ataament. 11
Manipularea direct poate fi definit ca un stil de comunicare n care obiectele sunt reprezentate pe ecranul calculatorului, i pot fi manipulat de ctre utlizator n mod analog ca i cum utlizatorul ar manipula obiecte reale. O parte din succesul manipulrii directe a interfeelor const n abilitatea acestora de a constrnge interaciunea utilizatorului cu aciuni care sunt sintactic corecte i care corespund sarcinilor utilizatorului. Prin urmare, probabilitatea erorilor descrete. Sistemele de manipulare direct ar fi mai bune pentru utilizatori dect sistemele bazate pe comand. Cteva motive ar fi urmtoarele: 1. Utilizatorii nceptori pot nva rapid, de obicei printr-o demostraie facut de un utlizator mai experimentat. 2. Experii pot lucra extrem de rapid pentru a efectua o gam larg de activiti, chiar definind noi funcii i caracteristici. 3. Mesajele de eroare sunt rareori necesare. 4. Utilizatorii pot s vad imediat dac aciunile lor i ndeplinesc scopul, i dac nu, ei pot simplu s schimbe direcia activitii lor. 5. Utilizatorii au anxietatea redus, deoarece sistemul este uor de neles i aciunile sunt uor reversibile. Manipularea direct necesit aciune incremetal pe obiecte vizibile n interfa cu un feedback rapid. Cnd se proiecteaz un sistem tradiional de manipulare direct textele comenzilor sunt nlocuite cu aciuni pentru a manipula obiecte vizibile direct. Majoritatea aciunilor ar trebui s fie reversibile, fiecare aciune a utilizatorului ar trebui s fie o operaie legal i s nu rezulte ntr-un mesaj de eroare. Un exemplu este mutarea unui mesaj dintr-un dosar ntr-altul i fixarea lui. Mesajul i folderul sunt obiecte vizibile (reprezentate prin iconie). Cnd mesajul este selectat, interfaa transmite un feedback, de exemplu prin schimbarea cursorului la iconia mesajului. Pe parcursul mutrii de la poziia original la dosarul nou, inconia mesajului este vizibil pe ecran i mutat rapid n pai mruni. Dac utilizatorul se rzgndete este posibil mutarea inconiei mesajului napoi la poziia original. Dac mutarea este complet ctre noul dosar, inconia dosarului rspunde n cteva moduri (de exemplu nghiind iconia mesajului).
12
1.2 Pota electronic i utilizatorii de calculatoare
Aceast seciune raporteaz cteva diferene n uitilizarea calculatorului ntre utilizatorii nceptori i cei experimentai. Utilizarea potei electronice s-a rspndit de la grupuri omogene de utilizatori orientai tehnic la locuri de munc, n general. Iniial, pota electronic a fost folosit cel mai des la locul de munc, de ctre angajaii care au avut calculator. Mai trziu, posibilitile de comunicare pe care le-a adus calculatorul i accesul la pota electronic au reprezentat un motiv de a introduce calculatoarele la locul de munc. Astzi, accesul la pota electronic a devenit comun n locuinele oamenilor. Aceast dezvoltare va include noi grupuri de utilizatori n comunitatea potei electronice, n rndul utilizatorilor nceptori de calculator. 1.2.1 Adaptarea interfeei la utilizator
Este important s se fac potrivire ntre interfa, abilitile i experiena utilizatorului. A fost fcut un studiu n anul 1991, unde 32 de utilizatori experimentai au fost pui fa n fa cu dou interfee care ndeplineau aceeai sarcin. O interfa a fost fcut pentru nceptori folosindu-se meniuri de dialog, culori, valori implicite, mesaje lungi de eroare, i un transfer automat la funcia de ajutor cnd apreau erorile. Cealalt interfa a fost fcut pentru utilizatori experimentai, cu dialog de comand, fr culori, cu mesaje de eroare foarte scurte, fr valori implicite, i cu o funcie de ajutor care poate fi activat manual i care conine mesaje de ajutor scurte. Jumtate dintre utilizatorii experimentai au efectuat simularea cu o interfa pentru nceptori, i cealalt jumtate cu interfaa pentru experi. Utilizatorii nceptori au fost divizai n acelai fel. Experimentul a dat performane semnificativ mai bune n ceea ce privete rata de eroare i profit atunci cand interfeele au fost potrivite cu experiena utilizatorului. Utilizatorii experimentai s-au descurcat mai bine cu interfaa proiectat pentru cei experi, comparativ cu interfaa pentru nceptori. Analog a fost n cazul utilizatorilor nceptori. Nicio diferen semnificativ nu a fost gsit raportat la timpul de rspuns. Divizarea n utilizatori nceptori i experimentai este static i nu se va potrivi acelora care sunt n traziie de la un grup la cellalt. n loc de adaptarea doar utilizatorului la interfa, este posibil, de asemenea, adaptarea interfeei la utilizator. Versiunea adaptat iniial a fost ca i cea pentru utilizatorii nceptori, dar cnd un utlizator a ndeplinit o sarcin fr erori, interfaa s- a schimbat ntr-o versiune intermediar, iar dup o alt perioad fr erori, n versiunea pentru 13
cei experimentai. n concluzie, interfeele care se adapteaz ar putea reduce timpul de antrenament i pot s produc o performan n cretere.
14
Capitolul 2: IMAP i alte tehnologii asociate
Pota electronic (e-mail), sau SMTP-mail (Simple Mail Transfer Protocol), este un serviciu public potrivit pentru schimbul automat de mesaje ntre entiti conectate. Interoperabilitatea este garantat prin cteva standarde ale Internetului, de obicei codificate sub forma documentelor RFC. Diferite protocoale specific regulile de comunicare dintre entiti, la fel i definiia formatului tututor mesajelor transmise. n aceast seciune, se prezint numeroase strandarde care au de a face cu acest nalt subiect de discuie. 2.1 Concepte de baz
Un mesaj e-mail, sau un mesaj RFC-822, este compus din trei pri: Envelope, Header i Body. Envelope este singura parte relevant pentru schimbul de mesaje ntre gazdele de Internet; include informaii de baz cum sunt adresele expeditorului i destinatarului. Header-ul ofer mai mult metadata detaliat despre mesaj, de la adresa expeditorului i ruta mesajului la cmpurile definite pentru utilizator. Cteva pri din aceste informaii sunt folosite cnd trimiterea mesajului electronic eueaz din diferite motive, cum este header-ul de Return-Path. Header-ul servete, de asemenea, ca i baz pentru IMAP envelope data. n final, un message body este ceea la ce un utilizator tipic se refer ca fiind propriu-zis e-mail-ul. Ar putea s conin doar un simplu text US-ASCII, un mesaj HTML cu imagini ncorporate , sau ar putea fi o entitate definit recursiv cu o structur rich tree. Un server IMAP este o gazd n Internet care ofer acces la depozitul local de mesaje e- mail prin intermediul unui protocol standard, IMAP4rev1 n acest caz. Serverul IMAP ar putea fi localizat n centrul de date al unui angajat sau n calculatorul unui utilizator, de exemplu. Un server MTA (Mail Transfer Agent) sau SMTP este o gazd Internet a crei scop este de a livra mail-ul RFC 2822. MTA-urile n Internet comunic ntre ele, determinnd rutarea informailor de la MX-records n DNS (Domain Name System). MX-record (Mail eXchange record) este o nregistrare n DNS care specific responsabilitile serverelor pentru acceptarea tuturor mesajelor e-mail care sosesc pentru un domeniu particular. Ca o comun practic n zilele noastre , aceste servere accept, de asemenea, mesaje e-mail trimise de ctre proprii utilizatori, cu condiia ca autentificarea sa fie facut corespunztor, fie prin simplul fapt c provine de la o reea de ncredere sau de la un utilizator acreditat. 15
Mailbox sau Mail Folder este un loc pe serverul IMAP unde mesajele sunt logic stocate. Mailbox-ul ar putea conine un numr de child mailboxes dac implementarea serverului permite acest lucru. 2.2 IMAP atribute specifice
Un mesaj n sensul IMAP este invariabil, coninutul (header, body etc) su neputnd fi modificat. Fiecare mesaj are, de asemenea, atribute variabile, cele mai importante fiind flag- urile. Mesajele, ntr-un mailbox izolat, sunt identificare prin intermediul a dou numere parial independente, sequence number (numr de ordine) i UID (User ID). Numerele de ordine ncep de la 1 i sunt consecutive, asta nsemnnd c se schimb dinamic cnd un mesaj este ters din mijlocul mailbox-ului, de exemplu. Asta nseamn c un mesaj poate avea mai multe numere de ordine asignate de-a lungul timpului, i c un numr de ordine poate referi mesaje fr nici o legtur, pe parcurs ce numerotarea se schimb. Pe de alt parte, UID lucreaz diferit. Cnd un mesaj este livrat n mailbox, primete un UID cu 1 mai mare dect cel de dinainte. Dup ce UID este asignat, nu se va schimba niciodat pentru un mesaj particular, i mailbox-ul amintete cel mai mare UID asignat pn la momentul respectiv. Asta nseamn c UID-urile nu sunt niciodat reciclate i pot fi utilizate ca identificatori persisteni pentru mesajele din mailbox. Cteodat, situaii nestandard se pot ntmpla, de exemplu, cnd a treia parte ncearc s acceseze datele din mailbox din spatele serverului IMAP. n astfel de cazuri, garania naturii invariabile a mesajelor nu mai este valabil, iar un server compatibil IMAP trebuie s comunice problema tuturor clienilor. Atributul UIDVALIDITY al mailbox-ului servete acestui scop. Chiar i in cazul n care UIDVALIDITY se schimb, un client compatibil este necesar pentru a arunca orice informaie cache legat de mailbox, pentru c asignarea UID ncepe din nou. UID i UIDVALIDITY combinate mpreun formeaz un ntreg pe 64 de bii care este un absolut unic identificator pentru orice mesaj ntr-un mailbox dac n cazul n care un client a recuperat vreodat o parte invariabil dintr-un mailbox cu acest identificator pe 64 de bii, interogri ulterioare pentru partea identificat prin acelai numr pe 64 de bii n acelai mailbox pot fi satisfcute de cache-ul clientului. 16
Trebuie precizat c numerotarea UID/UIDNEXT este strict pentru mailbox i nu pentru server, i dac diferii utilizatori acceseaz acelai server, s-ar putea s vad acelai numr pe 64 de bii pentru un mesaj total fr nici o legatur. n timp ce RFC 3501 recomand ca UIDVALIDITY s fie constant pe ct posibil, un client IMAP compatibil are de a face cu schimbrile UIDVALIDITY, cu toate acestea. IMAP envelope este o structur de date care reine valori determinate, cel mai adesea din diverse message headers (antetele mesajelor). Nu este acelai lucru ca SMTP envelope, care de obicei stocheaz mai puin informaie. Internal date reine o marc de timp despre cnd a fost livrat mesajul la serverul IMAP. Atributul size este numrul de octei necesar pentru stocarea unei copii ntregi n format RFC 2822. Body structure reprezint structura tree-like al mesajului MIME. IMAP flags este un atribut care reine o mulime de zero sau mai multe token-uri asociate mesajului. Un flag poate fi permanent sau de sesiune. Flag-urile permanente sunt stocate n mailbox-ul propriu-zis, n timp ce flag-urile de sesiune dispar la o reconectare ulterioar la mailbox. Unele dintre flag-uri sunt definite de ctre standardul RFC 3501, altele sunt adugate de ctre diferite recomandri i extensii standard. Un server IMAP ar putea permite clienilor IMAP s stocheze propriile flag-uri de mesaje. n final, coninutul mesajului propriu-zis este distribuit n forma mesajelor text. Clienii sunt liberi s aleag de la preluarea separat a prilor de mesaj MIME sau totul ca un ntreg. 2.3 MIME
Multipurpose Internet Mail Extentions, sau simplu zis MIME, este o mulime de standarde pentru extinderea vechiului SMTP mail de la texte ASCII pe 7 bii la coninut bogat multimedia. Pri din aceste standarde au de a face cu ncapsularea caracterelor non-ASCII n header-ele mesajelor, la fel de bine ca i furnizarea instruciunilor despre cum trebuie ncorporate datele non-textuale n mesajele e-mail.
17
Antete RFC 822 adugate de MIME:
Tipuri i subtipuri MIME definite n RFC 2045
2.3.1 Mesajul ca un container
Un aspect important al MIME este introducerea structurii interne n body-ul mesajelor e- mail. Anterior, body era un text simplu, iar odat cu codificarea acestui standard, a devenit posibil schimbarea de mai multe informaii structurate. Utilizatorii contemporani sunt, probabil, familiarizai cu e-mail-urile HTML care conin imagini incorporate i ataamente PDF pentru imprimare fr sudur. Utilizatorii trimit n mod obinuit e-mail-uri cu fotografii ataate din vacane, sau o arhiv care conine documente legate de business. Standardele MIME ating acest lucru prin definirea unui content type pentru body-urile mesajelor. Acest content type, de obicei setat de ctre un header RFC 2822 al unui mesaj, 18
determin n ce mod un client compatibil expune mesajul. Vechile tipuri de mail-uri non-MIME au un tip text/plain implicit MIME, un text pe 7 bii US-ASCII neformatat. Alt fragment din standard definete containere cu scop generic, tipuri de coninut abstracte care conin alte pri de mesaje. Multe dintre aceste containere sunt definite n RFC 2045 si 2046, unul fiind adugat n RFC 2387. Codarea multipart/alternative ofer o semnificaie transmiterii unui mesaj care este primat n cteva diferite formri, dar fiecare dintre ele coninnd aceleai date. MUA (Mail User Agent) alege una dintre prile subliniate i le afiseaz, probabil permind utilizatorului s suprascrie ceea ce e subliniat. Multipart/mixed este un tip MIME generic catch-all pentru mesaje multipart. Dac un MUA compatibil vede un tip de coninut multipart pe care nu l poate recunoate, ar trebui s se comporte ca i cum ar fi mixed multipart. O aciune tipic este dispunerea tuturor prilor ncorporate una lnga cealalt. 2.3.2 Caractere internaionale n mesaje
Mail-ul original SMTP definit de RFC 822 este potrivit doar pentru transferul de date pe 7 bii. n zilele noastre, canalele de transport pe 8 bii sunt mult mai comune pentru reprezentarea caracterelor internaionale i pentru transferul binar de date. Prin urmare, MIME definete transfer encodings pentru conversia de date binare generice pe 8 bii ntr-un stream de caractere pe 7 bii i un mod portabil de a exprima caracterele naionale folosind doar caractere ASCII pe 7 bii. Dou codri standard sunt valabile, Quoted printable i Base64, cel din urm fiind susinut de o abordare similar, cum este cea definite in RFC 2047. 2.3.3 Susinerea MIME n IMAP
O mare parte din lucrul care implic susinerea MIME poate fi efectuat de ctre serverul IMAP. Acest fapt este n special adevrat pentru parsarea structurii mesajelor, unde specificrile IMAP prevd moduri de a explora tree-ul mesajului, la fel de bine ca i metodele pentru recuperarea parilor din coninutul mesajului care rezult separate (chiar incluznd serii de octei pentru descrcare mai uoar). Cu toate acestea, protocolul IMAP nu trateaz restul susinerii MIME, sau alte parsri de headere. n timp ce e normal s se interogheze serverul pentru un subset de headere RFC 2822, 19
datele returnate nu sunt pre-parsate n orice mod. Aadar, o mare parte din munca contopirii a ctorva pri din headere pentru a decoda caractere internaionale este lsat ca un exerciiu clientului. Din fericire, diverse atribute ale mesajelor n protocolul IMAP pot s serveasc ca un substitut pentru parsarea header-elor RFC 2822. 2.4 Flow-ul protocolului IMAP
Dup conectarea cu succes la un server IMAP, clientul ar putea alege s se autentifice dac serverul nu a fcut acest lucru deja cu un cont de utilizator particular. Dup aceasta sau n caz c autentificarea nu e necesar, conexiunea intr n starea authenticated. n aceast faz, niciun mailbox nu este selectat i doar un subset de comenzi este valid. Clienii pot, de exemplu, s cear listarea arborelui de la mailbox, s obin informaii despre numrul mesajelor dintr-un mailbox particular sau altfel s gestioneze mailbox-urile ca un ntreg. Ei trebuie, totui, s selecteze mailbox-ul pentru a putea face orice altceva, cum ar fi preluarea mesajelor sau pentru a le marca ca fiind citite. Mailbox-ul poate fi accesat ca read-only sau pentru citire i scriere, cu condiia ca utilizatorul autentificat s aib suficiente privilegii. Preluareaa de mesaje se poate face n dou moduri, dar opeariile de scriere (cum sunt stocarea unui mesaj nou n mailbox sau manipularea flag-urilor mesajului) necesit acces read-write. Urmtoarea diagram, cea din figura Fig. 3.4.1, ilustreaz modul n care serverul IMAP manipuleaz mesajele venite la serverul SMTP: 20
Fig.2.4.1 Flow-ul IMAP
1- Mesajul ajunge la serverul SMTP 2- Serverul SMTP livreaz toate mesajele care sunt destinate pentru un utilizator local, la serverul IMAP 3- Clienii IMAP se conecteaza la serverul IMAP pe portul IMAP 143 i i acceseaz mesajele folosind protocolul IMAP 4- Serverul IMAP folosete utiliti asincrone SFS la interfaa cu depozitul de mesaje (stocheaz i obine mesaje, creaz i terge dosare, etc.) 5- Administratorii autorizai utilizeaz IMAPADM EXEC pentru a emite comenzi administrative la serverul IMAP. Comenzile sunt trimise ntr-o coad CMS. Serverul IMAP primete comanda, o proceseaz, i apoi rspunde napoi pe coada de administrator. 21
2.4.1 Comenzi i rspunsuri
IMAP este un protocol de text line-oriented. Orice serverul trimite la clientul su se numete rspuns (response), n timp toate datele care circul n partea opus sunt cunoscute ca fiind comenzi (commands). Fiecare comand generate de ctre client ncepe cu un identificator unic numit tag care este urmat de identificatorul actual al comenzii. Majoritatea comenzilor accept de asemenea (sau necesit) un parametru (parameter) care ar putea fi un string literal, un numr, un atom, o list de alte tipuri, etc. Transmisia de string-uri necesit o confirmare explicit de la server numai dac extensia LITERAL+ este ativ. Suportul pentru aceast extensie este crucial pentru o performan bun, iar dac ar fi absent, majoritatea comenzilor ar fi ntrziate. Clienii sunt liberi s emit cteva comenzi, fr s atepte executarea acestora. Fiecare comand, de obicei, conduce la rspunsul unui server, tagged reply. Acest rspuns conine acelai tag ca i cel trimis de client n comanda original, permind clientului s i dea seama dac comanda a fost executat cu succes sau nu. Unele comenzi pot duce la trimiterea de rspunsuri viitoare numite rspunsuri neetichetate (untagged replies). Un detaliu important al protocolului este ca aceste rspunsuri neetichetate sunt premise s apar n aproape orice moment pe parcusul conversaiei i nu numai ca un rezultat al unei comenzi. Un client compatibil trebuie sa fie pregtit pentru acest gen de situaie i s ii fac fa correct, deoarece nu exist nicio diferen ntre raspunsurile generate unilateral si cele solicitate (requested replies). Fiecare rspuns etichetat indic o completare a unei comenzi particulare. Dac comanda este executat cu succes, un status OK este primit, iar dac nu a fost executat cu succes, serverul returneaza NO. n cazul n care serverul nu nelege intenia clientului, returneaz rspunsul cu statusul BAD. Un control mai bun asupra rezultatelor este realizat prin intermediul codurilor de rspuns (response codes), care sunt entiti textuale cu un neles strict definit. Exemple de asemenea coduri de rspuns sunt mailbox opened in read-only mode, specied character set no supported sau please show this error message to the user.
22
Comenzile protocolului IMAP: LOGIN permite folosirea idetificatorilor de utilizator i parol n procesul de nregistrare a clienilor noi. Referitor la serverul IMAP, nu este cea mai buna metod, dar uneori este singura cale de a se face conexiune la server. AUTHENTICATE permite clientului s foloseasc metode alternative de verificare a datelor personale n procesul de nregistrare/autentificare pe serverul IMAP. Verificarea individual a datelor personale nu este obligatorie i nu este suportat de toate serverele IMAP. Mai ales executarea acestei metode difer n funcie de versiunea serverului. Cnd se execut comanda AUTHENTICATE, serverul rspunde n cod n baza 64. Mai departe clientul trebuie s trimit raspuns la cererea legat de verificarea datelor personale, tot n cod n baza 64. Dac serverul nu suport metoda de validare propus de client, el va rspunde la orice comand prin NO. Dup aceea, clientul trebuie sa continue comunicarea pentru verificarea autentificrii. Dac toate ncercrile de a se autentifica au auat, clientul ncearc s se nregistreze la server prin comanda LOGIN. CLOSE nchide cutia potal. Cnd cutia ptal este nchis, toate mesajele marcate cu \DELETE sunt terse. Aceast comand nu are parametrii. LOGOUT termin sesiunea pentru utilizatorul actual, nchide toate cutiile potale deschise. Dac sunt mesaje marcate cu flag-ul \deleted, cu ajutorul acesteo comenzi ele vor fi automat terse din cutia potal. CREATE creaz o cutie potala nou. Numele i locul lor se stabilesc conform specificaiilor serverului. DELETE se folosete la cutii potale. La primirea acestei comenzi, serverul IMAP terge cutia potal cu numele dat ca parametru. Mesajele sunt terse i ele din cutia potal respectiv. RENAME redenumete numele cutiei potale. Are doi parametrii: numele care trebuie schimbat, i numele nou. SUBSCRIBE - adaug o cutie potal n lista celor active. Are numai un parametru: numele cutiei potale care trebuie adugat n list, dar care nu trebuie neaprat s existe. UNSUBSCRIBE terge cutia potal din lista celor active. Are aceeasi parametrii ca i SUBSCRIBE. LIST returneaz lista cu toate csuele potale ale clientului. Are doi parametrii. 23
LSUB fa de comanda LIST, LSUB se folosete pentru accesarea liste cu cutii potale activate prin comanda SUBSCRIBE. Parametrii sunt la fel ca la LIST. STATUS formeaz cerero legate de starea curent a cutiei potale. Primul parametru este numele cutiei potale, al doilea este lista cu criterii cu ajutorul crora clientul vrea s obin informaia necesar. Comanda STATUS poate fi folosit pentru obinerea informaiei despre starea cutiei potale fr executarea comenzilor SELECT i EXAMINE. Clientul poate s obin informaia dup criteriile: MESSAGES numrul total de mesaje din cutia potal; RECENT numrul de mesaje cu flag-ul \recent; UIDNEXT identificator ID, care va fi dat la un nou mesaj; UIDVALIDITY identificator unic pentru cutia potal; UNSEEN numrul de mesaje fr flag-ul \seen. APPEND adaug un mesaj n captul listei unei anumite cutii potale. Ca argumente are numele cutiei potale, flag-ul mesajului (care nu e obligatoriu), titlul i coninutul mesajului. Are anumite flag-uri: \seen citit; \answered pentru rspuns; \flagged important; \deleted pentru tergere; \draft pentru ciorn; \recent pentru mesaj nou, poate fi utilizat numai dup terminarea sesiunii. CHECK pune checkpoint n mailbox. Orice operaie, de exemplu scrierea datelor din memoria serverului pe hardDisk, trebuie executat conforma strii cutiei potale. Pentru verificarea funcionrii cutiei potale dup operaiile de scriere sau altele, se folosete comanda CHECK. Nua are parametrii. EXPUNGE terge din cutia potal toate mesajele marcate cu flag-ul \deleted, dar cutia potal nu se nchide. Rspunsul la aceast comand este sb forma unui raport despre starea nou a cutiei potale. SEARCH cutarea mesajlor bazate pe criterii n cutia potal activ, cu un rspuns detaliat. Cutarea mesajelor se face dup anumite cuvinte, dup data primirii sau dup flag-uri. 24
FETCH trimite coninutul mesajului. Comanda se folosete numai pentru afiarea mesajelor. Fa de POP3, clientul IMAP nu salveaz copiile mesajelor pe PC-ul. STORE stocheaz informaia despre mesaj. COPY copiaz mesajul dintr-o cutie potal n alta. UID se folosete legat cu comenzile FETCH, COPY, STORE, SEARCH. Cu ajutorul ei, comezile precedente pot folosi ID n loc de enumerarea simpl. CAPABILITY cerere de la client despre informaiile i posibilitile serverului IMAP. NOOP aceast comand nu face nimic. Poate fi folost ca suport n timpul sesiunii. Cu ajutorul ei nu se inchide sesiunea n limita timpului. Rspunsul serverului la comanda NOOP ntotdeauna trebuie sa fie pozitiv. 2.4.2 Strile serverului IMAP
Serverul IMAP se afl n una dintre cele patru stri: fr autentificare, cu autentificare, de alegere (Choose) i de ieire (Exit). Majoritatea comenzilor pot fi folosite n anumite stri. n starea fr autentificare clientul trebuie s i introduc numele de utilizator i parola pentru a accesa majoritatea comenzilor. Trecerea n starea de funionare se face pe baza conexiunii fr autentificare. n starea de autentificare clientul trebuie identificat. n plus, el este obligat s aleag o csu potal (mailbox), dup ce are acces la mesajele din pota electronic. Trecerea n aceast stare se face prin stabilirea conexiunii urmat de autentificare. Dup aceea, clientul va avea acces la date sau mesaje de erori legate de csua sa potal. n starea de alegere Choose sistemul ajunge numai dup o autentificare reuit i dup ce a fost aleas cu succes cutia potal. 25
n starea de "ieire" sistemul ajunge prin nchiderea conexiunii de ctre client sau ca o urmare a unei soluii independente a serverului. Fig. 2.4.2.1 Strile serverului IMAP
Explicarea figurii Fig. 2.4.2.1: 1- Conexiune fr pre-autentificare. 2- Conexiune cu pre-autentificare. 3- Conexiune respins. 4- Finalizare cu succes a comenzii LOGIN sau AUTHENTICATE. 5- Finalizarea cu succes a comenzii SELECT sau EXAMINE. 6- Executarea comenzii CLOSE sau euarea comenzii SELECT sau EXAMINE. 7- Executarea comenzii LOGOUT, nchiderea serverului sau ntreruperea conexiunii. 2.4.3 Sincronizarea mailbox
Din motive eficiente, fiecare client, de obicei, reine cteva date in cache-ul su persistent. Buni candidai pentru cache sunt mesajele text, o copie a strusturii coninutului mesajului, sau posibil chiar i flag-urile din sesiunea anterioar. Deoarece cteva rspunsuri ale serverului, i anume EXPUNGE, care informeaz clientul dac mesajul a fost ters din csua potal, se refer la mesaje doar prin numrul de ordine i clienii de obicei identific mesajele 26
prin UID, un client compatibil trebuie s rein maparea UID la numrul de ordine. Fcnd n acest fel doar pentru o parte vizibil n interfa a mailbox-ului poate prea tentant, dar riscurile implicate sunt majore si, de obicei, depesc posibilele salvri iniiale. Un server IMAP care se conformeaz n totalitate la RFC 3501 este necesar s trimit cteva rspunsuri sub form de status-uri cnd un mailbox este selectat. Domenii de interes pentru sincronizarea mailbox-ului sunt actualizri pe UIDVALIDITY, UIDNEXT i EXISTS. Dup primirea tuturor celor trei, clientul are destule infotmaii ca s decid ce aciuni sunt necesare ca s aduc mailbox-ul napoi la o stare complet sincronizat. Clienii au doar de a face cu attribute variabile ale mesajului, i anume, numrul de ordine, numrul UID i flag-urile mesajului. Dac valoarea UIDVALIDITY s-a schimbat, clientul ar trebui s nlture orice date din cache-ul local care se refer la mailbox. Unele UID e posibil s se fi schimbat sau pri din mesajl s-au modificat. Aceasta situaie este n acest caz identic cu forma de sicronizare a strii iniiale n care clientul nu are nici o cunotin despre mailbox-ul destinaie. n cele ce urmeaz. Se presupune c valoarea UIDVALIDITY este aceeai ca i n sincronizarea anterioar. Dac valoarea UIDNEXT nu s-a schimbat, niciun mesaj nu a fost trimis la mailbox de la ultima oar. Dac numrul EXISTS s-a schinbat, cteva mesaje au fost terse permanent. n cazul n care UIDNEXT s-a schimbat (poate doar s creasc deoarece numerele UID sunt scrict cresctoare) iar UID este acelai ca EXISTS, nseamn c noi mesaje au fost primite, dar nici unul nu a fost ters i clientul trebuie s cear UID-ul noilor mesaje (i flag-urile pentru toate msajele din mailbox). Dac incrementarea UIDNEXT i EXISTS difer, o rezerv a abordrii generice sincronizate, unde clientul preia UID-urile de la toate mesajele din mailbox, este necesar. De asemenea este rezonabil s se transfere flag-urile ca i parte din acest pas. Dac nu exist nicio informaie cache sau a aprut o modificare UIDVALIDITY, clienii preiau o mapare complet UID i flag-urile mesajelor. Dup executarea acestor pai i primirea unor rspunsuri relevante, clientul este pe deplin ntr-o stare sincronizat i gata s primeasc actualizri ale mailbox-ului. 2.4.4 Schimbri n mailbox
Originalul IMAP RFC specific c toi clienii trebuie s fie pregtii pentru primirea actualizrilor legate de numrul de mesaje coninute, tergerea celor vechi i trimiterea celor noi, 27
dar n ciuda lipsei de support din partea clienilor la timpul respectiv, aceast caracteristic a fost foarte puin utilizat. n schimb, comanda NOOP a fost utilizat la scar larg ca o verificare polling check a noilor mesaje. Cu toate aceastea, a avut toate dezavantajele unei abordri polling- based, n special creterea inutil a traficului n reea, trimiterea ntrziat a mesajelor mail etc. O soluie la aceast problem este prezentat n RFC 2177, unde clientul acceseaz un mod special pentru a preciza serverului c poate trimite n timp real notificri clientului. Schimbarea numrului de mesaje n mailbox este comunicat n principal prin dou tipuri de rspunsuri neetichetate, EXISTS i EXPUNGE. Rspunsul EXPUNGE conine un numr de ordine al mesajului care a fost permanent ters din mailbox i cauzeaz imediat decrementarea cu o unitate a celorlalte numere de ordine ale mesajelor care au avut numrul de ordine mai mare dect mesajul ters. Acest fapt nseamn c clienii trebuie s lucreze cu numere de ordine, altfel se pregtesc s i actualizeze UID la fiecare tergere, acest proces putnd fi destul de costisitor. Rspunsul EXISTS este folosit pentru a informa clientul c un mesaj a fost livrat, sau ar putea urma EXPUNGE pentru a oferi informaii redundante clienilor, despre numrul de mesaje stocate. Sub nicio circumstan ar putea fi utilizat pentru a descrete numrul de mesaje in mailbox-ul current, dar acest lucru este deja fcut de ctre EXPUNGE. 2.4.5 Preluarea i manipularea mesajelor
Odat selectate, mesajele din mailbox pot fi accesate i descrcate de ctre client. Comanda FETCH servete la obinerea datelor din structura coninutlui (body) i din IMAP envelope ale prilor mesajelor actuale. Flag-urile mesajelor sunt actualizate de comanda STORE i variantele acesteia. Mesajele existente pot fi copiate n alte mailbox-uri cu comanda COPY, iar noile mesaje pot fi stocate ntr-un folder mail utiliznd comanda APPEND. 2.4.6 Interogri asupra altor mailbox-uri
Deoarece grafica MUA dorete s afieze utilizatorului mai mult de un mailbox n acelai timp, cel puin ntr-o fereastr unde s se gaseasc mesajele noi sau necitite, IMAP pune la dispoziie o comand pentru determinarea strii a altor mailbox-uri dect cel selectat, comanda STATUS. Folosind aceast comand ,pentru interogarea strii a mailbox-ului current selectat, este explicit interzis de ctre RFC. Un motiv pentru interzicerea folosirii comenzii STATUS pe mailbox-ul curent este acela c n anumite implementri ale serverului, aceast operaie ar putea 28
cauza un proces care s deschid mailbox-ul nc o dat, ceea ce duce la producerea de rezultate inconsistente i s deruteze clientul. 2.4.7 Cutare, sortate i threading
Chiar i specificaia de baz al protocolului IMAP ofer faciliti pentru cutarea mesajelor n mailbox-ul curent. Majoritatea clienilor nu au nevoie de toate coninuturile mesajelor i de headerele preluate i disponibile n scopul de a permite utilizatorilor s caute prin mesaje. Cu toate acestea, cutarea i sortarea nu este valabil n cazul n care clienii nu sunt conectai sau autentificai. Acetia trebuie sa-i implementeze propriul cod pentru un aa scop, sau s dezactiveze aceste operaii cnd accesul n reea este nepermis. Urmtoarele revizuiri specific cu siguran extensii legate de internaionalizarea traficului e-mail. De exemplu, cutnd caractere non-ASCII n mesaje ar putea fi foarte dificil folosind doar comanda SEARCH, deoarece fiecare mesaj din mailbox poate fi stocat sub forma uneia dintre codificrile disponibile n standardul MIME. Revizuirile anterioare pentru IMAP definite, prin urmare, suport cutarea unificat printer mesajele care au fost primite n seturi de caractere diferite. 2.4.8 Manipularea mailbox
Conform unor motive istorice (n special versiunea veche al protocolului SMTP pe 7 bii), IMAP nu folosete nicio codare standard pentru numele mailbox-urilor. n schimb, o versiune modificat a UTF-7 sau simplu numit modified UTF-7 este mandatat. Standardul nu specific ce decizii s se ia n cazul n care cealalt parte folosete date pe 8 bii n numele mailbox-ului, dar cele mai multe implementri n zilele noastre recurg la UTF-8, care este, fr ndoial, un lucru bun de fcut. Mailbox-urile pot fi create, terse sau redenumite de ctre clienii IMAP. Dac serverul permite, pot s formeze o ierarhie sub form de arbore. Unele servere fac diferena ntre mailbox-uri pentru stocarea mesajelor i cele care conin doar alte mailbox-uri, n timp ce alte implementri permit combinarea celor dou. Din pcate, nu exista un mod sigur de a specifica n ce clas se incadreaz serverul destinaie, dar prevederi sunt date despre cum s se creeze un folder pentru mesaje i cum s se creeze unul pentru mailbox-uri. Dac mailbox-urile formeaz un arbore, implementarea serverului specific ce caracter este folosit pentru delimitarea ierarhiei. Cele mai multe alegeri n acest scop sunt punctul (.) care este comun n rndul serverelor care 29
export foldere Maildir, i slash (/) pentru exportarea tradiionalului mbox UNIX. Aceast inconsisten ar putea duce la derutarea utilizatorului, dar nu poate fi evitat fr a anula compatibilitatea invers. 2.4.9 Terminarea sesiunii
Sesiunea IMAP se termin atunci cnd serverul trimite clientului un rspuns neetichetat BYE. Aceast aciune poate fi produs de ctre cererea clientului prin comanda LOGOUT sau printr-un timer de auto-delogare din partea serverului. Implementrile serverului sunt necesare s permit cel puin 30 de minute de inactivitate naintea trimiterii acestui rspuns. 2.4.10 Extensii IMAP
Protocolul IMAP permite extinderea de nou funcionaliti. Extensiile pot aduga comenzi noi, coduri de rspuns i chiar schimbri ale aspectelor de baz ale protocolului. Suportul pentru aceste extensii este strict voluntary, i fiecare entitate compatibil a protocolului IMAP trebuie s funcioneze corespunztor. 2.5 Alte protocoale de accesare ale mesajelor stocate pe server
IMAP nu este singurul protocol pentru accesarea mesajelor stocate pe un server izolat. n aceast seciune vor fi prezentate cteva dintre alternativele existente i se va discuta avantajele i dezavantajele acestora n comparaie cu IMAP. 2.5.1 POP3
Diferena major ntre IMAP i POP3 (Post Office Protocol version 3) este folosofia acestora. IMAP a fost proiectat pentru scenario unde utilizatorul i las e-mail-urile ntr-un loc central care are un rspuns autoritar legat de ce mesaje trebuie s fie acolo, n timp ce POP3 ateapt ca utilizatorii s descarce toate mesajele pe un calculator unde clientul POP3 ruleaz i apoi terge permanent mesajul original de pe server. La fiecare reconectare, clientul POP3 descarc i terge toate mesajele noi din nou. Aceast diferen fundamental duce la problem cnd utilizatorul dorete s foloseasc POP3 n situaii pentru care nu a fost proiectat un exemplu clasic este accesarea mailbox-ului din dou locuri n acelai timp, cum ar fi de pe calculatorul de la locul de munc sau de acas.
30
Avantajele sistemului POP3: Mesajele sunt afiate foarte repede dup ce sunt descarcate de pe server; Dup ce sunt descrcate mesajele se gasesc pe calculatorul personal. Pe majoritatea serverelor spaiul este limitat, deoarece mesajele sunt descrcate pe calculator spaiul pentru mesaje este limitat doar de hard-disk-ul propriu, nu este limitat de spaiu existent pe server; Este un sistem care se regsete pe majoritatea serverelor de pe Internet; Toate programele de email suport acest protocol. Dezavantajele sistemului POP3: Trebuie folosit un program pentru a descrca mesajele de pe server; Mesajele sunt stocate pe calculatorul propriu i nu sunt accesibile de la alte calculatoare; Mesajele trimise si mesajele n curs de scriere nu sunt accesibile de la alte calculatoare; Mesajele sunt terse de pe server i dac exist o problem cu calcualtorul este posibil sa se piard mesajele; Mesajele sunt stocate n fisiere care nu sunt compatibile cu toi clienii de email, daca se dorete s se schimbe clientul de e-mail poate fi dificil s se recupereze mesajele anterioare; Este destul de dificil de copiat e-mail-urile pe un alt calculator (calculatorul de la birou, de acasa, de la scoala, laptop, etc.) Utilizatorii, de obicei, nu ii fac back-up la e-mail-uri, iar cnd se stric ceva la calculator sunt anse mari s se piard e-mail-urile. 2.5.2 Webmail
Webmail-ul este folosit, la fel ca i protocolul IMAP, pentru a verifica mesajele de pe server, fr a le descarca pe calculatorul gazd. Cu civa ani n urm, multe servicii online de la companii cunoscute cum este Google sau portale regionale de Internet i-au crescut popularitatea. n ciuda limitrilor inerente ale interfeei utilizator bazat pe web, majoritatea e-mail-urilor sunt accesate i gzduite prin interfaa webmail. Dei, cu greu aceste servicii ofer o garanie cu privire la disponibilitatea sau efectuarea de back-up-uri, utilizatorii obinuii nu sunt preocupai de aceste aspect. 31
Fiabilitatea acestor servicii este, pe de alt parte, de obicei mai mare dect a unui PC de acas. Avantajele webmail: Mesajele sunt inute pe server i sunt accesibile de la orice calculator de oriunde din lume; Mesajele care sunt verificate pe webmail rmn sincronizate cu un eventual calculator; Mesajele trimise i cele n curs de scriere sunt inute pe server; Filtrarea spamurilor se face pe server; De obicei se face back-up-ul automat al mesajelor de ctre administratorul serverului; Este uor s schimbi clientul de e-mail sau calculatorul; Daca se schimb calculatorul este foarte usor s se recupereze e-mail-urile, nu este necesar nici mcar copierea fiierelor ntre calculatoare; Pentru a accesa e-mail-ul nu trebuie deca-t un browser, nu trebuie un program special pentru asta. Dezavantajele webmail: Mesajele se incarc mai ncet; De obicei pe server exist un spaiu limitat, iar pentru a nu ocupa acest spaiu rapid, o tergere a mesajelor este necesar; Mesajele nu pot fi vizualizate cnd calculatorul nu este conectat la Internet. 2.5.3 IMAP, POP3 sau Webmail
IMAP este folosit atunci cnd este nevoie de acces la e-mail-uri de oriunde i n orice moment. Chiar dac calculatorul personal nu este la ndemana, de la un alt calculator se pot vedea e-mail-urile trimise/primite de la calculatorul de acas. IMAP necesit un spaiu mare pe server deoarece mesaje rmn pe server, n momentul n care spatial este limitat atunci POP este recomandat. Protocolul IMAP necesit un program care s cunoasc acest protocol i setarea acestuia s acceseze serverul respectiv. Mesajele descrcate prin IMAP sunt disponibile (doar mesajele care au fost deschise) unui utilizator care nu este conectat la Internet. POP este folosit pentru utilizatorii care folosesc un singur calculator pentru a verifica e- mail-ul sau pentru utilizatorii care nu au pe server un spaiu mare. Protocolul POP3 necesit un 32
program care s cunoasc acest protocol i setarea acestuia s acceseze serverul respectiv. Dup ce mesajele sunt descrcate pe calculator ele sunt disponibile i fr o conexiune la Internet. Webmail este folosit de utilizatorii pentru care e-mail-urile sunt doar o metod de a comunica cu prietenii i pentru care mesajele nu sunt foarte importante. Dac nu au acces la mesaje nu este mare problem. Este singura metod de a accesa e-mail-ul de la orice calculator conectat la Internet i configurarea este minim. Tot ce trebuie de tiut este un nume de utilizator i o parol.
n acest subcapitol sunt prezentate tehnologiile care stau la baza aplicaiei Smart E-mail Client ct i modul n care este proiectat i arhitecturat. Aplicaia despe care se discut n acest capitol a fost implementat folosind limbajul de programare Java i tehnologiile asociate acestui limbaj. Smart E-mail Client folosete servicii Web care sunt proiectate pentru a oferi suport la interanciunea calculatorului cu reeaua de Internet. Platforma Java EE ofer API-uri Java pentru serviciile web XML folosite pentru comunicarea clienilor printr-un protocol bazat XML. 3.1 Tehnologii utilizate 3.1.1 Arhitecturi i abloane de proiectare
Framework vs. pattern Un framework este un set integrat de componente care colaboreaz pentru a oferi o arhitectur reutilizabil pentru o familie de aplicaii. Framework-urile sunt aplicaii semi-complete. Aplicaiile complete sunt dezvoltate prin motenirea sau instanierea componentelor unui framework parametrizat. Un patern suport reutilizarea arhitecturii software. Reprezint soluiile la problemele dezvoltrii unei aplicaii ntr-un anumit context. Aadar, modul n care aplicaia este arhitecturat se numete pattern, iar ceea ce ajut la urmarea unui pattern se numeste framework. 3.1.1 Model-View-Controller
Aplicaia Smart E-mail Client este construit folosind ablonul de proiectare Model- View-Controller. Model-View-Controller (MVC) este un ablon de proiectare (design pattern) folosit de multe aplicaii web i nu numai. Ideea principal din spatele arhitecturii MVC este de a separa funcionalitatea modelului de reprezentarea datelor i de logica controlului. Aceast separare permite dezvoltatorilor s ofere multiple vizualizri asupra acelorai date pentru clieni diferii i mbuntete ntreinerea aplicaiei. Cu toate acestea, ablonul MVC crete complexitatea 34
proiectrii aplicaiei. Modelul reprezint datele aplicaiei i metode corespunztoare de business pentru accesarea i modificarea datelor. n aplicaiile Java EE, componentele EJB sunt des folosite pentru e reprezenta modelul i modelele de business. View-ul este responsabil pentru prezentarea datelor din model utilizatorului. Tehnologiile Java Server Pages (JSP) sau Java Server Faces (JSF) pot fi folosite n acest scop. Controller-ul proceseaz interaciunile utilizatorului cu view-ul i le interpreteaz ca aciuni specifice efectuate de model. n aplicaiile web, interaciunile utilizatorului sunt cereri HTTP care duc la schimbri n starea modelului sau la invocarea metodelor din model. Bazat pe rezultatele aciunilor efectuate, controller-ul selecteaz un view adecvat pentru afiare. Controllerul este reprezentat, de obicei, de un servlet sau de un filtru. n figura Fig.3.1.1.1 este repezentat Schema dup care funoneaz MVC.
Fig.3.1.1.1 Diagrama MVC 3.1.2 Struts 2
Struts 2 este un framework open-source care ajut la construirea aplicaiilor web ntr-un mod rapid i uor. Se bazeaz pe tehnologii standard cum sunt Java beans, Java servlets, Java Server Pages (JSP) i XML. Piesa de centru a Struts este MVC, care se integreaz cu alte tehnologii care ofer model i view. Model 1 i Model 2 sunt arhitecturi care se difereniaz prin coninut i prin generaiei, de la logica business la coninut de prezentare prin format HTML. Model 2 difer de Model 1 prin locaia unde cererea este procesat: de un controller (Model 1) sau de pagini JSP (Model 2). 35
n arhitectura din Model 1, pagina JSP proceseaz singur cererile primite i rspunde clientului, as cum este prezentat n figura Fig.3.1.2.1
Fig.3.1.2.1 Model 1 1. Browser-ul trimite cererea ctre servlet. 2. Servletul instaniaz un Java bean care este conectat la baza de date. 3. Servletul comunic cu o pagin JSP. 4. Pagina JSP comunic cu Java bean. 5. Pagina JPS rspunde browser-ului.
Implementarea Model 2 de ctre Struts folosete tipuri specifice de servleturi, numite action servlet, i una sau mai multe aciuni i mapri de pentru a implementa controller-ul. De asemenea, folosete tipuri specifice Java Bean, numite form bean. Aa cum este ilustrat n figura Fig.3.1.2.2, serverul Web la timpul rulrii conine componentele view i controller, n timp ce al treilea nivel (care este de obicei n afara serverului Web) conine modelul. 36
Fig.3.1.2.2 Model 2 Flow-ul Struts2: 1. Request: Clientul face o cerere. 2. Filter Dispatcher: acesta reprezint controller-ul i este prima component care intr n joc n ciclul de procesare a cererii. La baz este un servlet filter. Funcia sa principal este de a inspecta fiecare cerere primit i de a determina care aciune ar trebui executat n funcie de cerere. 3. Action Mapper: aceast clas este utilizat de FilterDispatcher pentru a determina dac cererea ar trebui s invoce o aciune sau nu. ActionMapping este clasa care reine informaiile despre maprile aciunilor folosite pentru a invoca o aciune Struts. 4. ActionProxy: dac ActionMapper determin c o aciune trebuie s fie invocat pentru o respectiv cerere, FilterDispatcher trimite controlul ctre ActionProxy. ActionProxy consult ConfigurationManager i apoi creaz un ActionInvocation. 5. ConfigurationManager: aceasta este reprezentarea obiectului Java pentru fiierul struts.xml care este ncrcat la nceperea aplicaiei i conine toate informaiile referitoare la configurarea framework-ului. Interfaa ConfigurationProvider descrie configurarea framewoek-ului. Implicit, framewrok-ul ii ncarc propria configurare prin intermediul unui document xml folosind StrutsXmlConfigurationProvider. 37
6. Struts.xml: acesta este fiierul de configurri ce conine mapri definite pentru fiecare aciune, interceptori, rezultate, etc. n contextul aplicaiei Smart E-mail Client, acest fiier are forma urmtoare, cea prezentat n figura Fig.3.1.2.3. Fiecare aciune este mapat la clasa Java corespunztoare. Dac metoda din interiorul clasei nu este specificat pentru a fi executat, atunci se va executa metoda implicit execute() a aciunii. Aceast metod va returna un cod definit: Succes sau Error. n funcie de aceste rezultate, utilizatorul va fi redirecionat ctre pagini sau alte aciuni diferite. Aciunile sunt definite n interiorul tag-ului <action>, iar rezultatele aciunii ntre tag-urile <result>.
Fig.3.1.2.3 Struts.xml 7. ActionInvocation: odat ce aciunea returneaz un rezultat, ActionInvocation este responsabil pentru gsirea rezultatelor asociate cu codul rezultat (Succes sau Error) al aciunii ce este mapat in Struts.xml. 38
8. Interceptor: interceptorii sunt invocai dup i inainte ca o aciune s fie executat, i permit ca anumite sarcini s fie executate fr probleme i s fie transformate n componente reutilizabile. 9. Action: modelul MVC este implementat de ctre componenta action. O aciune este o incapsulare de apeluri la logica business ntr-o singur unitate de lucru. 10. Result: rezultatele trasnlateaz starea aplicaiei ntr-o reprezentare vizual cu care utilizatorul poate interaciona. Aciunea este responsabil pentru alegera rezultatului care va rspunde la o anumit cerere. Un tip de rezultat este JSP sau altele. 11. Template: este pagina de vizualizare care red de fapt rspunsul la utilizator. 12. ObjectFactory: este unul dintre cele mai importante clase din framework. Toate obiectele create sunt instaiate cu ObjectFactory. Aadar, Struts 2 folosete mecanismul de tag. Aceast caracteristic promoveaz rutilizarea codului i abstractizeaz codul Java din fiierele JSP. Permite integrarea n instrumentele de dezvoltare JSP. Struts 2, este, de fapt, un framework aplicat peste tag-urile de JSP. 3.1.3 Hibernate i BD
Hibernate este o librrie ORM (object-relational mapping) pentru limbajul Java, oferind un schelet pentru maparea obiectului din model la o baz de date relaional. Este puternic, de o performan ridicat n persistena obiectelor relaionale i n serviciul de interogri pentru orice aplicaie Java. Hibernate mapeaz clasele Java din model la tabelele din baza de date. Hibernate st ntre obictele tradiionale i serverul de baze de date pentru a manipula toat munca n persistena acelor obiecte bazate pe un mecanism adecvat O/R i pattern-uri.
Fig. 3.1.3.1 Hibernate 39
Avantajele Hibernate: Hibernate are grij de maparea claselor la tabele corespunztoare din baza de date folosind fiiere XML i fr scriere de cod. Ofer API-uri simple pentru stocarea i obinerea obictelor direct ctre i de la baza de date. Dac este vreo schimbare n baza de date sau n orice table, atunci este nevoie doar de schimbarea proprietilor din fiierul XML. Abstractizeaz tipurile nefamiliare SQL i ofer un lucru n jurul obiectelor Java. Hibernate nu necesit un server de aplicaii ca s opereze. Manipuleaz asociaii complexe ale obicetelor din baza de date. Minimalizeaz accesul la baza de date. Ofer interogri simple de date. Arhitectura Hibernate: Arhitectura Hibernate este stratificat, i nu este nevoie s se cunoasc API-urile care stau la baz. Hibernate face folosirea bazei de date i a configurrii de date s ofere servicii persistente (i obiecte persistente) aplicaiei. Figura Fig.3.1.3.2 este o perspectiv la nivel nalt a arhitecturii aplicaiei Hibernate.
Fig. 3.1.3.2 Arhitectura Hibernate
40
Figura Fig. 3.1.3.3 este o perspectiv mai detaliat privind arhitectura unei aplicaii Hibernate, cu cteva clase importante. Hibernate utilizeaz o varietate de API-uri Java existente, Java Transaction API (JTA), Java Naming and Directory Interface (JNDI). JDBC ofer un nivel de abstractizare a funcionalitilor obinuite la bazele de date relaionale, permind acceptarea de ctre Hibernate a oricrei baze de date cu JDBC. JNDI i JTA permit ca Hibernate s fie integrat cu serverele de aplicaie J2EE.
Fig. 3.1.3.3 Stratificare Hibernate
Urmtoarea seciune red o descriere a fiecrei clase de obiecte implicat n arhitectura aplicaiei Hibernate. Configuration Object: Configuration Object este primul obiect Hibernate care se creaz n orice aplicaie Hibernate i, de obicei, este creat o singur dat pe parcursul iniializrii aplicaiei. Reprezint o configuraie sau proprieti de fiier necesare. Configuration object ofer dou componente cheie: Database Connection: aceasta este manipulat prin intermediul uneia sau mai multor fiiere de configurri suportate de ctre Hibernate. Aceste fiiere sunt hibernate.properties i hibernate.cfg.xml. 41
Class Mapping Setup Aceast component creaz conexiunea ntre clasele Java si tabelele din baza de date. SessionFactory Object: Configuration Object este folosit pentru a crea un obiect SessionFactory care configureaz Hibernate pentru aplicaie folosind fiierul de configurare furnizat i permite ca un Session object s fie instaniat. SessionFactory este un obiect thread safe i este folosit de ctre fierele de execuie unei aplicaii. Este creat pe parcursul pornirii aplicaiei i este pstrat pentru a fo folosit mai trziu. Este necesar un obiect SessionFactory per baz de date, folosindu-se un fiier separat pentru configurare. Aadar, dac se utilizeaz baze de date multiple, atunci se vor crea obiecte multiple SessionFactory. Session Object: O sesiune este utilizat pentru a crea o conexiune fizic cu o baz de date. Session object este proiectat pentru a fi instaniat de fiecare dat cnd o interaciune cu o baz de date este necesar. Obiectele persistente sunt salvate i obinute prin Session object. Obiectele de sesiune nu ar trebui inute deschise pentru o perioad lung de timp, deoarece nu sunt thread safe i ar trebui create i distruse doar la nevoie. Transaction Object: O tranzacie reprezint o unitate de lucru cu baza de date, iar majoritatea RDBMS suport funcionalitatea tranzaciei. Tranzaciile sunt gestionate de un manager de tranzacii care st la baz i tranzacii (din JDBC sau JTA). Acesta este un obiect opional iar aplicaiile Hibernate pot s aleag s nu foloseasc aceast interfa ci administrnd tranzaciile n propriul lor cod din aplicaiei. Criteria Object: Obiectele Criteria sunt utilizate pentru a crea i executa interogri criteria orientate obiect pentru a obine obiecte. Instalarea Hibernate: Dup instalarea ultimei versiuni a fiierului de instalare, trebuie s se execute civa pai simpli. Setarea variabilei CLASSPATH trebuie fcut corespunztor, altfel vor exista probleme la compilarea aplicaiei. Se copiaz toate fiierele cu librrii din /lib n CLASSPATH, i se schimb variabila classpath pentru a include toate JAR-urile; 42
La final se copiaz fiierul hibernate3.jar n CLASSPATH; acest fiier se gsete n directorul rdcin al instalrii i este JAR-ul principal de care Hibernate are nevoie pentru a funciona. Configurarea Hibernate: Hibernate necesit cunoaterea n avans legat de unde s gseasc informaia de mapare care definete cum sunt legate clasele Java de tabelele din baza de date corespunztoare. De asemenea, mai necesit un set de setri de configurare asociate bazei de date i altor parametrii. Toat aceast informaie este furnizat ca un fiier de proprieti Java standard numit hibernate.properties,, sau ca un fiier XML numit hibernate.cfg.xml. n aplicaia dezvoltat Smart E-mail Client este folositfiierul formatat hibernate.cfg.xml pentru a specifica proprietile necesare Hibernate. Majoritatea proprietilor au valori implicite i nu este necesar specificarea lor n fiierul de proprieti, numai dac trebuie. Acest fiier este pstrat n directorul rdcin \src. Proprietile Hibernate: Urmtoarea list conine cele mai importante propriti necesare pentru configurarea bazei de date: 1. hibernate.dialect aceast proprietate genereaz face ca Hibernate s genereze SQL corespunztor pentru baza de date aleas. 2. hibernate.connection.drive_class clasa driver JDBC. 3. hibernate.connection.url URL JDBC pentru instana bazei de date. 4. hibernate.connection.username numele utilizatorului bazei de date. 5. hibernate.connection.password parola bazei de date. 6. hibernate.connection.pool_size limiteaz numrul conexiunilor. Hibernate cu baza de date MySQL: MySQL este una dintre cele mai populare baze de date open-source disponibil n ziua de azi. n imaginea Fig.3.1.3.4 se gsete fiierul aplicaiei Smart E-mail Client hibernate.cfg.xml i configurrile don acesta, ce conine proprietile menionate n lista de mai sus, plasat n directorul \src. Baza de date ctre care se face conexiunea trebuie s fie creat i populat cu tabele, i trebuie s existe un nume de utilizator i parol. 43
Fig.3.1.3.4 hibernate.cfg.xml Configurarea prezentat conine tag-urile <mapping> care sunt asociate fiierelor hibernate-mapping, despre care se va discuta n rumatoarele subseciuni. Hibernate Sessions: O sesiunea este folosit pentru a se face o conexiune fizic cu baza de date. Obiectele de sesiune nu ar trebui pstrate pentru mult timp, pentru c nu sunt thread safe. Funcia principal a sesiunii este de a oferi, de exemplu, operaii de creare, citire i scriere a claselor entitilor mapate. Instanele pot exista n una dintre cele trei stri: transient o nou instan a clasei persistente, care nu este asociat cu o sesiune i nu are o reprezentare n baza de date i nici o valoare idenificator, este considerat trazitorie de ctre Hibernate. 44
persistent se poate face o instan tranzitorie prin asociera ei cu o sesiune; o instan persistenta are o reprezentare n baza de date, o valoare identificator i este asociat cu o sesiune. detached o dat ce s-a nchis sesiunea Hibernate, instana persistent va deveni o instan detaat. O instan de sesiune este serializabil dac clasele ei persistente sunt serializabile. Un exemplu de tranzacie din aplicaia Smart E-mail Client arat n felul urmtor, ca n figura Fig.3.1.3.5, unde se gasete codul metodei de inserare a unui utilizator n baza de date . Dac sesiunea arunc o excepie, tranzacia trebuie anulat (roll back) i sesiunea trebuie descrcat. Fig.3.1.3.5 tranzacie Hibernate
Clasele persistente Hibernate: ntregul concept Hibernate este de a lua valorile din atributele claselor Java i de a le persista ntr-un tabel din baza de date. Un document de mapare ajut Hibernate cum s extrag valori din clase i s le mapeze la un tabel i la cmpurile asociate din acesta. Clasele Java a cror obiecte sau instane vor fi stocate n tabelele din baza de date, sunt numite clase persistente n Hibernate. Hibernate lucreaz cel mai bine dac aceste clase urmeaz cteva reguli simple, cunoscute ca 45
model de programare POJO (Plain Old Java Object). Exist cteva reguli principale ale claselor persistente, dar cu toate acestea, nici una dintre aceste reguli nu sunt cerine obligatorii. Toate clasele Java care vor persista au nevoie de un constructor implicit. Toate clasele ar trebui s conin un ID pentru a permite identificarea mai uoar a obiectelor n Hibernate i baza de date; aceast proprietate mapeaz la coloana care conine cheia primar a tabelei din baza de date. Toate atributele care vor fi persistate trebuie declarate folosind modificatorul de acces private, i trebuie s aib metode get i set definite n stilul JavaBean. Caracteristic central Hibernate, proxie-urile, depind de clasele persistente care sunt non-finale, sau de implementatea unei interfee care declar toate metodele publice. Toate clasele care nu motenesc sau implementeaza clase specializate sau interfee recomandate de EJB. Numele POJO este folosit pentru a evidenia dac un obiect dat este un obiect Java, i nu un obiect special i n particulat nu un Enterprise JavaBean. Un exemplu POJO este dat n exemplul din figura Fig.3.1.3.6, care este o clas din aplicaia Smart E-mail Client. Bazat pe cteva reguli menionate mai sus se poate defini clasa UserDO care este o clas POJO, dup cum urmeaz:
46
Fig.3.1.3.6 clasa model UserDO 47
Fiierele de mapare Hibernate: Maparea unui obiect relaional este, de obicei, definit ntr-un document XML. Acest fiier instruiete Hibernate cum s mapeze clasele definite la tabelele din baza de date. Majoritatea utilizatorilor aleg s scrie fiierul XML manual, dar exist multe instrumente de generare a fiierului de mapare. Clasa prezentat n figura Fig.3.1.3.6, definit ca i clas POJO ale crei obiecte vor persista n tabelele definite n figura Fig.3.1.3.8. Va exista un tabel corespunztor pentru fiecare obiect pentru care se dorete persisten. Obiectul va fi stocat i obinut dup aceea n i din tabela RDBMS, prezentat n figura Fig.3.1.3.7.
Fig.3.1.3.7 Tabela BD
48
Fig.3.1.3. Fiier de mapare Hibernate
Documentul de mapare va fi salvat ntr-un fiier cu formatul <classname>.hbm.xml, n cazul de fa user.hbm.xml. Cteva detalii despre maparea elementelor folosite n fiierul de mapare: Documentul de mapare este un document XML care are <hibernate-mapping> ca element rdcin, ce conine toate elementele <class>. Elementele <class> sunt utilizate pnetru a defini mapri specifice din clasele Java ctre tabelele din baza de date. Numele clasei Java e specificat folosind atributul name al clasei element, iar numele tabelului din baza de date este specificat folosind atributul table. 49
Elementul <meta> este opional i poate fi folosit pentru a crea descrierea clasei. Elemetul <id> mapeaz atributul unic ID din clas la cheia primar din tabela din baza de date. Atributul name al elementului id se refer la proprietatea din clas, iar atributul column se refer la coloana din tabela din baza de date. Atributul type reine tipul de mapare Hinernate, aceste tipuri de mapare vor fi convertite din tipurile de date SQL. Elemetul <generator> cu care elementul id este folosit pentru a genera valoarea cheii primare. Elementul <property> este utilizat pentru a mapa proprietatea clasei Java la coloana din tabela din baza de date. Atributul name al elementului se refer la proprietatea din clas, iar atributul column se refer la coloana din tabela din baza de date. Atributul type reine tipul de mapare Hinernate, aceste tipuri de mapare vor fi convertite din tipurile de date SQL. Interogrile Hibernate Criteria: Hibernate ofer moduri alternative de manipulare a obiectelor i ntoarce date disponibile n tabelele RDBMS. Una dintre metode este Criteria API care permite construirea unui obiect Criteria unde se pot aplica reguli de filtrare i condiii logice. Interfaa Hibernate Session ofer metoda createCriteria() care este utilizat pentru crearea unui obiect Criteria care returneaz o instan a clasei persistente atunci cnd aplicaia execut interogarea Criteria. Restricii cu Criteria: Se poate folosi metoda add() valabil pentru obiectul Criteria pentru a aduga restricii interogrilor. Urmtorul exemplu, cel din figura Fig. 3.1.3.9, reprezint modul n care Criteria i restriciile sunt folosite.
Fig.3.1.3.9 Tranzacie cu restricii
50
3.1.4 JavaMail API
Tehnologia cea mai important care este folosit la baza proiectrii aplicaiei Smart E- mail Client este J avaMail API. JavaMail este un API folosit pentru a compune, scrie i citi mesaje electronice. Ofer un framework protocol-independent i platform-independent pentru trimiterea i primirea de mesaje. Pachetele javax.mail i javax.mail.activation conin clasele JavaMail API. Facilitatea JavaMail poate fi aplicat asupra multo evenimente. Poate fi folosit la momentul nregistrrii ultilizatorului (trimind diferite notificri), pentru parola uitat, trimind notificri pentru actualizri importante. Aadar pot fi multiple ntrebuinri ale JavaMail API. JavaMail este proiectat pentru a face mai uoar adugarea capabilitii potei electronice la o aplicaie, n timp ce suport crearea de interfee utilizator foarte sofisticate. Include clase adecvate care ncapsuleaz funcii i protocoale de mail obinuite. Este compatibil cu ale pachete pentru platforma Java, cu scopul de a facilita utilizarea sa cu alte API-uri Java, i folosete modele familiare de programare. JavaMail API este proiectat, prin urmare, pentru a satisface diferite cerine de dezvoltare i de rulare. JavaMail ofer elemente care sunt folosite pentru a construi o interfa ctre un sistem de mesagerie, incluznd componente de sistem i interfee. Include cteva clase care implementeaz RFC 822 i standardele mesageriei MIME. Aceste clase sunt livrate ca i parte din pachetul de clase JavaMail. Componentele arhitecturale ale JavaMail sunt stratificate dup cum urmeaz, i sunt prezentate n figura Fig.3.1.4.1 : Abstract Layer declar clase, interfee i metode abstracte cu intenia de a suporta manipularea funciilor de mail pe care toate sistemele de mail le suport. Elementele API care cuprind Abstract Layer sunt extinse cu scopul de a suporta tipuri de date standard. Implementation layer implementeaz o parte din abstract layer folosind standarde internet, RFC 822 i MIME. JavaMail folosete JavaBeans Activation Framework (JAF) cu scopul de a ncapsula datele despre mesaj, i de a manipula comenzi intenionate s interacioneze cu aceste date. Interaciunea cu datele despre mesaj ar trebui s 51
aib loc prin intremediul JAF-Aware JavaBeans, care nu sunt oferite de JavaMail API. Proiectarea arhitecturii stratificate permite clienilor s foloseasc aceleai apeluri JavaMail API pentru a trimite, primi sau stoca o varietate de mesaje utliznd diferite tipuri de date de la diferite stocri de mesaje, i utiliznd diferite protocoale de transport ale mesajelor.
Fig.3.1.4.1 Arhitectura JavaMail
Ierarhia de clase JavaMail: Figura Fig.3.1.4.2 ilustreaz clasele majore i interfeele din JavaMail API. Fig.3.1.4.2 Clase JavaMail 52
Clasa Message este o clas abstract care definete un set de atribute i un coninut pentru mesaj. Atributele clasei Message specific informaii de adresare i definesc structura coninutului, incluznd tipul coninutului. Implementeaz interfaa Part care definete atribute necesare pentru a defini i formata datele coninutului din obiectul Message. Clasa Message are atributele From, To, i altele necesare pentru rutarea mesajului prin sistemul de stransport. JavaMail API suport obiectele Message multipart, unde fiecare Bodypart i definete propriul su set de atribute i coninut. Stocarea mesajelor i obinerea mesajele sunt stocate n obiecte Folder. Un obiect Folder poate conine subfoldere la fel de bine ca mesaje, acestea oferind o ierarhie tree-like. Clasa Store definete o baza de date care reine ierarhia folder mpreun cu mesajele sale. De asemenea, specific protocolul de accea care acceseaz dosarele i obine mesajele din ele. Ofer metode de stabilire a conexiunii cu baza de date. Compunerea mesajelor i transportul un client creeaz un mesaj nou prin instanierea unei sublase adecvate Message. Mesajele sunt trimise prin invocarea metodei Transport.send. Clasa Transport modeleaz agentul de transport care ruteaz mesajul catre adresa destinaie. Clasa Session definete proprieti globale care definesc la rndul lor interfaa dintre un client de mail i reea. Componentele din sistemul JavaMail folosesc obiectul Session pentru a seta i a primi proprieti specifice. Clasa Session ofer, de asemenea, un obiect de sesiune autentificat implicit pe care aplicaiile desktop pot s le partajeze. Figur Fig.3.1.4.3 ilustreaz procesul de manipulare JavaMail al mesajelor. Fig.3.1.4.3 Procesul de manipulare al mesajelor 53
JavaMail este destinat s ndeplineasc umtoarele funcii care cuprind procesul de manipulare standard pentru o aplicaie client tipic. Creeaz un messaj coninnd o colecie de atribute antet i un bloc de date care au tipul de dat specificat n cmpul antetului Content- Type. JavaMail folosete interfaa Part i clasa Message pentru a medini mesajul. Creeaz un obiect Session, care autentific utilizatorul i controleaz accesul la stocarea mesajului i la transport. Trimite mesajul la lista destinatarului. Obine mesajul de unde este stocat. Execut o comand de nivel nalt pentru obinerea mesajului, cum este view sau print care sunt destinate s fie implementate prin JAF-Aware JavaBeans.
54
Concluzii
Pota electronic sau e-mail este unul dintre cele mai importante instrumente de comunicare n toate domeniile, ncepnd de la locul de munc, pan la uzul personal. Viitorul potei electronice este promitor, deoarece este un sistem indispesabil comunicrii, iar caracterul su asincron l face s se diferenieze de alte mijloace de comunicare. Se va ncerca o dezvoltare ct mai avansat pentru a asigura o securitate maxim, deoarece, chiar dac n prezent sistemele de pot electronic sunt destul de sigure, la un moment dat, tot se gsete o vulnerabilitate care poate fi atacat. Deoarece contactul cu utilizatorul este foarte important, interfaa joac un rol bine definit i de multe ori aceasta atrage cel mai mult, mai ales utilizatorii neexperimentai. n concluzie, pota electronic este nc un mediu tnr de comunicare, iar ntrebarea legat de ct de mult va evolua acest sistem, cum se va schimba pe viitor i cum va influena interaciunea i comunicarea n rndul oamenilor, rmne n minile cercettorilor, proiectanilor, dezvoltatorilor i nu n ultimul rnd, n minile utilizatorilor.
55
Referine i Bibliografie
Capitolul 1 - http://www.supermemo.com/articles/e-mail.htm - Borenstein N. & Freed N. (1992): MIME-Mechanisms for Specifying and Describing the Format of Internet Message Bodies; - Blter O. (1995): Electronic mail from a user perspective: Problems and remedies; - Blter O. (1997b): Strategies for organising email messages; - Dimbleby R. & Burton G. (1995): More than words. An introduction to communication; - Dix A., Finlay J., Abowd G. & Beale R. (1993): Human-Computer Interaction; - Dumais S. T. & Landauer T. K. (1983): Using examples to describe categories; - Fisher J. (1991): Dening the novice user; - Grudin J. (1988): Why CSCW applications fail: problems in the design and evaluation of organisational interfaces; - Hjalmarsson A., Oestreicher L. & Wrn Y.: Human Factors in Electronic Mail System Design; - Jakobs K., Procter R. & Williams R. (1996): Electronic messaging; - Jones S., Bock G. & Brassard A.(1990): Using Electronic Mail: Themes Across Three User Interface Paradigms; - Pliskin N. (1989): Interacting with electronic mail can be a dream or a nightmare: a users point of view; - Mackay W. (1988): More Than Just a Communication System: Diversity in the use of Electronic Mail; - Maes P. (1993): Learning Interface Agents; - Palme J. (1998): Email conversation; Capitolul 2 - Crispin, M.: Internet Message Access Protocol http://tools.ietf.org/html/rfc3501 - Crispin, M.: Ten Commandments of How to Write an IMAP client http://www.washington.edu/imap/documentation/commndmt.txt.html 56
- Freed, N., Borenstein, N.: Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies http://tools.ietf.org/html/rfc2045 - Freed, N., Borenstein, N..: Multipurpose Internet Mail Extensions (MIME) http://tools.ietf.org/html/rfc2046 - Crispin, M., Murchison, K.: Internet Message Access Protocol http://tools.ietf.org/html/rfc5256 - Gray, T.: Message Access Paradigms and Protocols ftp://ftp.cac.washington.edu/mail/imap.vs.pop - IMAP: https://ru.wikipedia.org/wiki/IMAP http://ham.elcom.pub.ro/asi/slides/smtp-pop-imap-rev1.5.pdf http://derivat.ro/cursuri/automatica/an2/an2_derivat.ro_protocoale-de- comunicatii_9%203%20Email.pdf Capitolul 3 - Struts 2: http://publib.boulder.ibm.com/infocenter/rtnlhelp/v6r0m0/index.jsp?topic=%2Fcom.ibm.etool s.struts.doc%2Ftopics%2Fcstrdoc001.html http://tapas4web.blogspot.ro/2011/04/struts2-architecture-at-glance.html http://www.dzone.com/tutorials/java/struts-2/struts-2-tutorial/struts-2-tutorial.html - Hibernate: http://www.tutorialspoint.com/hibernate/hibernate_quick_guide.htm - JavaMail API http://www.oracle.com/technetwork/java/javamail-1-149769.pdf
57
Anex
IMAP Internet Mail Access Protocol SMTP Simple Mail Transfer Protocol RFC Request For Comment HTML - HyperText Markup Language MTA Mail Transfer Agent MUA Mail User Agent DNS Domain Name System MX-Record - Mail eXchage Record UID User ID MIME - Multipurpose Internet Mail Extentions JSF Java Server Faces JSP Java Server Pages HTTP Hypertext Transfer Protocol Java EE Java Enterprise Edition EJB - Enterprise JavaBeans MVC Model View Controller XML - Extensible Markup Language POJO - Plain Old Java Object
O abordare ușoară a comunicării profesionale: Ghidul practic de comunicare profesională și cele mai bune strategii de comunicare în afaceri din punct de vedere scris și interpersonal