Tag: ‘javamail’
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!