Posts tagged ‘pop3’

Lendo seus e-mails com Java

Lembro de um camarada me dizendo: “Fiz um browser em Java com menos de 20 linhas de código” – Acredite, era verdade! Okay! Okay! Sem recurso nenhum básicamente, apenas a barra de endereços, mas e daí? Assim como esse meu amigo, provavelmente você já tem aquela classe para envio de e-mails guardada na manga, muito útil naqueles dias em que seu chefe pressiona: “É pra ontem!”

Mas… você já tentou montar seu cliente de email? “Pra quê, cara? Eu uso o Gmail” – você irônicamente me responderia, e na tréplica eu diria: Ué! Pra quê o Gmail, se você pode fazer melhor meu rapaz! (sarcástico, não?) Mãos a obra!

O pacote javax.mail.* fornece uma série de recursos para protocolos de internet, utilizando-o como uma receita de bolo o sucesso é garantido. Basicamente vamos criar um programa que monitore a caixa de entrada de um determinado endereço POP3.

Coloque os dados de acesso ao mail em um arquivo config.properties, assim:


pop.hst=pop.lucianosilva.com.br
pop.usr=boss@lucianosilva.com.br
pop.pwd=ABC123#XYZ

A classe abaixo se encarregará de obter estes dados de conexão:

public class PropertiesMail extends Properties{
private static final String ARQUIVO_CONFIGURACAO = "C:\\config.properties";

public PropertiesMail(){
try{
FileInputStream file = new FileInputStream( ARQUIVO_CONFIGURACAO);
this.load( file );

}catch(IOException e){
e.printStackTrace();
}
}

public String getHost(){
return this.getProperty("pop.hst");
}

public String getAccountUser(){
return this.getProperty("pop.usr");
}

public String getAccountPassword(){
return this.getProperty("pop.pwd");
}

}

Agora, a caixa de correios. Veja que o processo abaixo básicamente segue um roteiro, mas é óbvio que isto é feito apenas para a leitura.

public class Inbox{

public Inbox(){
try {
init();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private void init() throws MessagingException, IOException{
// Instância das Propriedades de Conexão
PropertiesMail ppm = new PropertiesMail();
// Seta o endereço do host
Properties pp        = System.getProperties();
pp.put("mail.pop3.host", ppm.getHost());

// Se o servidor exigir autenticação segura
Authenticator auth = new PopAuthentication();
Session session    = Session.getDefaultInstance(pp, auth);

Store store           = session.getStore("pop3");
// Dados básicos de conexão
store.connect(ppm.getHost(), ppm.getAccountUser(), ppm.getAccountPassword());

// Obtem o diretório (INBOX)
Folder folder       = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);

// ler as mensagens do diretório
Message message[] = folder.getMessages();

processMessage(message);

// Close connection
folder.close(false);
store.close();
}

private void processMessage( Message[] message ) throws MessagingException, IOException{
if( message == null || message.length==0 ){
System.out.println("Nenhuma mensagem encontrada");
}else{
for (int i=0, n=message.length; i
System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject());
String content = message[i].getContent().toString();
System.out.print(content);
}// for end
}
}

public static void main(String[] args){
Inbox inbox = new Inbox();
}
}

Muito fácil não? Mas este é um exemplo simples mesmo, saiba que é possível fazer todo o controle de um cliente de e-mail não só Ler, como Escrever, Apagar, Mover, etc.

Downloads

Projeto utilizado para este post.
JavaMail API

Veja mais sobre JavaMail

JavaMail API
jGuru: Fundamentals of the JavaMail API
WebMail in Java: Reading E-mail
Have a fun!