HTTP ईमेल API Vercel के Node.js और Edge, दोनों रनटाइम में काम करता है और यही Vercel का सुझाया गया तरीका है। अगर आप फ़ंक्शन की निष्पादन सीमाओं के भीतर भेजने की प्रक्रिया को await करते हैं, तो SMTP Node.js में काम कर सकता है। यह Edge में नहीं चल सकता, क्योंकि उसमें Node के TCP मॉड्यूल नहीं हैं।
Vercel पर SMTP के लिए क्या ज़रूरी है?
Node.js फ़ंक्शन में अपना रिस्पॉन्स लौटाने से पहले SMTP से भेजने की प्रक्रिया को await करें, ताकि फ़ंक्शन रुकने से पहले आदान-प्रदान पूरा हो जाए। भेजने की प्रक्रिया फ़ंक्शन की अवधि सीमा के भीतर पूरी होनी चाहिए। Vercel पोर्ट 465 और 587 पर आउटबाउंड SMTP की अनुमति देता है; पोर्ट 25 ब्लॉक है। Edge में Node.js का net मॉड्यूल नहीं है, इसलिए SMTP लाइब्रेरी वहाँ TCP कनेक्शन नहीं खोल सकतीं।
Next.js Route Handler से ईमेल कैसे भेजें?
app/api/send/route.ts पर एक Route Handler बनाएँ। यह एनवायरनमेंट वेरिएबल से API कुंजी पढ़ता है और ईमेल API को कॉल करता है। 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 });
}
Vercel प्रोजेक्ट के एनवायरनमेंट वेरिएबल में BIRD_API_KEY सेट करें, ताकि यह रनटाइम पर उपलब्ध रहे और कभी कमिट न हो। delivered@bird.dev सैंडबॉक्स पता हमेशा मेल स्वीकार करता है, जिससे पहले डिप्लॉय की जाँच आसान हो जाती है।
Edge रनटाइम या Node रनटाइम?
export const runtime लाइन तय करती है कि आपका हैंडलर किस रनटाइम में चलेगा। चूँकि SDK और fetch दोनों में से किसी में भी काम करते हैं, इसलिए आप अपनी बाकी ज़रूरतों के आधार पर चुन सकते हैं:
| Node रनटाइम | Edge रनटाइम | |
|---|---|---|
| डिफ़ॉल्ट | हाँ | चुनने पर |
Node API (net, fs) | उपलब्ध | उपलब्ध नहीं |
| कोल्ड स्टार्ट | धीमा | तेज़ |
| SMTP लाइब्रेरी | अवधि सीमा के भीतर await करें | बिल्कुल नहीं चल सकतीं |
HTTP ईमेल API (fetch) | काम करता है | काम करता है |
अगर आप केवल किसी HTTP API को कॉल करते हैं, तो Edge रनटाइम में कोल्ड स्टार्ट तेज़ होते हैं। अगर हैंडलर में कहीं और आप किसी Node-only पैकेज पर निर्भर हैं, तो Node पर ही रहें। दोनों ही स्थितियों में ईमेल भेजने का कॉल वही fetch-आधारित कॉल रहता है।
Bird से भेजें
ऊपर दिया गया हैंडलर पहले से ही मानक स्निपेट का उपयोग करता है। आप 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();
अगर आप अपने ईमेल का मुख्य भाग कंपोनेंट के रूप में बनाते हैं, तो React Email उन्हें उस HTML में रेंडर करता है जिसकी यह कॉल अपेक्षा करती है। ईमेल कोड कहाँ होना चाहिए, इसकी व्यापक जानकारी के लिए JavaScript से ईमेल भेजना देखें।
अक्सर पूछे जाने वाले प्रश्न
क्या मैं Vercel पर Nodemailer का उपयोग कर सकता हूँ?
हाँ, Node.js फ़ंक्शन में: प्रतिक्रिया लौटाने से पहले भेजने की प्रक्रिया को await करें, और उसे फ़ंक्शन की अवधि सीमा के भीतर पूरा करें। Nodemailer, Edge में नहीं चल सकता, क्योंकि उस रनटाइम में Node का net मॉड्यूल नहीं होता।
Vercel पर मैं अपनी API कुंजी कहाँ रखूँ?
प्रोजेक्ट के एनवायरनमेंट वेरिएबल में, जिन्हें आप Vercel डैशबोर्ड या CLI से सेट करते हैं। हैंडलर इसे process.env से पढ़ता है, इसलिए यह सर्वर पर रहती है और आपकी रिपॉज़िटरी में नहीं जाती।
ईमेल भेजने के लिए Edge रनटाइम या Node रनटाइम?
HTTP API कॉल के लिए दोनों काम करते हैं। Edge में कोल्ड स्टार्ट तेज़ होते हैं। अगर आपका हैंडलर केवल Node वाले पैकेज भी इस्तेमाल करता है, तो Node ज़रूरी है।
Vercel और HTTP ईमेल API एक साथ आसानी से काम करते हैं। बाकी सुविधाओं की जानकारी ईमेल प्रोडक्ट का अवलोकन और ईमेल भेजने की गाइड में है।
आपके एप्लिकेशन को ट्रांज़ैक्शनल ईमेल सेवा से कितनी भेजने की क्षमता चाहिए, यह पीक ट्रैफ़िक और बैकलॉग निपटाने की ज़रूरत से तय होता है।