Di Vercel Anda mengirim email melalui HTTP API, bukan SMTP. Vercel menjalankan kode Anda di serverless dan edge function, dan runtime tersebut dirancang untuk penanganan permintaan HTTP yang berumur pendek, bukan soket TCP yang ditahan lama. Edge runtime khususnya tidak memiliki modul Node net, sehingga library SMTP tidak bisa membuka koneksi sama sekali. Permintaan HTTPS ke API email cocok dengan model ini. Berikut setup Next.js-nya.
Mengapa SMTP tidak bekerja dengan baik di Vercel?
Serverless function dirancang untuk memulai dengan cepat, menangani permintaan, lalu mati. Mempertahankan koneksi SMTP yang terbuka (dengan handshake multi-langkahnya) bertentangan dengan itu, dan fungsi tersebut bisa dibekukan atau dihentikan di tengah percakapan. Edge runtime lebih ketat lagi: ia menjalankan lingkungan standar web tanpa modul jaringan Node, sehingga library seperti Nodemailer yang bergantung pada net dan tls tidak akan berjalan sama sekali. Mengirim melalui HTTPS menghindari kedua masalah tersebut, karena fetch adalah hal yang memang dirancang untuk dilakukan oleh runtime ini.
Bagaimana cara mengirim email dari Next.js Route Handler?
Buat Route Handler di app/api/send/route.ts. Handler ini membaca kunci API dari environment variable dan memanggil API email. Menggunakan 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 });
}
Atur BIRD_API_KEY di environment variable proyek Vercel agar tersedia saat runtime dan tidak pernah di-commit. Alamat sandbox delivered@bird.dev selalu menerima email, sehingga deploy pertama mudah diverifikasi.
Edge runtime atau Node runtime?
Baris export const runtime menentukan runtime mana yang menjalankan handler Anda. Karena SDK dan fetch keduanya bekerja di kedua runtime, Anda bisa memilih berdasarkan kebutuhan lain:
| Node runtime | Edge runtime | |
|---|---|---|
| Default | Ya | Opt-in |
Node API (net, fs) | Tersedia | Tidak tersedia |
| Cold start | Lebih lambat | Lebih cepat |
| Library SMTP | Berjalan, tapi tidak andal di serverless | Tidak bisa berjalan sama sekali |
HTTP email API (fetch) | Berfungsi | Berfungsi |
Jika Anda hanya memanggil HTTP API, Edge runtime memberikan cold start yang lebih cepat. Jika Anda bergantung pada paket khusus Node di bagian lain handler, tetap gunakan Node. Bagaimanapun, pengiriman email tetap berupa panggilan berbasis fetch yang sama.
Kirim dengan Bird
Handler di atas sudah menggunakan cuplikan kanonik. Bentuknya sama di mana pun Anda menjalankan 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();
Jika Anda membangun isi email sebagai komponen, React Email me-render-nya menjadi HTML yang diharapkan oleh panggilan ini. Untuk gambaran lebih luas tentang posisi kode email, lihat mengirim email dengan JavaScript.
FAQ
Bisakah saya menggunakan Nodemailer di Vercel?
Di Node runtime Nodemailer akan termuat, tetapi mempertahankan koneksi SMTP yang terbuka tidak andal di serverless function yang berumur pendek. Di Edge runtime Nodemailer tidak bisa berjalan, karena tidak ada modul Node net. HTTP API menghindari kedua masalah tersebut.
Di mana saya menyimpan kunci API di Vercel?
Di environment variable proyek, yang diatur melalui dashboard Vercel atau CLI. Handler membacanya dengan process.env, sehingga tetap berada di server dan tidak masuk ke repositori Anda.
Edge atau Node runtime untuk mengirim email?
Keduanya berfungsi untuk panggilan HTTP API. Edge memiliki cold start lebih cepat; Node diperlukan jika handler Anda juga menggunakan paket khusus Node.
Vercel dan HTTP email API adalah pasangan yang alami. Gambaran umum produk email dan panduan mengirim email mencakup sisa topiknya.
Lalu lintas puncak dan pemulihan antrean menentukan kapasitas pengiriman yang dibutuhkan aplikasi Anda dari layanan email transaksional.