Email

E-mail versturen op Vercel

Op Vercel verstuur je e-mail via een HTTP API, niet via SMTP. Vercel draait je code in serverless en edge functions, en die runtimes zijn gebouwd rond kortlopende HTTP-afhandeling, niet rond langlopende TCP-sockets. De Edge runtime heeft met name geen Node net-module, dus een SMTP-bibliotheek kan niet eens een verbinding openen. Een HTTPS-verzoek naar een e-mail-API past precies in dit model. Hier is de Next.js-opzet.

Waarom werkt SMTP niet goed op Vercel?

Serverless functions zijn ontworpen om snel te starten, een verzoek af te handelen en weer af te sluiten. Een open SMTP-verbinding aanhouden (met de bijbehorende meerstaps-handshake) gaat daar tegenin, en de functie kan halverwege worden bevroren of afgebroken. De Edge runtime is nog strenger: die draait een webstandaard-omgeving zonder de netwerkmodules van Node, dus bibliotheken zoals Nodemailer die afhankelijk zijn van net en tls werken daar helemaal niet. Versturen via HTTPS omzeilt beide problemen, omdat fetch precies is waar deze runtimes voor gebouwd zijn.

Hoe verstuur je e-mail vanuit een Next.js Route Handler?

Maak een Route Handler aan op app/api/send/route.ts. Die leest de API-key uit een omgevingsvariabele en roept de e-mail-API aan. Met de 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 });
}

Stel BIRD_API_KEY in bij de omgevingsvariabelen van het Vercel-project, zodat de waarde beschikbaar is tijdens runtime en nooit wordt gecommit. Het delivered@bird.dev-sandboxadres accepteert altijd mail, waardoor de eerste deploy makkelijk te verifiëren is.

Edge runtime of Node runtime?

De export const runtime-regel bepaalt welke runtime je handler draait. Omdat de SDK en fetch allebei in beide werken, kun je kiezen op basis van je overige behoeften:

Node runtimeEdge runtime
StandaardJaOpt-in
Node-API's (net, fs)BeschikbaarNiet beschikbaar
Cold startLangzamerSneller
SMTP-bibliothekenWerken, maar onbetrouwbaar op serverlessWerken helemaal niet
HTTP e-mail-API (fetch)WerktWerkt

Als je alleen een HTTP API aanroept, geeft de Edge runtime je snellere cold starts. Als je elders in de handler afhankelijk bent van een Node-only pakket, blijf dan op Node. In beide gevallen is de e-mailverzending dezelfde fetch-gebaseerde aanroep.

Versturen met Bird

De handler hierboven gebruikt al het standaardfragment. De opbouw is overal hetzelfde waar je JavaScript draait:

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();

Als je je e-mailinhoud als componenten opbouwt, rendert React Email ze naar de HTML die deze aanroep verwacht. Zie e-mail versturen met JavaScript voor het bredere beeld van waar e-mailcode thuishoort.

Veelgestelde vragen

Kan ik Nodemailer gebruiken op Vercel?

Op de Node runtime wordt het geladen, maar een open SMTP-verbinding aanhouden is onbetrouwbaar op kortlopende serverless functions. Op de Edge runtime kan het niet draaien, omdat er geen Node net-module is. Een HTTP API omzeilt beide problemen.

Waar sla ik mijn API-key op bij Vercel?

In de omgevingsvariabelen van het project, in te stellen via het Vercel-dashboard of CLI. De handler leest de waarde met process.env, zodat die op de server blijft en buiten je repository.

Edge of Node runtime voor het versturen van e-mail?

Beide werken voor een HTTP API-aanroep. Edge heeft snellere cold starts; Node is vereist als je handler ook Node-only pakketten gebruikt.

Vercel en een HTTP e-mail-API zijn een natuurlijke combinatie. Het e-mailproductoverzicht en de handleiding voor het versturen van e-mail behandelen de rest.

Piekverkeer en het verwerken van achterstanden bepalen de verzendcapaciteit die je applicatie nodig heeft van een transactionele e-mailservice.

Bouw op hetzelfde netwerk.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra u een betaalmethode toevoegt en een afzender verifieert.

Jouw volgende idee.
Klaar om te verbinden.