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");
}
}
}
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
Posta un commento