Enviar email con Spring

En este artículo aprenderemos a enviar correos con una cuenta gmail desde nuestra aplicación spring boot, ¡En menos de 3 minutos!

Descargando dependencia para el envío de email

Para comenzar, mediante maven, instalaremos la dependencia que nos proveera de las clases para el envío de email. Nos dirigimos a nuestro archivo pom.xml, añadiremos esta dependecia y compilaremos:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Configurando el archivo de propiedades

Ahora, nos dirigimos al archivo application.properties dónde añadiremos la configuración para el envío de emails:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.protocol=smtp
spring.mail.username=tucorreo@gmail.com
spring.mail.password=lacontraseñadetucorreo
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.quitwait=false

Servicio de envió de emails

Por último, crearemos un servicio, que será lo utilizaremos para enviar correos desde nuestra aplicación spring, SendEmail.java:

@Service
public class EnvioEmail {


    //Importante hacer la inyección de dependencia de JavaMailSender:
    @Autowired
    private JavaMailSender mailSender;

    //Pasamos por parametro: destinatario, asunto y el mensaje
    public void sendEmail(String to, String subject, String content) {

        SimpleMailMessage email = new SimpleMailMessage();

        email.setTo(to);
        email.setSubject(subject);
        email.setText(content);

        mailSender.send(email);
    }
}

De ésta forma, ya tendríamos listo nuestro servicio de envios de correos.

Un ejemplo de uso de esta funcionalidad, podría ser, enviar un mensaje a todos los clientes de la aplicación, y lo podríamos hacer de esta forma:

 public void sendEmail(List<Clients> listClients, String subject, String content) {

        for (Clients c : listClients) 
        { 
            SimpleMailMessage email = new SimpleMailMessage();

            //recorremos la lista y enviamos a cada cliente el mismo correo
            email.setTo(c.getEmail());
            email.setSubject(subject);
            email.setText(content);

            mailSender.send(email);
        }
    }

Modificando el parámetro to, por una lista de clientes que se recorrerá y obtendremos el email de cada cliente.