Come inviare email su Vercel

Su Vercel, invia email tramite un HTTP API in Node.js o Edge, oppure attendi SMTP nelle funzioni Node.js.

Un HTTP email API funziona sia nel runtime Node.js che in quello Edge di Vercel ed è il percorso consigliato da Vercel. SMTP può funzionare in Node.js se attendi l'invio entro i limiti di esecuzione della funzione. Non può funzionare in Edge, che non dispone dei moduli TCP di Node.

Cosa richiede SMTP su Vercel?

In una funzione Node.js, attendi l'invio SMTP prima di restituire la risposta, in modo che lo scambio termini prima che la funzione si arresti. L'invio deve completarsi entro il limite di durata della funzione. Vercel consente connessioni SMTP in uscita sulle porte 465 e 587; la porta 25 è bloccata. Edge non dispone del modulo net di Node.js, quindi le librerie SMTP non possono aprire una connessione TCP.

Come si invia un'email da un Route Handler Next.js?

Crea un Route Handler in app/api/send/route.ts. Legge la chiave API da una variabile d'ambiente e chiama la API email. Usando l'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 });
}

Imposta BIRD_API_KEY nelle variabili d'ambiente del progetto Vercel, così è disponibile a runtime e non viene mai committata. L'indirizzo sandbox delivered@bird.dev accetta sempre la posta, il che rende facile verificare il primo deploy.

Edge runtime o Node runtime?

La riga export const runtime sceglie quale runtime esegue il tuo handler. Poiché SDK e fetch funzionano in entrambi, puoi scegliere in base alle tue altre esigenze:

Runtime NodeEdge runtime
PredefinitoSìSu richiesta
API Node (net, fs)DisponibiliNon disponibili
Cold startPiù lentoPiù veloce
Librerie SMTPAttendi entro il limite di durataNon funzionano
HTTP email API (fetch)FunzionaFunziona

Se chiami solo una HTTP API, l'Edge runtime ti offre cold start più veloci. Se dipendi da un pacchetto solo-Node in un'altra parte dell'handler, resta su Node. In entrambi i casi l'invio dell'email è la stessa chiamata basata su fetch.

Inviare con Bird

L'handler sopra usa già lo snippet canonico. La struttura è la stessa ovunque esegui 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 costruisci i corpi delle email come componenti, React Email li renderizza nell'HTML che questa chiamata si aspetta. Per una visione più ampia di dove collocare il codice email, vedi inviare email con JavaScript.

FAQ

Posso usare Nodemailer su Vercel?

Sì, nelle funzioni Node.js: attendi l'invio prima di restituire la risposta e completa entro il limite di durata della funzione. Nodemailer non può funzionare in Edge perché il runtime non dispone del modulo net di Node.

Dove salvo la mia chiave API su Vercel?

Nelle variabili d'ambiente del progetto, impostate nella dashboard di Vercel o tramite CLI. L'handler la legge con process.env, così resta sul server e fuori dal repository.

Edge o Node runtime per inviare email?

Entrambi funzionano per una chiamata HTTP API. Edge ha cold start più veloci; Node è necessario se l'handler usa anche pacchetti solo-Node.

Vercel e una HTTP email API sono una combinazione naturale. La panoramica del prodotto email e la guida all'invio di email coprono il resto.

Il traffico di picco e il recupero degli arretrati determinano la capacità di invio di cui la tua applicazione ha bisogno da un servizio di email transazionali.

Costruisci sulla stessa rete.

Una chiave API di test è subito tua. L'accesso alla produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

La tua prossima idea. Pronta a partire.