Email

Nodemailer से ईमेल भेजना

Nodemailer, Node.js सर्वर से ईमेल भेजने के लिए मानक लाइब्रेरी है।

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,
  },
});

पोर्ट 587 में secure: false STARTTLS का उपयोग करता है, जो हैंडशेक के बाद कनेक्शन को TLS में अपग्रेड करता है। पोर्ट 465 को secure: true चाहिए। यूज़रनेम और पासवर्ड को एनवायरनमेंट वेरिएबल्स में रखें, कभी भी सोर्स कोड में नहीं।

मैसेज कैसे भेजें?

एनवेलप और कॉन्टेंट के साथ sendMail कॉल करें। यह एक promise रिटर्न करता है, इसलिए इसे async/await में try/catch के साथ रैप करें ताकि भेजने में विफलता प्रोसेस को क्रैश न करे:

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 दोनों भेजें। कुछ क्लाइंट plain-text पार्ट रेंडर करते हैं, और बिना टेक्स्ट विकल्प वाले मैसेज का स्पैम फ़िल्टर आमतौर पर अधिक प्रतिकूल आकलन करते हैं।

अटैचमेंट कैसे जोड़ें?

एक 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 सेवा जो मैसेज को डिलीवर करने की बजाय कैप्चर करती है। हर भेजने पर आपको एक प्रीव्यू 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 सॉकेट खुला रखने की ज़रूरत नहीं, और प्रोवाइडर डिलीवरेबिलिटी इंफ़्रास्ट्रक्चर मैनेज करता है। 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 सैंडबॉक्स एड्रेस हमेशा मेल स्वीकार करता है, इसलिए असली प्राप्तकर्ता को पॉइंट करने से पहले आप वायरिंग कन्फ़र्म कर सकते हैं। सर्वरलेस प्लेटफ़ॉर्म इस अप्रोच के लिए सबसे स्पष्ट केस हैं, क्योंकि उनके फ़ंक्शन रनटाइम अक्सर SMTP कनेक्शन खुले नहीं रख पाते। उस रास्ते के लिए Vercel पर ईमेल कैसे भेजें देखें, और आपके स्टैक में ईमेल कोड कहाँ होना चाहिए इसके लिए व्यापक JavaScript से ईमेल भेजना ओवरव्यू देखें।

FAQ

क्या Nodemailer ब्राउज़र में काम करता है?

नहीं। Nodemailer एक सर्वर-साइड लाइब्रेरी है और Node के नेटवर्किंग मॉड्यूल्स पर निर्भर है। ब्राउज़र SMTP कनेक्शन नहीं खोल सकते, और क्लाइंट कोड में क्रेडेंशियल्स रखने से वे एक्सपोज़ हो जाएँगे। इसके बजाय बैकएंड से भेजें।

टेक्स्ट और HTML दोनों क्यों भेजें?

एक multipart मैसेज हर क्लाइंट को वह पार्ट चुनने देता है जो वह रेंडर कर सकता है, और plain-text विकल्प स्पैम फ़िल्टर की मैसेज रीडिंग को बेहतर बनाता है। text छोड़ना ईमेल स्पैम में जाने का एक आम कारण है।

क्या मुझे SMTP या HTTP API इस्तेमाल करना चाहिए?

कम वॉल्यूम और इंटरनल टूल्स के लिए SMTP ठीक है। बड़े पैमाने पर प्रोडक्शन भेजने के लिए, HTTP API वह सर्वर हटा देता है जो आपको अन्यथा ऑपरेट करना पड़ता, और डिलीवरेबिलिटी हैंडलिंग शामिल कर देता है। कई टीमें डेवलपमेंट में Nodemailer और प्रोडक्शन में API इस्तेमाल करती हैं।

Node से SMTP बोलने के लिए Nodemailer एक ठोस विकल्प है। जब आप इसके पीछे मेल सर्वर नहीं चलाना चाहते, तो API विकल्प को शुरू से अंत तक देखने के लिए ईमेल भेजने की गाइड पढ़ें।

व्यवहार में लाएँ।

इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।

अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ

उसी नेटवर्क पर बनाएँ।

एक टेस्ट API key आपको तुरंत मिल जाती है। भुगतान विधि जोड़ने और सेंडर सत्यापित करने पर प्रोडक्शन अनलॉक होता है।

आपका अगला आइडिया।
जुड़ने के लिए तैयार।