Cómo enviar correo electrónico en Vercel

En Vercel, envía correo electrónico mediante una HTTP API en Node.js o Edge, o espera SMTP en funciones Node.js.

Una HTTP de correo electrónico API funciona en los entornos Node.js y Edge de Vercel, y es el camino recomendado por Vercel. SMTP puede funcionar en Node.js si esperas el envío dentro de los límites de ejecución de la función. No puede ejecutarse en Edge, que carece de los módulos TCP de Node.

¿Qué requiere SMTP en Vercel?

En una función Node.js, espera el envío de SMTP antes de devolver tu respuesta para que el intercambio termine antes de que la función se detenga. El envío debe completarse dentro del límite de duración de la función. Vercel permite SMTP saliente en los puertos 465 y 587; el puerto 25 está bloqueado. Edge carece del módulo net de Node.js, así que las bibliotecas SMTP no pueden abrir una conexión TCP allí.

¿Cómo envías correo electrónico desde un Route Handler de Next.js?

Crea un Route Handler en app/api/send/route.ts. Lee la clave API de una variable de entorno y llama al API de correo electrónico. Usando el Bird Node SDK:

// app/api/send/route.ts
import { BirdClient } from "@messagebird/sdk";

export const runtime = "nodejs";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

export async function POST(request: Request) {
  const { to } = await request.json();

  const { data, error } = await bird.email
    .send({
      from: "you@yourdomain.com",
      to: [to ?? "delivered@bird.dev"],
      subject: "Hello from Node",
      html: "<p>It works.</p>",
    })
    .safe();

  if (error) {
    return Response.json({ error: error.message }, { status: 502 });
  }

  return Response.json({ id: data.id });
}

Configura BIRD_API_KEY en las variables de entorno del proyecto en Vercel para que esté disponible en tiempo de ejecución y nunca se suba al repositorio. La dirección sandbox delivered@bird.dev siempre acepta correo, lo que facilita verificar el primer despliegue.

¿Runtime Edge o runtime Node?

La línea export const runtime elige cuál ejecuta tu handler. Como SDK y fetch funcionan en ambos, puedes elegir según tus otras necesidades:

Entorno NodeRuntime Edge
Por defectoSíOpcional
APIs de Node (net, fs)DisponibleNo disponibles
Arranque en fríoMás lentoMás rápido
Bibliotecas SMTPEsperar dentro del límite de duraciónNo funcionan
HTTP email API (fetch)FuncionaFunciona

Si solo llamas a un HTTP API, el runtime Edge te da arranques en frío más rápidos. Si dependes de un paquete exclusivo de Node en otra parte del handler, quédate con Node. En ambos casos el envío de correo es la misma llamada basada en fetch.

Envíalo con Bird

El handler de arriba ya usa el fragmento canónico. La estructura es la misma en cualquier lugar donde ejecutes JavaScript:

import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.email
  .send({
    from: "you@yourdomain.com",
    to: ["delivered@bird.dev"],
    subject: "Hello from Node",
    html: "<p>It works.</p>",
  })
  .safe();

Si construyes el cuerpo de tus correos como componentes, React Email los renderiza al HTML que espera esta llamada. Para una visión más amplia de dónde ubicar el código de correo, consulta enviar correo electrónico con JavaScript.

Preguntas frecuentes

¿Puedo usar Nodemailer en Vercel?

Sí, en funciones Node.js: espera el envío antes de devolver la respuesta y termina dentro del límite de duración de la función. Nodemailer no puede ejecutarse en Edge porque el entorno carece del módulo net de Node.

¿Dónde guardo mi clave API en Vercel?

En las variables de entorno del proyecto, configuradas en el dashboard de Vercel o CLI. El handler la lee con process.env, así que permanece en el servidor y fuera de tu repositorio.

¿Runtime Edge o Node para enviar correo electrónico?

Ambos funcionan para una llamada HTTP API. Edge tiene arranques en frío más rápidos; Node es necesario si tu handler también usa paquetes exclusivos de Node.

Vercel y un HTTP email API son una combinación natural. La descripción general del producto de correo electrónico y la guía de envío de correo electrónico cubren el resto.

El tráfico pico y la recuperación de acumulaciones determinan la capacidad de envío que tu aplicación necesita de un servicio de correo electrónico transaccional.

Construye sobre la misma red.

Obtén una clave API de prueba de inmediato. El acceso a producción se desbloquea cuando añades un método de pago y verificas un remitente.

Tu próxima idea. Lista para conectar.