Spring Send Email
Primeiros passos
Primeiro, inicie seu projeto Spring utilizando o Spring Initializr. Caso não lembre como criar um projeto Spring, confira nesta aula: Spring Initializr
Tecnologias
- Spring Email
- G-mail
G-Mail senhas adicionais
Para podermos trabalhar com o envio de email em nosso app, precisamos fazer alguns ajustes antes. O serviço de envio de Google tem o recurso de adicionar senhas adicionais para finalidades específicas de uso (Senhas de App), no nosso caso, envio de e-mail através da nossa API.
Uma senha de app tem 16 dígitos e autoriza o acesso à sua Conta do Google por um dispositivo ou um app menos seguro. As senhas de app podem ser usadas apenas em contas que tenham a verificação em duas etapas
ativada.
Tendo habiltado a verificação em duas etapas, acesse o link do Google: App passwords entre em sua conta, e dê um nome para seu App:
clique em create e copie a senha que será usada para configurar nosso envio de email.
Configuração
Habilitar o envio de e-mail pelo Spring Boot integrando ao G-Mail é uma tarefa simples e prática. Siga as instruções abaixo:
Em seu pom.xml
adicione a dependência:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
Vou adicionar a dependência Lombok ao projeto para evitar códigos boilerplate. Fique à vontade para fazer o mesmo, se preferir.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
Criando as classes
Dentro do diretório raiz do seu projeto exemplo: src/main/java/com.iza.tec
Crie o pacote /email
Agora, dentro do pacote email, vamos criar duas classes para enviar nosso e-mail.
A classe Message
servirá de suporte ao nosso conteúdo, endereço de e-mail e remetente.
package com.iza.tec.email;
import lombok.Data;
@Data
public class Message{
//Este campo represente remetente do e-mail
private String from;
//Este campo represente destinatário do e-mail
private String to;
private String title;
private String body;
}
@Date
do lombok para criar nossos gettes e settes.E SendEmail
, que iremos configurar para fazer o envio do e-mail.
Ficará assim:
package com.iza.tec.email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
@Component
public class SendEmail {
@Autowired
private JavaMailSender mailSender;
public SendEmail(){
System.out.println("CRIANDO SEND EMAIL SERVICE REAL");
}
public void send(Message message){
SimpleMailMessage messageSender = new SimpleMailMessage();
messageSender.setFrom(message.getFrom());
messageSender.setTo(message.getTo());
messageSender.setSubject(message.getTitle());
messageSender.setText(message.getBody());
try{
Thread sender = new Thread(process(mailSender, messageSender));
sender.start();
}catch (Exception e ){
e.printStackTrace();
};
}
private Runnable process(JavaMailSender mailSender, SimpleMailMessage msg){
return new Runnable() {
@Override
public void run() {
mailSender.send(msg);
}
};
}
}
Em sua classe principal java, vamos criar um método para testarmos nosso envio de email:
package com.iza.tec;
import com.iza.tec.email.Message;
import com.iza.tec.email.SendEmail;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class SpringbootSendEmailApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootSendEmailApplication.class, args);
}
@Bean
public CommandLineRunner run(SendEmail sendEmail) throws Exception{
return args ->{
Message message = new Message();
message.setFrom("remetente@gmail.com");
message.setTo("destinatario@gmail.com");
message.setTitle("Enviando email de teste");
message.setBody("Este é um exemplo de e-mail enviado pelo Spring Send E-mail");
sendEmail.send(message);
};
}
}
Antes de iniciarmos a aplicação, precisamos configurar as propriedades no application.properties
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=seuemail@gmail.com
spring.mail.password=${EMAIL_PASSWORD}
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.ssl.enable=false
spring.mail.test-connection=false
Observe que na configuração o parâmetro spring.mail.password
espera uma variável chamada de ${EMAIL_PASSWORD}
, quando for executar sua aplicação, você definirá esta variável utilizando sua IDE ou informando como variáveis de ambiente no Spring.
Duas observações em relação a configuração acima, primeira seu e-mail e senha NÃO PODEM estar diretamente no
application.properties
e sim na configuração de seu servidor ou container e o G-Mail recomanda NÃO USAR sua senha pessoal, mas sim criar uma senha para esta finalidade em específica.
Rodando a aplicação
Após termos configurado as credenciais corretamente e colocado o e-mail de remetente e destinatário corretamente, podemos rodar a aplicação. Caso dê tudo certo, no console aparecerá a mensagem que colocamos:
E o e-mail será enviado:
E-mail enviado com sucesso✔️
Conclusão
Nesta aula, vimos como pode ser simples implementar o envio de e-mail pelo G-Mail. Pratique bastante e observe cada detalhe da implementação. Crie e-mails de teste para usar à vontade! Até a próxima.
