E-Mail senden auf Vercel

Auf Vercel senden Sie E-Mails über einen HTTP-API in Node.js oder Edge oder warten SMTP in Node.js-Funktionen ab.

Ein HTTP-E-Mail-API funktioniert in beiden Vercel-Laufzeitumgebungen, Node.js und Edge, und ist Vercels empfohlener Weg. SMTP kann in Node.js funktionieren, wenn Sie den Versand innerhalb der Ausführungslimits der Funktion abwarten. In Edge kann es nicht laufen, da dort die TCP-Module von Node fehlen.

Was erfordert SMTP auf Vercel?

Warten Sie in einer Node.js-Funktion den SMTP-Versand ab, bevor Sie Ihre Antwort zurückgeben, damit der Austausch abgeschlossen ist, bevor die Funktion endet. Der Versand muss innerhalb des Zeitlimits der Funktion abgeschlossen sein. Vercel erlaubt ausgehende SMTP-Verbindungen auf den Ports 465 und 587; Port 25 ist blockiert. Edge fehlt das Node.js-Modul net, sodass SMTP-Bibliotheken dort keine TCP-Verbindung öffnen können.

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-LaufzeitumgebungEdge Runtime
StandardJaOpt-in
Node-APIs (net, fs)VerfügbarNicht verfügbar
Cold StartLangsamerSchneller
SMTP-BibliothekenAbwarten innerhalb des ZeitlimitsKönnen nicht laufen
HTTP E-Mail-API (fetch)FunktioniertFunktioniert

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?

Ja, in Node.js-Funktionen: Warten Sie den Versand ab, bevor Sie die Antwort zurückgeben, und schließen Sie ihn innerhalb des Zeitlimits der Funktion ab. Nodemailer kann in Edge nicht laufen, da der Laufzeitumgebung das Node-Modul net fehlt.

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.

Bauen Sie auf demselben Netzwerk auf.

Ein Test-API-Schlüssel steht Ihnen sofort zur Verfügung. Der Produktivbetrieb wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Ihre nächste Idee. Bereit zur Verbindung.