Uma HTTP de e-mail API funciona nos dois runtimes do Vercel, Node.js e Edge, e é o caminho recomendado pela Vercel. SMTP pode funcionar em Node.js se você aguardar o envio dentro dos limites de execução da função. Não é possível executá-lo em Edge, que não possui os módulos TCP do Node.
O que SMTP exige no Vercel?
Em uma função Node.js, aguarde o envio SMTP antes de retornar a resposta, para que a troca termine antes de a função parar. O envio precisa ser concluído dentro do limite de duração da função. O Vercel permite SMTP de saída nas portas 465 e 587; a porta 25 é bloqueada. O Edge não possui o módulo net do Node.js, então bibliotecas SMTP não conseguem abrir uma conexão TCP nesse runtime.
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:
| Runtime Node | Edge runtime | |
|---|---|---|
| Padrão | Sim | Opt-in |
APIs do Node (net, fs) | Disponível | Não disponíveis |
| Cold start | Mais lento | Mais rápido |
| Bibliotecas SMTP | Aguardar dentro do limite de duração | 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?
Sim, em funções Node.js: aguarde o envio antes de retornar a resposta e termine dentro do limite de duração da função. O Nodemailer não pode ser executado em Edge porque o runtime não possui o módulo net do Node.
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.