luni, 15 iunie 2009

Utilizarea protocoalelor POP3 si SMTP in JAVA - Partea 1

Obiective


Scopul acestui tutorial este acela de a prezenta operatiunile de baza necesare pentru lucrul cu protocoalele POP3 si SMTP pentru citirea, respectiv trimiterea e-mailurilor. Veti invata de-a lungul acestui tutorial cum se face conectarea prin intermediul Java la un server ce recunoaste protocolul POP3, cum se citesc si cum se sterg mesajele dintr-o casuta de mail prin intermediul acestui protocol. De asemenea se va utiliza protocolul SMTP pentru trimiterea de email-uri catre o adresa antecunoscuta.


1. Protocolul POP3

Post Office Protocol 3 (POP3). POP3 este o metoda de descarcare de mesaje email de pe un server. Prin intermediul JAVA vom exemplifica procedura de conectare la un server ce recunoaste protocolul POP3 si modalitate de citire a mesajelor existente in casuta de mail la care ne-am conectat.

Metoda pentru conectare la un server ce foloseste protocolul POP3 si pentru citirea mailurilor existente in aceasta :

import java.net.Socket

public void conectareServerPOP3(String pop3Server,String userName,
String password){
//socketul se foloseste pentru a se obtine conexiunea cu
//serverul POP3
Socket socket ;
//prin intermediul inputStream-ului se vor extrage mesajele de la serverul POP3
BufferedReader inputStream;
//prin intermediul outputStream-ului se vor trimite mesaje catre serverul POP3
PrintWriter outputStream;
//numarul unic de identificare a unui mesaj intr-o casuta de mail
String uidl = new String();

int port = 110; //pop3 mail port
//pop3Server este o variabila de tip String ce contrine de fapt adresa serverului ce lucreaza cu protocolul POP3; ex: pop.austincc.edu
socket = new Socket(pop3Server,port);
//deschidem canalul de citire a mesajelor de la serverul POP3
inputStream = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
//deschidem canalul de trimitere a mesajelor catre serverul POP3
outputStream = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()),true);
//luam un prim mesaj de la serverul POP3
//metoda validateOneLine() are rolul de a extrage un mesaj primit de la server si
//de a-l valida. Ea va fi explicata imediat
String connectMsg = validateOneLine();
//verificam daca serverul pop3 exista. Daca acesta exista mesajul ar trebui sa
//arate in felul urmator

Connected to pop3Server
+OK POP3 mailbox.austincc.edu
v2001.78 server ready

System.out.println("Connected to pop3Server " + connectMsg)
//acum se trimite username-ul la serverul pop3 si se verifica
//mesajul obtinut
outputStream.println("USER " + userName);
String userResponse = validateOneLine();

//Se afiseaza mesajul primit
System.out.println("USER " + userResponse);
//daca username-ul este corect raspunsul ar trebui sa arate in felul urmator

USER +OK User name accepted, password please

//se trimite parola catre serverul pop3 si se verifica mesajul obtinut
outputStream.println("PASS " + password);
System.out.println("PASS " + validateOneLine());

//daca parola este corecta raspunsul ar trebui sa arate in felul urmator


PASS +OK Mailbox open, 1 messages

System.out.println("Downloading Messages")
//dupa ce s-a realizat conexiunea le serverul POP3 se poate incepe
//downloadarea mesajelor din casuta de mail

try{
outputStream.println("STAT");
String stat = validateOneLine();
//se ia numarul de mesaje din casuta prin trimiterea
//mesajului STAT la server.
String numberMsgsStr=stat.substring(4,stat.indexOf(" ",5));
numberMsgs = Integer.parseInt(numberMsgsStr);
//se incepe citirea efectiva a mesajelor
msgNumber = 1;

while(msgNumber <= numberMsgs){ outputStream.println("UIDL " + msgNumber); uidl = validateOneLine(); while( !uidl.equals(“.”) ){ uidl = validateOneLine(); System.out.println(uidl+”\n”); } msgNumber++; } }catch(Exception e){ e.printStackTrace(); }
}

Metoda care citeste o linie de raspuns de la serverul POP3 si o valideaza :


private String validateOneLine(){
try{
//se citeste o linie din raspunsul primit de la serverul pop3 //prin intermediul canalului de comunicatii deschis in metoda //anterioara
String response = inputStream.readLine();

//daca textul mesajului incepe cu +OK inseamna ca acesta este un mesaj bun, comanda trimisa de noi anterior catre server este una acceptata
if(response.startsWith("+OK")){
return response;
}else{
System.out.println(response);
//Terminate the session.
outputStream.println("QUIT");
socket.close();
System.out.println(
"Premature QUIT on -ERR");
System.exit(0);
}//end else
}catch(IOException ex){
ex.printStackTrace();
}//end catch
//la aceasta linie de cod nu se va ajunge niciodata, insa ea este necesara pentru compilarea programului din cauza utilizarii blocului try- catch
return "Make compiler happy";
}//end validateOneLine()

Prin intermediul celor doua metode prezentate mai sus se realizeaza conexiunea la un server ce foloseste protocolul POP3 si sunt citite mesajele existente in casuta. Pentru conectarea la serverul POP3 este folosit un obiect de tip Socket din pachetul « java.net ». De asemenea pentru realizarea comunicatiei cu serverul prin trimiterea si primirea de mesaje se folosesc doua canale de comunicatie (BufferedReader inputStream; PrintWriter outputStream) .Este de mentionat ca protocolul POP3 nu utilizeaza niciun flag prin care sa diferentieze mesajele citite de acelea necitite din casuta de mail, asadar se va face citirea tuturor mesajelor

Niciun comentariu:

Trimiteți un comentariu