Aprendendo Spring: #3 – Enviando e-mail

Tempo de leitura: menos de 1 minuto

https://gist.github.com/edermfl/f7c0030908e298e3248d9bcf9fec574a.js

SpringBoot: Enviando e-mail Fala aí galera, tudo certo?

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:

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:

Print do e-mail recebido, enviado pelo teste do SenderMailService

Espero que eu tenha ajudado.

Até mais pessoal.

5 Comentários


  1. 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

    Responder

    1. 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!

      Responder


Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *