Nodemailer, Node.js सर्वर से ईमेल भेजने की मानक लाइब्रेरी है। आप एक SMTP सर्वर की ओर इशारा करता ट्रांसपोर्ट बनाते हैं, फिर संदेश के फ़ील्ड के साथ sendMail को कॉल करते हैं। यह कनेक्शन पूलिंग, अटैचमेंट और HTML बॉडी संभालती है। नीचे दिया गया कोड असली संदेश भेजने के लिए ज़रूरी न्यूनतम कोड है, साथ में टेस्टिंग का वह तरीका भी है जिसे ज़्यादातर लोग छोड़ देते हैं।
Nodemailer को कैसे इंस्टॉल और कॉन्फ़िगर करें?
इसे npm से इंस्टॉल करें:
npm install nodemailer
ट्रांसपोर्ट में आपके SMTP कनेक्शन का विवरण रहता है। आप इसमें होस्ट और पोर्ट देते हैं, फिर क्रेडेंशियल auth के अंतर्गत पास करते हैं:
import nodemailer from "nodemailer";
const transporter = nodemailer.createTransport({
host: "smtp.example.com",
port: 587,
secure: false, // true for port 465, false for 587 (STARTTLS)
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
});
secure: false के साथ पोर्ट 587, STARTTLS का उपयोग करता है, जो हैंडशेक के बाद कनेक्शन को TLS में अपग्रेड करता है। पोर्ट 465 के लिए secure: true चाहिए। यूज़रनेम और पासवर्ड को सोर्स कोड में नहीं, बल्कि एनवायरनमेंट वेरिएबल में रखें।
संदेश कैसे भेजें?
एनवेलप और कंटेंट के साथ sendMail को कॉल करें। यह एक प्रॉमिस लौटाता है, इसलिए इसे try/catch के साथ async/await में रखें, ताकि भेजना विफल होने पर प्रोसेस क्रैश न हो:
async function main() {
try {
const info = await transporter.sendMail({
from: '"Your App" <you@yourdomain.com>',
to: "recipient@example.org",
subject: "Your receipt",
text: "Thanks for your order. This is the plain-text version.",
html: "<p>Thanks for your order.</p>",
});
console.log("Sent:", info.messageId);
} catch (err) {
console.error("Send failed:", err);
}
}
main();
हमेशा text और html दोनों भेजें। कुछ क्लाइंट प्लेन-टेक्स्ट भाग दिखाते हैं, और बिना टेक्स्ट विकल्प वाले संदेश को स्पैम फ़िल्टर आमतौर पर ख़राब स्कोर देते हैं।
अटैचमेंट कैसे जोड़ें?
एक attachments array पास करें। हर एंट्री किसी path, buffer या stream से डेटा पढ़ सकती है:
await transporter.sendMail({
from: "you@yourdomain.com",
to: "recipient@example.org",
subject: "Your invoice",
text: "Invoice attached.",
attachments: [
{
filename: "invoice.pdf",
path: "./invoices/invoice-1042.pdf",
},
{
filename: "note.txt",
content: "Generated at runtime, no file needed.",
},
],
});
असली मेल भेजे बिना टेस्ट कैसे करें?
Nodemailer के साथ Ethereal आता है, जो एक नकली SMTP सेवा है। यह संदेशों को डिलीवर करने के बजाय अपने पास रख लेती है। हर बार भेजने पर आपको एक preview URL मिलता है, जो लोकल डेवलपमेंट के लिए आदर्श है:
const testAccount = await nodemailer.createTestAccount();
const transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
secure: false,
auth: {
user: testAccount.user,
pass: testAccount.pass,
},
});
const info = await transporter.sendMail({
from: "you@yourdomain.com",
to: "test@example.org",
subject: "Preview only",
text: "This never leaves Ethereal.",
});
console.log("Preview:", nodemailer.getTestMessageUrl(info));
Ethereal से आप देख सकते हैं कि आपने क्या बनाया है। इससे यह पता नहीं चलता कि कोई असली इनबॉक्स उस संदेश को स्वीकार करेगा या नहीं।
Bird से भेजें
SMTP काम करता है, लेकिन इसे प्रोडक्शन में चलाने के लिए आपको खुद मेल सर्वर चलाना (या किराए पर लेना), IP को वॉर्म करना और प्रतिष्ठा पर नज़र रखनी पड़ती है। HTTP API यह काम अपने ऊपर ले लेता है। खुला रखने के लिए कोई SMTP socket नहीं होता, और डिलीवरेबिलिटी का इन्फ्रास्ट्रक्चर प्रदाता संभालता है। Bird ईमेल API के साथ वही भेजना एक ही कॉल में हो जाता है:
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 पता हमेशा मेल स्वीकार करता है, इसलिए असली प्राप्तकर्ता पर भेजने से पहले आप वायरिंग की पुष्टि कर सकते हैं। Serverless प्लेटफ़ॉर्म इस तरीके का सबसे स्पष्ट उदाहरण हैं, क्योंकि उनके function runtime अक्सर SMTP कनेक्शन खुले रख ही नहीं पाते। उस तरीके के लिए Vercel पर ईमेल कैसे भेजें देखें, और ईमेल कोड आपके स्टैक में कहाँ होना चाहिए, यह जानने के लिए व्यापक JavaScript से ईमेल भेजना अवलोकन देखें।
अक्सर पूछे जाने वाले प्रश्न
क्या Nodemailer ब्राउज़र में काम करता है?
नहीं। Nodemailer एक सर्वर-साइड लाइब्रेरी है और Node के नेटवर्किंग मॉड्यूल पर निर्भर करती है। ब्राउज़र SMTP कनेक्शन नहीं खोल सकते, और क्लाइंट कोड में क्रेडेंशियल रखने से वे उजागर हो जाएँगे। इसके बजाय बैकएंड से भेजें।
टेक्स्ट और HTML दोनों क्यों भेजें?
मल्टीपार्ट संदेश से हर क्लाइंट वह हिस्सा चुन सकता है जिसे वह दिखा सकता है, और प्लेन-टेक्स्ट विकल्प से स्पैम फ़िल्टर संदेश को बेहतर ढंग से पढ़ पाते हैं। text छोड़ देना ईमेल के स्पैम में जाने का एक आम कारण है।
क्या मुझे SMTP इस्तेमाल करना चाहिए या HTTP API?
कम वॉल्यूम और आंतरिक टूल के लिए SMTP ठीक है। बड़े पैमाने पर प्रोडक्शन में भेजने के लिए HTTP API उस सर्वर की ज़रूरत हटा देता है जिसे आपको अन्यथा खुद चलाना पड़ता, और डिलीवरेबिलिटी का प्रबंधन भी साथ में संभालता है। कई टीमें डेवलपमेंट में Nodemailer और प्रोडक्शन में API इस्तेमाल करती हैं।
Node से SMTP के ज़रिए संवाद करने के लिए Nodemailer एक भरोसेमंद विकल्प है। अगर आप उसके पीछे का मेल सर्वर खुद नहीं चलाना चाहते, तो API विकल्प को शुरू से अंत तक देखने के लिए ईमेल भेजने की गाइड पढ़ें।