Email

Cómo enviar correo electrónico en Vercel

En Vercel envías correo electrónico a través de una llamada HTTP API, no SMTP. Vercel ejecuta tu código en funciones serverless y edge, y esos entornos de ejecución están diseñados para el manejo de solicitudes HTTP de corta duración, no para sockets TCP de larga duración. El runtime Edge en particular no tiene el módulo net de Node, así que una biblioteca SMTP ni siquiera puede abrir una conexión. Una solicitud HTTPS a un API de correo electrónico encaja perfectamente en el modelo. Esta es la configuración de Next.js.

¿Por qué SMTP no funciona bien en Vercel?

Las funciones serverless están diseñadas para arrancar rápido, manejar una solicitud y apagarse. Mantener abierta una conexión SMTP (con su handshake de varios pasos) va en contra de eso, y la función puede ser congelada o eliminada a mitad de la conversación. El runtime Edge es aún más estricto: ejecuta un entorno web estándar sin los módulos de red de Node, así que bibliotecas como Nodemailer que dependen de net y tls no funcionarán en absoluto. Enviar mediante HTTPS evita ambos problemas, porque hacer fetch es exactamente para lo que estos entornos están diseñados.

¿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:

Runtime NodeRuntime Edge
Por defectoOpcional
APIs de Node (net, fs)DisponiblesNo disponibles
Arranque en fríoMás lentoMás rápido
Bibliotecas SMTPFuncionan, pero no son fiables en serverlessNo 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?

En el runtime Node se cargará, pero mantener abierta una conexión SMTP no es fiable en funciones serverless de corta duración. En el runtime Edge no puede ejecutarse, porque no existe el módulo net de Node. Una llamada HTTP API evita ambos problemas.

¿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.