Spring Boot: Correo SMTP con Mailgun

Las notificaciones por correo son muy importantes, las aplicaciones hoy en día notifican cada acción del usuario.

Spring Boot: Correo SMTP con Mailgun

Enviar mensajes de correo electrónico desde nuestra aplicación Spring Boot puede ser fácil, puesto que cada servidor SMTP (como google, fastmail, mailgun, etc) cuentan con algunas configuraciones que lo hacen similar.

En ésta publicación realizaremos...

  • Una clase interface y su implementación con un método para enviar un correo.
  • Llamaremos el @Bean para la configuración de las credenciales del SMTP.
  • Enviar el correo de prueba desde el Intellij IDEA.

Tabla de contenido

  1. Creación del proyecto
  2. Configuración del proyecto
  3. Prueba de envío de correo


Creación del proyecto

Crea una aplicación Spring boot con Spring Initializr con la dependencia Java Mail Sender.

Spring Boot con Java 11 y Java Mail Sender

Para que puedas continuar con este tutorial, crea una cuenta o inicia sesión en Mailgun y desplázate en la configuración del smtp para obtener las credenciales sandbox.

Configuración del proyecto

Crea una nueva clase interface MailSender.java que nos servirá para definir un método send.

// MailSender.java

package com.blog.alexandermiss.mailgun.services;

public interface MailSender {
    void send(String message);
}

De nuevo crea otra clase pero el nombre será MailSenderImpl.java así es, la implementación de la clase anterior

// MailSenderImpl.java

package com.blog.alexandermiss.mailgun.services;

import org.springframework.beans.factory.annotation.*;
import org.springframework.mail.*;
import org.springframework.mail.javamail.*;
import org.springframework.stereotype.*;

@Service
public class MailSenderImpl implements MailSender{
    private final JavaMailSender emailSender;

    @Autowired
    public MailSenderImpl(JavaMailSender emailSender) {
        this.emailSender = emailSender;
    }

    @Override
    public void send(String message) {
        var mail = new SimpleMailMessage();
        mail.setFrom("postmaster@sandbox2df344ha52f9kg5dfjw73jh59.mailgun.org");
        mail.setTo("tucorreo@tudominio.com");
        mail.setSubject("Correo desde el sandbox Mailgun");
        mail.setText(message);
        emailSender.send(mail);
    }
}

Y nos falta la parte más importante... El @Bean en el que configuramos todo nuestro SMTP.

// MailConfiguration.java

package com.blog.alexandermiss.mailgun.services;

import org.springframework.context.annotation.*;
import org.springframework.mail.javamail.*;

@Configuration
public class MailConfiguration {

    @Bean
    public JavaMailSender getJavaMailSender() {
        var mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.mailgun.org");
        mailSender.setPort(587);

        mailSender.setUsername("postmaster@sandbox2df3452f9kg53jh59.mailgun.org");
        mailSender.setPassword("0e274d42c2e8191b9e-e5e2de3e-c454bcbe");

        var props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");

        return mailSender;
    }
}

Como éste ejemplo es básico, no tenemos controladores y vistas html, pondremos a prueba nuestro envío de correo desde el constructor de la clase de Spring Boot en nuestro proyecto a como se muestra a continuación.

// BlogAlexanderMissApplication.java

package com.blog.alexandermiss.mailgun;

import com.blog.alexandermiss.mailgun.services.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BlogAlexanderMissApplication {

	public BlogAlexanderMissApplication(MailSender mailSender) {
		mailSender.send("El correo funciona!");
	}

	public static void main(String[] args) {
		SpringApplication.run(BlogAlexanderMissApplication.class, args);
	}

}

Prueba de envío de correo

Corre el proyecto y... ¡El correo ha sido enviado!

Les dejo algunas capturas del resultado de ésta prueba.

Debug de envío de correo con Intellij IDEA

Visualización de correo desde Fastmail

En la siguiente publicación enviaremos un correo con formato html.

¡Bendiciones!

Sígueme en mi canal de Telegram.