24 de June del 2025
Antes de empezar, es importante que sepas que existe Vue Email, una alternativa inspirada en React Email que está diseñada específicamente para Vue. Al ser una solución basada en Vue, te ofrece una integración más natural y consistente con Nuxt. Sin embargo, si preferís usar React Email por su madurez o funcionalidades específicas, esta guía te va a ayudar a integrarlo correctamente en tu proyecto Nuxt.
La integración de React Email en un proyecto Nuxt te permite enviar correos electrónicos de manera eficiente y con un diseño atractivo. En este artículo, te voy a guiar paso a paso para configurar y usar React Email en tu proyecto.
Para empezar, necesitás instalar las dependencias necesarias. Ejecutá el siguiente comando:
pnpm add resend react-dom react-email react @react-email/components
pnpm add -D @types/react @types/react-dom
Después de instalar las dependencias, agregá el siguiente script a tu package.json
para iniciar el servidor de desarrollo de emails:
"scripts": {
"dev:emails": "email dev -p 5000"
}
Creá una carpeta para tus componentes de email:
mkdir emails
touch emails/hello-world.tsx
Para evitar errores de compilación, ajustá las opciones del compilador en tu archivo tsconfig.json
:
{
"extends": "./.nuxt/tsconfig.json",
"compilerOptions": {
"jsx": "preserve",
"jsxImportSource": "react"
}
}
Para que React Email funcione correctamente en tu proyecto Nuxt, es necesario configurar el soporte de JSX en nuxt.config.ts
. Este paso es obligatorio, ya que sin él vas a obtener un error h is not defined
:
export default defineNuxtConfig({
nitro: {
esbuild: {
options: {
jsx: 'automatic',
jsxImportSource: 'react',
},
},
},
})
En este ejemplo vamos a usar el componente StripeWelcomeEmail
que está en la documentación oficial de React Email. Este es un excelente punto de partida ya que muestra las mejores prácticas de diseño de emails y cómo estructurar un componente de email profesional.
Creá un componente de email básico en emails/hello-world.tsx
para empezar a diseñar tus correos electrónicos. Podés copiar el ejemplo de Stripe Welcome Email directamente desde la documentación y adaptarlo a tus necesidades.
Para poder usar Resend necesitás configurar tu API key. Primero, modificá tu nuxt.config.ts
para agregar la variable de configuración:
export default defineNuxtConfig({
runtimeConfig: {
resendApiKey: '', // Esta variable estará disponible solo en el servidor
},
// ... resto de tu configuración
})
El string vacío en resendApiKey
es intencional - Nuxt automáticamente va a reemplazar este valor con cualquier variable de entorno que siga el formato NUXT_
+ el nombre de la variable en snake_case. En este caso, resendApiKey
se va a reemplazar con el valor de NUXT_RESEND_API_KEY
.
Después creá un archivo .env
en la raíz de tu proyecto y agregá tu API key de Resend:
NUXT_RESEND_API_KEY=re_123... # Tu API key de Resend
Configurá un endpoint en el servidor para enviar emails usando resend
. Acá te muestro cómo hacerlo:
import { Resend } from 'resend'
import { render } from '@react-email/components'
import { StripeWelcomeEmail } from '~~/emails/hello-world'
export default defineEventHandler(async (event) => {
const { resendApiKey } = useRuntimeConfig(event)
const resend = new Resend(resendApiKey)
const { error } = await resend.emails.send({
from: 'example@domain.com',
to: 'recipient@example.com',
subject: 'Test email',
html: await render(<StripeWelcomeEmail />),
})
if (error) {
throw createError({
statusCode: 500,
statusMessage: error.message
})
}
return 'Email sent successfully!'
})
Siguiendo estos pasos, vas a tener todo lo necesario para integrar React Email en tu proyecto Nuxt, permitiéndote enviar correos electrónicos con un diseño profesional y personalizado de manera eficiente.
Es una solución robusta que, si bien requiere un poco más de configuración por ser React en un proyecto Vue, te da acceso a un ecosistema maduro de componentes y herramientas para diseño de emails.