Galera, eu fiz uma notificação por email pelo JavaMail, eu to recebendo o email legal, o problema é que na primeira vez que eu recebo o email o form abre normal, na segunda abre duas janelas, na terceira já abre quatro e assim vai…
Meu código tá assim:
public void lerEmail() {
try {
campolog.setContentType("text/html");
// (1) Informações do Servidor
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.required", "true");
props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
Session session = Session.getInstance(props);
// (2) Conexão com o servidor
Store store = session.getStore("imaps");
store.connect("smtp.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());
// }
// }
// (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;
Folder 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 todas os emails.
Message[] 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(Flag.SEEN, true);
}
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
// first batch of messages
int start = 1;
int end = pastaEmail.getNewMessageCount();
while (start <= end) {
// new messages that have arrived
start = end + 1;
end = pastaEmail.getNewMessageCount();
}
// Adicionando um MessageCountListener para "ouvir" novas mensagens
pastaEmail.open(Folder.READ_WRITE);
pastaEmail.addMessageCountListener(new MessageCountAdapter() {
@Override
public void messagesAdded(MessageCountEvent ev) {
Message[] bb = ev.getMessages();
for (Message msg : bb) {
System.out.println("Email Novo.....");
Notificacao ntf = new Notificacao();
ntf.setVisible(true);
dispose();
}
}
});
// Aguardando novas mensagens
for (;;) {
((IMAPFolder) pastaEmail).idle();
}
} catch (MessagingException ex) {
System.out.println(ex);
}
}
}, delay, interval);
//System.out.println("Total de E-mails: " + mensagens.length);
if (mensagens.length > 0) {
int ultimaMensagem = mensagens.length - 1;
emailPuro = mensagens[ultimaMensagem].getContent().toString();
jLabel3.setVisible(false);
//campolog.setText("Mensagem: " + mensagens[ultimaMensagem].getContent().toString());
extrair();
} else {
System.out.println("Não há E-mails não lidos.");
jLabel3.setVisible(false);
campobloco.setText("");
campotelefone.setText("");
campolog.setText("<html><head></head><body><b> <center><font face= Arial><font size=6><font color=black> NÃO HÁ RESPOSTA DO MORADOR! </font></center></b></body></html>");
}
pastaEmail.close(false);
store.close();
} catch (NoSuchProviderException e) {
System.out.println("Erro: " + e);
} catch (MessagingException | IOException e) {
lendo();
System.out.println("Erro: " + e.getMessage());
}
}