Tempo de leitura: menos de 1 minuto
https://gist.github.com/edermfl/f7c0030908e298e3248d9bcf9fec574a.js
Mais um post sobre meu aprendizado de Spring Boot. Já estou me virando bem com o framework, mas sempre aparece algo que ainda não sei fazer!!
Caso seja seu primeiro contato com Spring Boot e não acompanhou os posts anteriores, seguem abaixo os links. São leituras recomendadas:
- Aprendendo Spring
- Aprendendo Spring #1: Startup de Projeto
- Aprendendo Spring: #2: Configurando Beans
- Como tratar exceções e redirecionar erros usando Spring (Autoria de Débora Adorni)
Hoje falarei sobre envio de e-mail!
Dependências
Para enviar um e-mail via Spring, basicamente você precisará baixar em seu projeto a dependência Spring Boot Mail Starter.
Se tiver usando Maven, no arquivo pom.xml adicione estas linhas:
https://gist.github.com/edermfl/28a40731119acb115e09c181a95944d5
Caso esteja usando o Gradle, adicione a linha abaixo no arquivo build.gradle:
https://gist.github.com/edermfl/c1c0c8849d3ecfe423a64e569a26caf2
Ah… será necessário também um servidor SMTP (servidor responsável por enviar e-mail).
Eu usei o SMTP do Gmail mesmo. Só que usa-lo fora de um dos serviços a Google, é necessário criar permissão para que uma aplicação externa possa enviar e-mail. Penei bastante com isso, pois meus e-mails nunca eram enviados, sempre retornava uma mensagem de erro dizendo que não tinha permissão para isso.
Mas como já encontrei a solução vou deixar o link da solução aqui: POP e SMTP não funciona com o meu endereço de email.
Configuração
Será necessário informar ao Spring a configuração do servidor SMTP e conta de e-mail. Para isso, edite o arquivo application.properties na pasta resources, acrescentando as seguintes linhas:
https://gist.github.com/edermfl/f7c0030908e298e3248d9bcf9fec574a
Importante: a configuração acima descrita, remete ao envio de e-mail usando o protocolo de segurança TLS. Não consegui de forma alguma enviar e-mail de outra forma (por exemplo, usando a porta 25, envio não criptografado).
Para quem configura usando YAML, adicione as linhas abaixo:
https://gist.github.com/edermfl/2e7a1a1ab898c88139caeb1351f98a06
Observação: Caso você esqueça de fazer a configuração, o SpringBoot não conseguirá criar o bean (JavaMailSender) necessário para o envio do e-mail.
Implementação
Configuração pronta, basta agora implementar o serviço de envio de e-mail.
https://gist.github.com/edermfl/b0bde3786536859b498eb234941476e6
Basicamente, o que fizemos no serviço, foi solicitar ao Spring uma instância de JavaMailService já configurada com as informações que adicionamos no application.properties (linha5). O método enviar(), inicializa um objeto do tipo SimpleMailMessage (linha 8) e adiciona as informações: e-mail destinatário, assunto e texto do corpo do e-mail (linhas de 8 à 11). Por fim, o sender se encarrega de enviar o e-mail (linha 12).
Abaixo deixo código de um teste para o método enviar():
https://gist.github.com/edermfl/5f8a9ffd76e5fa7b75440e58e6978675
Eis um print do resultado do teste:
Espero que eu tenha ajudado.
Até mais pessoal.


Link permanente
Executando o passo-a-passo, me deparei com um mesmo erro que sempre encontro ao tentar criar uma aplicaçãozinha que dispara algum email.
erro: org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 534-5.7.14 Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/answer/78754 n75sm6671711qkl.26 – gsmtp
alguma luz? hehe
Link permanente
Olá Mateus, deixei a informação de como contornar este problema no post, no entanto na última edição que fiz no post, apaguei esta dica e nem percebi.
Restaurei está parte do post, clique aqui e seja feliz!
Depois comente aí se funcionou!
Link permanente
Funcionou perfeitamente! Valeu, abraços.
Link permanente
Link permanente