Listener javaMail - Gmail
Tags: java, productivity, gmail
Published: 2022-04-05 03:06:04

## Objetivo
Após muitas buscas com certas dificuldades em encontrar bons exemplos de projeto para leitura de e-mails automatizadas com Listerner, decidi criar este post, o objetivo demonstrar uma das possibilidades de desenvolvimento de um Listener conectado a um provedor de e-mails (Gmail).

## Dev
Este projeto exemplo está disponível no Github [mail-read](https://github.com/belo355/mail-read) aberto para contribuições e evoluções.  

## JavaMail
 
O projeto utiliza as funcionalidades das apis de integracao-web  e JavaMail via SprintBoot.


![principais dependencias do app](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r9txtmxwq5mq5pfo74gs.png)
A estrutura do app esta simplificada e não foi aplicado nenhum patterns especifico, a única organização realizada são as opções de execução via controller, ou Listener, sendo este segundo parecer mais útil e interessante, uma vez que assim existe a possibilidade de conectar ao provedor de email, e automaticamente após check-in de uma nova mensagem/e-mail a rotina e disparada. 
Outras funções auxiliares de controle de execução podem ser utilizadas para padronizar horários da rotina, para que assim recursos de maquina possam ser economizados, se assim necessário.

![estrutura do app](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iu736a9g9p19cbo5lag1.png)

## MailboxServiceImpl
Os principais serviços/métodos de conexão e persistência no provedor estão agrupados aqui, incluindo configuração, criação e ativação de listener na folder "INBOX" que representa a “caixa de entrada” padrão de qualquer e-mail.
As únicas configurações que se fazem necessário estão no arquivo de application.properties conforme abaixo:

![Configuracao necessaria no app java](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p4gv5em87d5h4lx15e4r.png)

## Provedor
Os provedores de e-mail, podem requisitar recursos de segurança para conexão segura com a caixa de email, sendo assim, é necessário seguir as diretrizes impostas para devida conexão. Configurações do Gmail: [Imap](https://support.google.com/mail/answer/7126229?hl=pt-BR#zippy=%2Cetapa-verificar-se-o-imap-está-ativado
)
## Ainda sobre Segurança 
Recentemente o Google tem realizado acoes para ainda mais assegurar o acesso a conta via qualquer aplicativo de terceiros, vide novas mudanças, talvez seja necessário habilitar o uso de “apps menos seguros” para que o listener proposto seja devidamente bem sucedido
[habilitar apps menos seguros](https://myaccount.google.com/lesssecureapps) 

![configuracao Google](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1maifdj9jf872d7i2fj.png)
Após clonar o projeto e configurar conforme desejado, na execução inicial, o seguinte retorno deve aparecer confirmado a conexão e adição do listener na pasta/folder especificada: 

![executando aplicacao](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rui0hu6540g1y0uorxqw.png)
## handleMessage 
Agora toda nova mensagem ao chegar nesta pasta será monitorada em "real time” e disparado a rotina handleMessage realizando alguma ação com o mensagem/e-mail ou com conteúdo disponível na mesma. 
![notificacao ao chegar um novo e-mail](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dihlownx4xovjxngv54o.png)
Espero ter ajudado de alguma forma :)
Fico a disposição para trocar ideia se necessário ;)
Abs.,