Een HTTP e-mail-API werkt in zowel Vercels Node.js- als Edge-runtime en is Vercels aanbevolen aanpak. SMTP kan werken in Node.js als je de verzending await binnen de uitvoeringslimieten van de functie. Het kan niet draaien in Edge, dat de TCP-modules van Node mist.
Wat vereist SMTP op Vercel?
Await in een Node.js-functie de SMTP-verzending voordat je je response teruggeeft, zodat de uitwisseling afloopt voordat de functie stopt. De verzending moet binnen de duurlimiet van de functie voltooid zijn. Vercel staat uitgaande SMTP toe op poort 465 en 587; poort 25 is geblokkeerd. Edge mist de Node.js net-module, dus SMTP-bibliotheken kunnen daar geen TCP-verbinding openen.
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-runtime | Edge runtime | |
|---|---|---|
| Standaard | Ja | Opt-in |
Node-API's (net, fs) | Beschikbaar | Niet beschikbaar |
| Cold start | Langzamer | Sneller |
| SMTP-bibliotheken | Await binnen de duurlimiet | Werken helemaal niet |
HTTP e-mail-API (fetch) | Werkt | Werkt |
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?
Ja, in Node.js-functies: await de verzending voordat je de response teruggeeft, en rond af binnen de duurlimiet van de functie. Nodemailer kan niet draaien in Edge omdat de runtime de net-module van Node mist.
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.