Aprende a implementar un envío de correos electrónicos programados con Spring Boot y Resend

Aprende a implementar un envío de correos electrónicos programados con Spring Boot y Resend

Erick Medel Galindo

Introducción

Resend se trata de una tecnología que permite integrar el envío de correos electrónicos de una forma sencilla y sin preocupaciones en materia de infraestructura. En este tutorial, aprenderás a implementar una tarea programada en Spring Boot para enviar correos electrónicos de forma sencilla.

Paso 1: Creación del proyecto de Spring Boot

Para comenzar, necesitamos crear un proyecto de Spring Boot. Para ello, puedes utilizar Spring Initializr. Asegúrate de seleccionar las siguentes dependencias:

  • Spring Web
  • Spring Boot DevTools

alt text

Después, descargalo y descomprímelo en tu directorio de trabajo. A continuación, abre tu proyecto en tu IDE o editor de texto favorito, yo estaré utilizando Visual Studio Code.

Paso 2: Implementación de Resend como dependencia y configuración

Abre el archivo pom.xml y agrega la siguiente dependencia:

<dependency> <groupId>com.resend</groupId> <artifactId>resend-java</artifactId> <version>3.1.0</version> </dependency>

Debe quedar de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>23</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.resend</groupId> <artifactId>resend-java</artifactId> <version>3.1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

Paso 3: Servicio de correo

Necesitamos crear un servicio que envíe correos electrónicos. Para ello, crea una clase llamada EmailService en el paquete com.example.demo.service y agrega el siguiente código:

package com.example.demo.service; import com.resend.*; import com.resend.core.exception.ResendException; import com.resend.services.emails.model.CreateEmailOptions; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class EmailService { @Value("${resend.token}") private String emailToken; @Value("${resend.email.to}") private String emailTo; public void sendEmail() { Resend resend = new Resend(emailToken); try { CreateEmailOptions params = CreateEmailOptions.builder() .from("Acme <[email protected]>") .to(emailTo) .subject("it works!") .html("<h1>Hi there!</h1><p>Here's your email from Resend</p> <p>SUSCRIBE TO ERICKDEVV</p>") .build(); resend.emails().send(params); } catch (ResendException e) { e.printStackTrace(); } } }

Como puedes ver, hemos creado un método enviarCorreo que envía un correo electrónico utilizando Resend. Para ello, necesitamos el token de Resend, que se almacena en el archivo application.properties. A continuación, agrega las siguientes propiedades en el archivo application.properties:

resend.token=<your_resend_token> resend.email.to=<the_email_to_send>

El token de Resend lo puedes obtener en la página de Resend. Registrate y obtén tu token en la sección de API Keys/Create API Key, da click en Create API Key.

alt text

Después, llenas los campos y das click en Add.

alt text

Finalmente copia tu token.

alt text

Reemplaza <your_resend_token> y <the_email_to_send> con tu token de Resend y el correo electrónico al que deseas enviar el correo electrónico, respectivamente.

Ahora, crea en resources la carpeta META-INF y dentro de ella el archivo additional-spring-configuration-metadata.json con el siguiente contenido:

{ "properties": [ { "name": "resend.email.to", "type": "java.lang.String", "description": "The email address to send the email to" }, { "name": "resend.token", "type": "java.lang.String", "description": "The Resend token" } ] }

Lo anterior es necesario para que Spring Boot pueda reconocer las propiedades que hemos definido en el archivo application.properties.

Paso 4: Scheduler Task

Ahora es el momento de crear la tarea programada que se ejecute de forma programada a intervalos regulares. Para ello, crea una clase llamada EmailScheduler en el paquete com.example.demo.scheduler y agrega el siguiente código:

package com.example.demo.scheduler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.example.demo.service.EmailService; @Component public class EmailScheduler { @Autowired private EmailService emailService; @Scheduled(cron = "0 */5 * * * *", zone = "America/Mexico_City") public void sendEmail() { try { emailService.sendEmail(); System.out.println("Email sent successfully"); } catch (Exception e) { System.out.println("Error sending email: " + e.getMessage()); } } }

Hemos creado un método sendEmail que se ejecuta cada 5 minutos. Puedes personalizar el intervalo de tiempo según tus necesidades. Además, hemos realizado una inyección de dependencia del servicio EmailService para enviar correos electrónicos y se ha definido que la zona horaria sea la de la Ciudad de México (puedes cambiarla según tu ubicación).

Deberemos agregar la anotación @EnableScheduling en una clase de configuración para habilitar la programación en Spring Boot. Para ello, crea una clase llamada SchedulingConfig en el paquete com.example.demo.config y agrega el siguiente código:

package com.example.demo.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling public class SchedulingConfig { }

Ahora, ejecuta tu aplicación de Spring Boot y verás que se envía un correo electrónico cada 5 minutos al correo electrónico especificado.

alt text

Paso 5: Conclusión

Resend es una herramienta que se integra de una manera muy sencilla a las aplicaciones hechas con Spring Boot, es realmente potente y no requiere ninguna infraestructura adicional. De forma personal, me ha gustado mucho trabajar con Resend y espero que a ti también te haya gustado.

Happy coding!

Referencias

¿Te gusta mi contenido? ¡Invítame un café! ☕

Buy Me a Coffee

Última Publicación

¡Vite + Module Federation es INCREÍBLE!

Aprende cómo crear aplicaciones frontend escalables usando Vite y Module Federation.

Leer más →