Auf Vercel senden Sie E-Mail über einen HTTP API, nicht über SMTP. Vercel führt Ihren Code in Serverless- und Edge-Funktionen aus, und diese Runtimes sind auf kurzlebige HTTP-Request-Verarbeitung ausgelegt, nicht auf langlebige TCP-Sockets. Die Edge Runtime hat insbesondere kein Node-net-Modul, sodass eine SMTP-Bibliothek nicht einmal eine Verbindung aufbauen kann. Ein HTTPS-Request an einen E-Mail-API passt sauber in dieses Modell. Hier ist das Next.js-Setup.
Warum funktioniert SMTP auf Vercel nicht gut?
Serverless-Funktionen sind darauf ausgelegt, schnell zu starten, einen Request zu verarbeiten und sich wieder herunterzufahren. Eine offene SMTP-Verbindung (mit ihrem mehrstufigen Handshake) steht dem entgegen, und die Funktion kann mitten in der Kommunikation eingefroren oder abgebaut werden. Die Edge Runtime ist noch restriktiver: Sie führt eine webstandardisierte Umgebung ohne Nodes Netzwerkmodule aus, sodass Bibliotheken wie Nodemailer, die auf net und tls angewiesen sind, dort überhaupt nicht laufen. Der Versand über HTTPS umgeht beide Probleme, weil fetch genau das ist, wofür diese Runtimes gebaut sind.
Wie senden Sie E-Mail aus einem Next.js Route Handler?
Erstellen Sie einen Route Handler unter app/api/send/route.ts. Er liest den API-Key aus einer Umgebungsvariable und ruft die E-Mail-API auf. Mit dem 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 });
}
Setzen Sie BIRD_API_KEY in den Umgebungsvariablen des Vercel-Projekts, damit er zur Laufzeit verfügbar ist und nie committet wird. Die delivered@bird.dev-Sandbox-Adresse nimmt immer E-Mails an, was das erste Deployment leicht überprüfbar macht.
Edge Runtime oder Node Runtime?
Die export const runtime-Zeile bestimmt, welche Runtime Ihren Handler ausführt. Da SDK und fetch beide in beiden Runtimes funktionieren, können Sie nach Ihren sonstigen Anforderungen wählen:
| Node Runtime | Edge Runtime | |
|---|---|---|
| Standard | Ja | Opt-in |
Node-APIs (net, fs) | Verfügbar | Nicht verfügbar |
| Cold Start | Langsamer | Schneller |
| SMTP-Bibliotheken | Laufen, aber unzuverlässig auf Serverless | Können nicht laufen |
HTTP E-Mail-API (fetch) | Funktioniert | Funktioniert |
Wenn Sie nur einen HTTP API aufrufen, bietet die Edge Runtime schnellere Cold Starts. Wenn Sie an anderer Stelle im Handler ein Node-only-Paket benötigen, bleiben Sie bei Node. In beiden Fällen ist der E-Mail-Versand derselbe fetch-basierte Aufruf.
Senden mit Bird
Der obige Handler verwendet bereits das kanonische Snippet. Die Struktur ist überall gleich, wo Sie JavaScript ausführen:
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();
Wenn Sie Ihre E-Mail-Inhalte als Komponenten bauen, rendert React Email sie in das HTML, das dieser Aufruf erwartet. Einen umfassenderen Überblick darüber, wohin E-Mail-Code gehört, finden Sie unter E-Mail senden mit JavaScript.
FAQ
Kann ich Nodemailer auf Vercel verwenden?
In der Node Runtime wird es geladen, aber eine offene SMTP-Verbindung ist auf kurzlebigen Serverless-Funktionen unzuverlässig. In der Edge Runtime kann es nicht laufen, weil es kein Node-net-Modul gibt. Ein HTTP API vermeidet beide Probleme.
Wo speichere ich meinen API-Key auf Vercel?
In den Umgebungsvariablen des Projekts, gesetzt im Vercel-Dashboard oder über CLI. Der Handler liest ihn mit process.env, sodass er auf dem Server bleibt und nicht in Ihrem Repository landet.
Edge oder Node Runtime für den E-Mail-Versand?
Beides funktioniert für einen HTTP API-Aufruf. Edge hat schnellere Cold Starts; Node ist erforderlich, wenn Ihr Handler auch Node-only-Pakete verwendet.
Vercel und ein HTTP E-Mail-API passen natürlich zusammen. Die E-Mail-Produktübersicht und die Anleitung zum E-Mail-Versand decken den Rest ab.
Spitzenlast und Backlog-Recovery bestimmen die Sendekapazität, die Ihre Anwendung von einem transaktionalen E-Mail-Dienst benötigt.