Bom, eu tenho uma janela de notificação, sempre que chega um email novo, eu recebo essa notificação, funciona? Funciona, só que assim, na primeira vez o form abre uma vez, na segunda já abre duas vezes, na terceira abrem QUATRO:
Alguém pode me dar uma ajuda?
Meu método pra ficar buscando o email:
public void atualizando() {
new Thread() {
@Override
public void run() {
try {
// (1) Informações do Servidor
Properties props = new Properties();
props.put("mail.imap.starttls.enable", "true");
props.put("mail.imap.host", "stmp.gmail.com");
props.put("mail.imap.port", "587");
props.put("mail.imap.auth", "true");
props.put("mail.imap.starttls.required", "true");
props.put("mail.imap.ssl.trust", "stmp.gmail.com");
Session session = Session.getInstance(props);
// (2) Conexão com o servidor
store = session.getStore("imaps");
store.connect("imap.gmail.com", "email@gmail.com", "senha");
pastaEmail = store.getFolder("INBOX");
pastaEmail.open(Folder.READ_WRITE);
// Fazemos a primeira leitura de emails.
int start = 1;
int end = pastaEmail.getMessageCount();
while (start <= end) {
// new messages that have arrived
start = end + 1;
end = pastaEmail.getNewMessageCount();
//end = pastaEmail.getNewMessageCount();
}
// Adicionando um MessageCountListener para "ouvir" novas mensagens
pastaEmail.addMessageCountListener(new MessageCountAdapter() {
@Override
public void messagesAdded(MessageCountEvent evt) {
try {
Message[] msgs = evt.getMessages();
for (Message msg : msgs) {
System.out.println(msg.toString());
Notifica nf = new Notifica();
nf.setVisible(true);
}
} catch (Exception ex) {
System.out.println(ex);
}
}
});
System.out.println("Buscando");
// Aguardando novas mensagens
for (;;) {
((IMAPFolder) pastaEmail).idle();
}
} catch (MessagingException ex) {
System.out.println(ex);
}
}
}.start();
}
}
Meu método pra ler o email:
public void lendo() {
campolog.setContentType("text/html");
try {
// (1) Informações do Servidor
Properties props = new Properties();
props.put("mail.imap.starttls.enable", "true");
props.put("mail.imap.host", "stmp.gmail.com");
props.put("mail.imap.port", "587");
props.put("mail.imap.auth", "true");
props.put("mail.imap.starttls.required", "true");
props.put("mail.imap.ssl.trust", "stmp.gmail.com");
Session session = Session.getInstance(props);
// (2) Conexão com o servidor
store = session.getStore("imaps");
store.connect("imap.gmail.com", "email@gmail.com", "senha");
// Buscar referência das pastas (Não precisa tirar o comentario, só se você quiser saber o nome das pastas).
// Folder[] nomePastas = store.getDefaultFolder().list("*");
// for (Folder pasta : nomePastas) {
// if ((pasta.getType() & Folder.HOLDS_MESSAGES) != 0) {
// System.out.println(pasta.getFullName() + ": " + pasta.getMessageCount());
// }
// }
//System.out.println("Total de E-mails: " + mensagens.length);
// (3) Escolhemos a pasta INBOX e colocamos no modo "Ler e Escrever (READ_WRITE)" (Isso "autoriza" a modificação de "Não Lido" para "Lido")
// SortTerm[] termos = new SortTerm[1];
// termos[0] = SortTerm.ARRIVAL;
pastaEmail = store.getFolder("INBOX");
pastaEmail.open(Folder.READ_WRITE);
// (4) Cria filtro para mensagens não lidas.
Flags visto = new Flags(Flags.Flag.SEEN);
FlagTerm filtroNaoLidas = new FlagTerm(visto, false);
// (5) Cria filtro para "ler" apenas um "endereço".
FromStringTerm filtroEmail = new FromStringTerm("@facilitamovel.com.br");
// (6) Combina os filtros em um só.
SearchTerm filtros = new AndTerm(filtroNaoLidas, filtroEmail);
//Message[] mensagens = pastaEmail.getMessages(); //Aqui pega todos os emails.
mensagens = pastaEmail.search(filtros); //Aqui filtra os emails de acordo com o que queremos.
for (int q = 0; q < mensagens.length; q++) {
mensagens[q].setFlag(Flags.Flag.SEEN, true);
}
mudarStatus();
BuscarEmails bc = new BuscarEmails();
bc.atualizando();
pastaEmail.close();
store.close();
} catch (NoSuchProviderException e) {
System.out.println("Erro: " + e);
} catch (MessagingException e) {
lerEmail();
System.out.println(e.getMessage());
}
}