Receber emails pelo JavaMail

Alguém pode me dar uma luz?

Eu to com o seguinte código:

package com.damasceno.frames;

import javax.swing.GroupLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.LayoutStyle;
import com.damasceno.conexao.conectar;

import com.sun.xml.internal.fastinfoset.sax.Properties;
import com.swtdesigner.SwingResourceManager;

public class FramePrincipal extends JFrame {

private JList list;
 String host = "pop.gmail.com";
public FramePrincipal() {
	super();
	setIconImage(SwingResourceManager.getImage(FramePrincipal.class, "/com/sun/java/swing/plaf/windows/icons/Computer.gif"));
	setTitle("Projeto CATHO");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	JScrollPane scrollPane;
	scrollPane = new JScrollPane();

	list = new JList();
	scrollPane.setViewportView(list);
	final GroupLayout groupLayout = new GroupLayout((JComponent) getContentPane());
	groupLayout.setHorizontalGroup(
		groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
			.addGroup(groupLayout.createSequentialGroup()
				.addGap(33, 33, 33)
				.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 425, GroupLayout.PREFERRED_SIZE)
				.addContainerGap(34, Short.MAX_VALUE))
	);
	groupLayout.setVerticalGroup(
		groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
			.addGroup(groupLayout.createSequentialGroup()
				.addGap(29, 29, 29)
				.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 254, GroupLayout.PREFERRED_SIZE)
				.addContainerGap(58, Short.MAX_VALUE))
	);
	getContentPane().setLayout(groupLayout);
	pack();
	//

}

}

O que faltaria implementar para listar os emails em uma Jlist de um JFrame?
Estou usando Eclipse 3.3 + Plugin: WindowBuilder.
Obrigado.

Falta muita coisa. Você tem bastante tempo para ler o manual do JavaMail?
É bastante coisa que você precisa saber - acho que é coisa demais.
Você só precisa dos “subjects” (títulos) dos emails, ou precisa visualizá-los? Ou você precisa varrer emails para ver o seu conteúdo?
Eu mesmo acho que é mais fácil você disparar um leitor de email como o Outlook ou o Thunderbird, em vez de tentar criar o seu próprio leitor de emails.

Esse é meu JFrame…
Como eu ti falei eu preciso exibir em uma JList minha caixa de entrada.
Eu quero exibir o "titulo do e-mail, e quem enviou… Dai quando eu clicar “Ver relatorios” ele abrir pelo jasper.
To usando mock-javamail.jar, e o javamail.jar, eu criei uma classe chamada teste, no package: conexao
e tem o package Frames, que contem a classe FramePrincipal ( essa que eu colei )
A classe teste, está assim:

package com.damasceno.conexao;

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;

import com.sun.org.apache.bcel.internal.generic.POP;

public class conectar {
public static void main(String[] args) throws Exception {
String host = “pop.hp.org”;
String username = "selecao@hp.org";
String password = “hp123”;

	// Create empty properties
	Properties props = new Properties();

	// Get session
	Session session = Session.getDefaultInstance(props, null);

	// Get the store
	Store store = session.getStore("pop3");
	store.connect(host, username, password);

	// Get folder
	Folder folder = store.getFolder("INBOX");
	folder.open(Folder.READ_ONLY);

	// Get directory
	Message message[];
		message = folder.getMessages();
		for (int i=0, n=message.length; i<n; i++) {
			   System.out.println(i + ": " + message[i].getFrom()[0] 
			     + "\t" + message[i].getSubject());
			}




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

}

O relatório está sendo anexado em formato PDF ao email? Você precisa pelo menos aprender a pegar arquivos anexados. Talvez você precise do Jakarta Apache Commons-Email além do Javamail, já que qualquer coisa que seja diferente de analisar um texto puro e bobo é difícil de fazer em Javamail sem você ler um monte de documentação (por exemplo, RFCs sobre padrão MIME, MHTML ou outras coisas).

Hum…
Mas, é melhor fazer por partes…
Por exemplo, este é o meu código ( o que colei anteriormente ), ele contem algum erro?
Primeiro quero fazeer listar os e-mails na Jlist, depois penso neste botão “ver relatorios” e depois ainda tenho que colocar um JTextField e um button “Busca” pra buscar alguma palavra no e-mail, ex: no e-mail tem a palavra: administração
ai quando eu digitar administração vai selecionar os e-mails na Jlist que contem isso…
Mas primeiramente, tenho que fazer aparecer na Jlist…
Pode me ajudar?

Swing não é exatamente meu forte, e sou péssimo para ler os programas de outras pessoas (nem os meus próprios programas consigo entender, depois de algum tempo, se não estiverem cheios de comentários decentes). De qualquer maneira, a documentação de JList indica como é que se pode acrescentar um item a uma JList:

JList.getModel()
DefaultListModel.addElement

Bem, eu to neste codigo:
package com.damasceno.conexao;

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.swing.JOptionPane;

import com.sun.org.apache.bcel.internal.generic.POP;

public class conectar {
public static void main(String[] args) throws Exception {
String host = “mail.infocom.br”;
String username = "teste@cathoalagoas.com.br;
String password = “cathoteste”;

	// Create empty properties
	try {
		Properties props = new Properties();

		// Get session
		Session session = Session.getDefaultInstance(props, null);

		// Get the store
		Store store = session.getStore("pop");
		store.connect(host, username, password);

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

		// Get directory
		Message message[];
			message = folder.getMessages();
			for (int i=0, n=message.length; i<n; i++) {
				System.out.println(i + ": " + message[i].getFrom()[2] + message[i].getSubject());
				}
	
			// Close connection 
			folder.close(false);
			store.close();
	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, "ERRO");
	}





}

}

E entra no bloco catch informando a msg de ERRO, alguém sabe porque? ;/

a) Uma técnica que uso muito (há décadas) é a seguinte: se há alguma coisa que é um pouco mais complicada, não me preocupo nem um pouco com a interface gráfica. Crio primeiro uma versão do programa em modo console, bem pelada e com os dados bem “chumbados”, para poder ver se estou fazendo as coisas direito. Depois que tudo está pronto, aí transfiro para a parte gráfica. Isso costuma funcionar bem porque muitas vezes eu não tenho acesso nem a um debugger, como é o caso de tentar resolver um problema “em produção”.
No seu caso, em vez disto aqui:

 } catch (Exception e) {
JOptionPane.showMessageDialog(null, "ERRO");
} 

você pode mandar imprimir seu “stack trace” em algum lugar, desta maneira:

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

Do jeito que você fez, não dá para saber bulhufas o que ocorreu.
E tente rodar o seu programa com um debugger (uma IDE como o Eclipse ou NetBeans) e ponha um breakpoint nesse e.printStackTrace() para ver o que ocorreu.

tá dando o erro de athentication :
javax.mail.AuthenticationFailedException: authorization failed
at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:159)
at javax.mail.Service.connect(Service.java:288)
at javax.mail.Service.connect(Service.java:169)
at com.damasceno.conexao.conectar.main(conectar.java:30)

Porém não sei porque, se senha, login e servidor pop tão corretos :confused:
Será que é porque falta a PORTA?

O GMail é encrencado para conectar. Com ele você tem de usar mais alguns parâmetros. Veja este post (é a segunda vez, hoje, que tenho de ajudar alguém com o GMail:)

http://www.guj.com.br/posts/list/35431.java

Não cara, não é da gmail o e-mail, é da cathoalagoas, é uma empresa… eu tenho servidor pop, smtp e tudo mais… gmail foi só um exemplo…
Entendeu?

É que você, no seu primeiro programa, tinha escrito “gmail”. Conectar-se ao Gmail precisa daquelas palavras mágicas do tipo “Harry Potter”; quanto ao seu servidor de email corporativo, você precisa ver que tipo de autenticação é necessário.
Alguns não aceitam só usuário e senha, como você está tentando, requerendo um esquema bem mais complexo.
Veja se você consegue acessar a tal caixa com um leitor de email não muito cheio de frescuras, como o Thunderbird. Se não conseguir, então você tem de usar algum outro servidor, porque o MS Exchange (que normalmente é o servidor usado em empresas) é meio encrencado de usar com o JavaMail.

Vou ver o que consigo com este Thunderbird…
Nunca tinha ouvido falar antes, não sei nem onde baixa, mas vou à procura… :confused:
mas eu ainda acho que tem algod e errado no meu codigo, lá aceita javamail, quase certeza :confused: