Como enviar e-mail no Vercel

No Vercel, envie e-mail por uma HTTP API em Node.js ou Edge, ou aguarde SMTP em funções Node.js.

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 NodeEdge runtime
PadrãoSimOpt-in
APIs do Node (net, fs)DisponívelNão disponíveis
Cold startMais lentoMais rápido
Bibliotecas SMTPAguardar dentro do limite de duraçãoNão funcionam
HTTP email API (fetch)FuncionaFunciona

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.

Construa na mesma rede.

Uma chave de API de teste é sua imediatamente. A produção é desbloqueada quando adicionar um método de pagamento e verificar um remetente.

Sua próxima ideia. Pronta para conectar.