No Vercel, você envia e-mail por meio de uma HTTP API, não SMTP. O Vercel executa seu código em funções serverless e edge, e esses runtimes são construídos em torno do tratamento de requisições HTTP de curta duração, não de sockets TCP mantidos abertos. O Edge runtime, em particular, não possui o módulo net do Node, então uma biblioteca SMTP não consegue sequer abrir uma conexão. Uma requisição HTTPS para uma API de e-mail se encaixa perfeitamente no modelo. Aqui está a configuração no Next.js.
Por que SMTP não funciona bem no Vercel?
Funções serverless são projetadas para iniciar rápido, tratar uma requisição e encerrar. Manter aberta uma conexão SMTP (com seu handshake de múltiplas etapas) vai contra isso, e a função pode ser congelada ou encerrada no meio da conversa. O Edge runtime é ainda mais restritivo: ele executa um ambiente baseado em padrões web sem os módulos de rede do Node, então bibliotecas como o Nodemailer que dependem de net e tls simplesmente não funcionam nele. Enviar via HTTPS contorna ambos os problemas, porque fetch é exatamente o que esses runtimes foram feitos para fazer.
Como enviar e-mail a partir de um Route Handler do Next.js?
Crie um Route Handler em app/api/send/route.ts. Ele lê a chave API de uma variável de ambiente e chama a API de e-mail. Usando o 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 });
}
Defina BIRD_API_KEY nas variáveis de ambiente do projeto no Vercel para que esteja disponível em tempo de execução e nunca seja commitado. O endereço sandbox delivered@bird.dev sempre aceita e-mails, o que torna o primeiro deploy fácil de verificar.
Edge runtime ou Node runtime?
A linha export const runtime define qual deles executa seu handler. Como SDK e fetch funcionam em ambos, você pode escolher com base nas suas outras necessidades:
| Node runtime | Edge runtime | |
|---|---|---|
| Padrão | Sim | Opt-in |
APIs do Node (net, fs) | Disponíveis | Não disponíveis |
| Cold start | Mais lento | Mais rápido |
| Bibliotecas SMTP | Funcionam, mas não são confiáveis em serverless | Não funcionam |
HTTP email API (fetch) | Funciona | Funciona |
Se você só chama uma HTTP API, o Edge runtime oferece cold starts mais rápidos. Se você depende de um pacote exclusivo do Node em outra parte do handler, fique no Node. De qualquer forma, o envio de e-mail é a mesma chamada baseada em fetch.
Envie com Bird
O handler acima já usa o snippet canônico. A estrutura é a mesma em qualquer lugar onde você execute 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();
Se você constrói seus corpos de e-mail como componentes, o React Email os renderiza para o HTML que essa chamada espera. Para uma visão mais ampla de onde o código de e-mail se encaixa, veja enviando e-mail com JavaScript.
FAQ
Posso usar o Nodemailer no Vercel?
No Node runtime ele carrega, mas manter uma conexão SMTP aberta não é confiável em funções serverless de curta duração. No Edge runtime ele não funciona, porque não existe o módulo net do Node. Uma HTTP API evita ambos os problemas.
Onde armazeno minha chave API no Vercel?
Nas variáveis de ambiente do projeto, configuradas no painel do Vercel ou via CLI. O handler lê o valor com process.env, então ele fica no servidor e fora do seu repositório.
Edge ou Node runtime para enviar e-mail?
Ambos funcionam para uma chamada HTTP API. Edge tem cold starts mais rápidos; Node é necessário se seu handler também usa pacotes exclusivos do Node.
Vercel e uma HTTP de e-mail API são uma combinação natural. A visão geral do produto de e-mail e o guia de envio de e-mail cobrem o restante.
O tráfego de pico e a recuperação de backlog determinam a capacidade de envio que sua aplicação precisa de um serviço de e-mail transacional.