Ricezione della posta con Java

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , | Posted on 08:32

Software Designer e programmatori non fanno molto uso della ricezione automatica della posta in arrivo.
E’ un peccato, perché la gestione automatica delle mail in ingresso offre impotanti vantaggi applicativi.
Proveremo a spiegare perché con l’aiuto di due semplici esempi.

Gestione delle risposte ad inviti/sondaggi


Supponiamo di spedire una mail ad un gruppo di persone per invitarli ad un evento, fare un sondaggio o qualsiasi altra cosa.
Dopo la spedizione, le risposte potranno essere gestite mediante:

  • una Form in una Internet Application (oneroso per l'utente),
  • una persona fisica che riceve, registra e risponde
  • una semplice replica alla mail

In quest'ultimo caso, non occorre avere una Internet Application né risorse umane impegnate.


Document Management


In un Document Management System, l’attività più noiosa per gli utenti è quella dell’upload dei documenti nel sistema. Questa attività può essere fatta gestire automaticamente dal sistema, inviando i documenti in una opportuna mailbox.


Come scrivere una classe per la gestione della posta in ingresso


Vedremo ora come gestire il recupero della posta con Java.

Libreria utilizzata


Per prima cosa occorre scaricare il package (javax.mail), di cui utilizzeremo le seguenti classi:

  • javax.mail.Session: rappresenta una session di lavoro in cui ci si interfaccia al server di posta.
  • javax.mail.Store: è la classe che rappresenta la radice in cui sono raggruppate le varie cartelle.
  • javax.mail.Folder: è la classe che rappresenta le cartelle che contengono i messaggi.
  • javax.mail.Message: è la classe che rappresenta i singoli messaggi.

Il codice passo passo


Per prima cosa occorre ottenere un oggetto Session:
Properties props = new Properties(); 
Session session = Session.getDefaultInstance(props, null); 

e connetterci allo Store attraverso il metodo getStore():

Store store = session.getStore(“pop3”);

Dall'oggetto Store, ci connettiamo al server attraverso tre parametri: host, username e password:

String host = "mypop.it";
String username = "myusername";
String password = "mypassword";
store.connect(host, username, password);

Una volta ottenuta la connessione possiamo accedere alla cartella contenente i messaggi in arrivo.

Se stiamo utilizzando un server POP, la cartella si chiamerà INBOX.
In caso di server IMAP invece, la cartella potrà chiamarsi INBOX o con qualsiasi altro nome sia stato impostato. Supponendo dunque che la cartella si chiami INBOX, possiamo connetterci ad essa attraverso il metodo getFolder() dell'oggetto store e poi aprire il folder con il metodo open():


Folder folder = store.getFolder("INBOX");     
folder.open(Folder.READ_WRITE); 

Possiamo utilizzare il metodo getMessage() per leggere un singolo messaggio , oppure, come nell'esempio seguente, utilizzare il metodo getMessages() per prendere tutti i messaggi:

Message[] messages = folder.getMessages(); 

A questo punto, per esempio, possiamo salvare tutti i messaggi in una directory:

for (int i = 0; i < messages.length; i++){
File mymail = new File(“C:/dir_email/nome_email.eml”);
OutputStream out=new FileOutputStream(mymail);              
mess[i].writeTo(out); 
mess[i].setFlag(Flags.Flag.DELETED,true); /*impostare flag=true per cancellare il file */
}
Infine, chidere folder e connessione:
folder.close(true); 
store.close(); 


Esempio completo

Un esempio completo può essere visionato qui: ServiceMail.java.

Comments Posted (0)

Posta un commento