
Aprende a implementar un envío de correos electrónicos programados con Spring Boot y Resend
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
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.
Después, llenas los campos y das click en Add
.
Finalmente copia tu token.
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.
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!