JavaScript ईमेल सर्वर से भेजता है, सीधे ब्राउज़र से कभी नहीं। क्लाइंट-साइड कोड के पास SMTP कनेक्शन खोलने का कोई तरीका नहीं है, और ईमेल क्रेडेंशियल्स को पेज में रखने से वे किसी को भी मिल जाएँगे जो dev tools खोलता है। तो असली सवाल यह है कि कौन-सा सर्वर-साइड पाथ इस्तेमाल करें: Nodemailer जैसी लाइब्रेरी के ज़रिए SMTP, या किसी ईमेल API को HTTP रिक्वेस्ट। यह पोस्ट दोनों दिखाती है।
ब्राउज़र ईमेल क्यों नहीं भेज सकता?
ईमेल डिलीवरी SMTP पर चलती है, जो एक TCP प्रोटोकॉल है। ब्राउज़र JavaScript को रॉ TCP सॉकेट उपलब्ध नहीं कराते, इसलिए क्लाइंट-साइड से मेल सर्वर से बात करने का कोई रास्ता नहीं है। अगर होता भी, तो SMTP क्रेडेंशियल्स या API key ऐसे कोड में होती जिसे कोई भी पढ़ सकता है। ब्राउज़र फ़ॉर्म इनपुट इकट्ठा करता है और आपके बैकएंड को भेजता है; बैकएंड ईमेल भेजता है। यही पूरा पैटर्न है।
Node बैकएंड से SMTP के साथ ईमेल कैसे भेजें?
Nodemailer, Node में SMTP के लिए स्टैंडर्ड लाइब्रेरी है। आप एक बार ट्रांसपोर्ट कॉन्फ़िगर करते हैं, फिर sendMail कॉल करते हैं:
import nodemailer from "nodemailer";
const transporter = nodemailer.createTransport({
host: "smtp.example.com",
port: 587,
secure: false,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
});
await transporter.sendMail({
from: "you@yourdomain.com",
to: "recipient@example.org",
subject: "Your receipt",
text: "Thanks for your order.",
html: "<p>Thanks for your order.</p>",
});
यह लंबे समय तक चलने वाले सर्वर पर अच्छा काम करता है। अटैचमेंट और लोकल टेस्टिंग सहित पूरा वॉकथ्रू Nodemailer से ईमेल भेजना में है।
HTTP ईमेल API से कैसे भेजें?
दूसरा पाथ HTTP रिक्वेस्ट है। आपका बैकएंड fetch के साथ किसी ईमेल API को कॉल करता है, जिससे मेल सर्वर चलाने की ज़रूरत नहीं रहती और यह ट्रेडिशनल होस्ट हो या सर्वरलेस फ़ंक्शन, एक जैसा व्यवहार करता है:
const res = await fetch("https://api.bird.com/v1/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIRD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "you@yourdomain.com",
to: "delivered@bird.dev",
subject: "Hello from JavaScript",
html: "<p>It works.</p>",
}),
});
if (!res.ok) {
throw new Error(`Send failed: ${res.status}`);
}
Key अभी भी सर्वर पर रहती है, एक एनवायरनमेंट वेरिएबल में, क्लाइंट को कभी नहीं भेजी जाती।
Bird से भेजें
Bird Node SDK उसी HTTP कॉल को रैप करता है ताकि आप मैन्युअल fetch छोड़ सकें और टाइप्ड रिज़ल्ट पा सकें:
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();
delivered@bird.dev sandbox एड्रेस हमेशा मेल स्वीकार करता है, इसलिए पहला रन आपके सेटअप की पुष्टि कर देता है। अगर आप ईमेल बॉडी React कंपोनेंट के रूप में बनाते हैं, तो इसे React Email के साथ जोड़ें, जो कंपोनेंट को उस HTML में रेंडर करता है जिसे आप html में पास करते हैं।
FAQ
क्या क्लाइंट-साइड JavaScript ईमेल भेज सकता है?
नहीं। ब्राउज़र SMTP कनेक्शन नहीं खोल सकते, और क्लाइंट कोड में कोई भी क्रेडेंशियल्स उजागर हो जाती हैं। ब्राउज़र फ़ॉर्म डेटा आपके बैकएंड को भेजता है, और बैकएंड ईमेल भेजता है।
Nodemailer इस्तेमाल करूँ या HTTP API?
Nodemailer लंबे समय तक चलने वाले सर्वर पर अच्छा विकल्प है जहाँ आप SMTP को कंट्रोल करते हैं। HTTP API तब आसान है जब आप मेल सर्वर चलाने से बचना चाहते हैं, और सर्वरलेस प्लेटफ़ॉर्म पर यह भरोसेमंद विकल्प है जहाँ SMTP सॉकेट उपलब्ध नहीं होते।
API key कहाँ रखूँ?
सर्वर-साइड एनवायरनमेंट वेरिएबल में, जो रनटाइम पर पढ़ा जाता है। यह कभी भी फ़्रंट-एंड कोड या पब्लिक रिपॉज़िटरी में नहीं होनी चाहिए।
JavaScript अकेला मेल डिलीवर नहीं करता; सर्वर करता है। API पाथ पर गहराई से जानने के लिए, ईमेल प्रोडक्ट ओवरव्यू और ईमेल भेजने की गाइड सब कुछ कवर करती हैं।