Ricezione Email con Java Mail

DOMANDA:

In Java è possibile ricevere email?



RISPOSTA:

Anche qui, come nel post su come inviare un'email con Java, ci viene in aiuto la libreria javax.mail. Di seguito vi mostro un esempio basilare di come controllare la posta in una casella IMAPs (IMAP + SSL), sistema utilizzato ad esempio da Gmail. La classe di seguito controlla, tra i messaggi non letti, quello con un certo indirizzo email e restituisce l'oggetto Message manipolabile attraverso i suoi metodi.

import java.util.Properties;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;

/**
* Questo oggetto restituisce un Message 
* dalla casella di posta IMAPs
* a partire dall'indirizzo email
* @author Fabrizio
*/
public class GetEmailMessage {

 //indirizzo email da ricercare
 private String indirizzoMail;

 public GetEmailMessage(String indirizzoMail){
   this.indirizzoMail = indirizzoMail;
 }

 public Message riceviEmail() {

   int port = 465;

   Properties props = new Properties();

   props.put("mail.smtps.auth", "true");

   //da modificare indirizzi
   props.put("mail.smtps.user", "indirizzo@posta.it");
   props.put("mail.smtps.host", "smtp.gmail.com");

   props.put("mail.smtps.port", port);
   props.put("mail.smtps.starttls.enable", "true");
   props.put("mail.smtps.socketFactory.port", port);
   props.put("mail.smtps.socketFactory.class", 
             "javax.net.ssl.SSLSocketFactory");
   props.put("mail.smtps.socketFactory.fallback", "false");

   try{
     Session session = Session.getInstance(props, null);
     Store store = session.getStore("imaps");
     store.connect("smtp.gmail.com",
                   "indirizzo@posta.it",
                   "password");

     Folder cartella = store.getFolder("inbox");
     // apertura in sola lettura
     cartella.open(Folder.READ_ONLY);

     //recupero dei messaggi
     Message[] messaggi = cartella.getMessages();

     InternetAddress indirizzo = null;

     for(int i=0; i<messaggi.length; i++){
       indirizzo = (InternetAddress) messaggi[i].getFrom()[0];
       String mail = indirizzo.getAddress();

       //messaggio non letto e indirizzo cercato
       if(!messaggi[i].isSet(Flags.Flag.SEEN) &&
           mail.equalsIgnoreCase(indirizzoMail))
         return messaggi[i];
       }

   } catch(Exception e){
     System.out.println("Errore nella connessione al server");
   }
 }
}

Una volta recuperato il Message possiamo tranquillamente manipolarlo ed estrarlo attraverso i metodi che ci mette a disposizione Java (ad esempio .getFrom() per sapere il mittente, .getContent() per prendere corpo del messaggio e allegati, .getHeader() per le intestazioni, ecc..., ecc...).


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java