Jak wysyłać e-maile na Vercel

Na Vercelu wysyłaj e-maile przez HTTP API w Node.js lub Edge albo oczekuj na SMTP w funkcjach Node.js.

HTTP e-mailowe API działa zarówno w środowisku Node.js, jak i Edge na Vercelu i jest zalecaną przez Vercel ścieżką. SMTP może działać w Node.js, jeśli poczekasz na zakończenie wysyłki w ramach limitu wykonania funkcji. Nie działa w Edge, które nie ma modułów TCP z Node.

Czego wymaga SMTP na Vercelu?

W funkcji Node.js poczekaj na zakończenie wysyłki SMTP przed zwróceniem odpowiedzi, aby wymiana zakończyła się przed zatrzymaniem funkcji. Wysyłka musi zmieścić się w limicie czasu trwania funkcji. Vercel zezwala na wychodzące SMTP na portach 465 i 587; port 25 jest zablokowany. Edge nie ma modułu net z Node.js, więc biblioteki SMTP nie mogą tam otworzyć połączenia TCP.

Jak wysłać e-mail z Route Handlera Next.js?

Utwórz Route Handler w app/api/send/route.ts. Odczytuje on klucz API ze zmiennej środowiskowej i wywołuje API e-mail. Za pomocą 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 });
}

Ustaw BIRD_API_KEY w zmiennych środowiskowych projektu Vercel, aby była dostępna w czasie wykonania i nigdy nie trafiła do repozytorium. Adres sandbox delivered@bird.dev zawsze przyjmuje pocztę, co ułatwia weryfikację pierwszego wdrożenia.

Środowisko Edge czy Node?

Linia export const runtime określa, które środowisko uruchamia Twój handler. Ponieważ SDK i fetch działają w obu, możesz wybrać w zależności od pozostałych potrzeb:

Środowisko NodeŚrodowisko Edge
DomyślneTakWymaga włączenia
API Node (net, fs)DostępneNiedostępne
Zimny startWolniejszySzybszy
Biblioteki SMTPOczekuj w ramach limitu czasu trwaniaNie działają w ogóle
HTTP e-mail API (fetch)DziałaDziała

Jeśli wywołujesz tylko HTTP API, środowisko Edge zapewni Ci szybsze zimne starty. Jeśli w innym miejscu handlera korzystasz z pakietu dostępnego tylko w Node, zostań przy Node. Tak czy inaczej wysyłka e-maila to to samo wywołanie oparte na fetch.

Wyślij za pomocą Bird

Powyższy handler już używa kanonicznego fragmentu kodu. Schemat jest taki sam wszędzie tam, gdzie uruchamiasz 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();

Jeśli budujesz treści e-maili jako komponenty, React Email renderuje je do HTML-a, którego oczekuje to wywołanie. Szerszy obraz tego, gdzie umieścić kod wysyłki e-maili, znajdziesz w artykule wysyłanie e-maili za pomocą JavaScriptu.

FAQ

Czy mogę używać Nodemailera na Vercel?

Tak, w funkcjach Node.js: poczekaj na zakończenie wysyłki przed zwróceniem odpowiedzi i zmieść się w limicie czasu trwania funkcji. Nodemailer nie działa w Edge, ponieważ to środowisko nie ma modułu net z Node.

Gdzie przechowywać klucz API na Vercel?

W zmiennych środowiskowych projektu, ustawianych w panelu Vercel lub przez CLI. Handler odczytuje go za pomocą process.env, więc pozostaje na serwerze i poza repozytorium.

Środowisko Edge czy Node do wysyłania e-maili?

Oba działają dla wywołania HTTP API. Edge ma szybsze zimne starty; Node jest wymagany, jeśli Twój handler korzysta również z pakietów dostępnych tylko w Node.

Vercel i HTTP e-mail API to naturalne połączenie. Przegląd produktu e-mail i przewodnik po wysyłaniu e-maili omawiają resztę zagadnień.

Szczytowy ruch i odzyskiwanie zaległości określają przepustowość wysyłki, jakiej Twoja aplikacja potrzebuje od usługi e-mail transakcyjnych.

Buduj na tej samej sieci.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i zweryfikowaniu nadawcy.

Twój kolejny pomysł. Gotowy do połączenia.