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.
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
Creación del proyecto
Crea una aplicación Spring boot con Spring Initializr con la dependencia 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.
En la siguiente publicación enviaremos un correo con formato html.
¡Bendiciones!
Sígueme en mi canal de Telegram.