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ślne | Tak | Wymaga włączenia |
API Node (net, fs) | Dostępne | Niedostępne |
| Zimny start | Wolniejszy | Szybszy |
| Biblioteki SMTP | Oczekuj w ramach limitu czasu trwania | Nie działają w ogóle |
HTTP e-mail API (fetch) | Działa | Dział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.