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

Python कुछ भी इंस्टॉल किए बिना ईमेल भेज सकता है।

Python कुछ भी इंस्टॉल किए बिना ईमेल भेज सकता है। स्टैंडर्ड लाइब्रेरी में SMTP कनेक्शन के लिए smtplib और संदेश बनाने के लिए email.message.EmailMessage शामिल हैं, इसलिए एक काम करने वाली स्क्रिप्ट लगभग पंद्रह पंक्तियों की होती है। नीचे वह स्क्रिप्ट है, जिसमें TLS सही तरीके से किया गया है। उसके बाद बताया गया है कि असली ट्रैफ़िक आने पर HTTP API पर जाना क्यों सही है।

स्टैंडर्ड लाइब्रेरी से ईमेल कैसे भेजें?

EmailMessage संदेश बनाता है और आपके लिए हेडर सेट करता है। smtplib.SMTP_SSL पोर्ट 465 पर एन्क्रिप्टेड कनेक्शन खोलता है:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"] = "you@yourdomain.com"
msg["To"] = "recipient@example.org"
msg["Subject"] = "Your receipt"
msg.set_content("Thanks for your order. This is the plain-text version.")
msg.add_alternative("<p>Thanks for your order.</p>", subtype="html")

with smtplib.SMTP_SSL("smtp.example.com", 465) as server:
    server.login("smtp-user", "smtp-password")
    server.send_message(msg)

set_content सादा-टेक्स्ट बॉडी लिखता है और add_alternative HTML संस्करण जोड़ता है, ताकि क्लाइंट वही दिखाएँ जो वे रेंडर कर सकते हैं। दोनों हिस्से भेजना अच्छा तरीका है और इससे डिलीवरेबिलिटी में मदद मिलती है।

SSL या STARTTLS?

एन्क्रिप्शन के दो तरीके हैं और दोनों अलग-अलग पोर्ट इस्तेमाल करते हैं। पोर्ट 465 पर SMTP_SSL पहले बाइट से ही TLS तय करता है। दूसरा तरीका पोर्ट 587 पर सादा SMTP है, जिसके बाद starttls() आता है। यह बिना एन्क्रिप्शन वाले कनेक्शन को एन्क्रिप्टेड बना देता है:

with smtplib.SMTP("smtp.example.com", 587) as server:
    server.starttls()
    server.login("smtp-user", "smtp-password")
    server.send_message(msg)

आपका मेल सर्वर जो सपोर्ट करता है, उसके आधार पर एक चुनें। बिना एन्क्रिप्शन वाले कनेक्शन पर क्रेडेंशियल न भेजें। यूज़रनेम और पासवर्ड को कोड में सीधे न लिखें। उन्हें एनवायरनमेंट वेरिएबल में रखें और os.environ से पढ़ें।

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

add_attachment बाइट्स और एक MIME टाइप लेता है। फ़ाइल को बाइनरी मोड में पढ़ें:

with open("invoice.pdf", "rb") as f:
    msg.add_attachment(
        f.read(),
        maintype="application",
        subtype="pdf",
        filename="invoice-1042.pdf",
    )

प्रोडक्शन के लिए सीधे SMTP से हटना क्यों ज़रूरी है?

स्क्रिप्ट काम करती है, लेकिन प्रोडक्शन में ऐसी समस्याएँ आती हैं जिन्हें स्टैंडर्ड लाइब्रेरी हल नहीं करती। आपको साफ़ IP प्रतिष्ठा वाला मेल सर्वर, सही SPF, DKIM और DMARC रिकॉर्ड, अस्थायी विफलताओं पर फिर से प्रयास करने का लॉजिक, और बाउंस व शिकायतें देखने का तरीका चाहिए। एक HTTP API यह सब एक साथ संभालता है। आप एक कुंजी से प्रमाणीकरण करते हैं, JSON भेजते हैं, और SMTP स्टेटस कोड पार्स करने के बजाय संरचित प्रतिक्रियाएँ पढ़ते हैं।

Bird से भेजें

Bird Python SDK वही संदेश SMTP की जटिल व्यवस्था के बिना भेजता है:

import bird

client = bird.Bird(api_key=os.environ["BIRD_API_KEY"])

data, error = client.emails.send(
    from_="you@yourdomain.com",
    to="delivered@bird.dev",
    subject="Hello from Python",
    html="<p>It works.</p>",
)

delivered@bird.dev सैंडबॉक्स पता हमेशा मेल स्वीकार करता है, इसलिए असली प्राप्तकर्ताओं पर भेजने से पहले पहला रन आपकी कुंजी और पेलोड की पुष्टि कर देता है। SDK एक (data, error) जोड़ी लौटाता है, जिससे SMTP एक्सेप्शन पकड़ने के बजाय त्रुटि प्रबंधन स्पष्ट रहता है। अगर आप PHP में काम करते हैं, तो PHPMailer गाइड उस इकोसिस्टम में यही तरीका बताती है।

अक्सर पूछे जाने वाले प्रश्न

क्या Python में ईमेल भेजने के लिए कुछ इंस्टॉल करना पड़ता है?

नहीं। smtplib और email.message स्टैंडर्ड लाइब्रेरी में हैं, इसलिए साधारण SMTP भेजने के लिए किसी पैकेज की ज़रूरत नहीं होती। डिपेंडेंसी तभी जोड़नी पड़ती है जब आपको उच्च-स्तरीय क्लाइंट या HTTP API चाहिए।

पोर्ट 465 और 587 में क्या अंतर है?

पोर्ट 465 शुरुआत से ही TLS की अपेक्षा करता है, जिसे smtplib.SMTP_SSL संभालता है। पोर्ट 587 सादे टेक्स्ट में शुरू होता है और starttls() से अपग्रेड होता है। दोनों में कनेक्शन अंत में एन्क्रिप्टेड होता है; बस एन्क्रिप्शन अलग-अलग चरण पर तय होता है।

मुझे smtplib से API पर कब स्विच करना चाहिए?

जब आपके लिए डिलीवरेबिलिटी, फिर से प्रयास और इवेंट ट्रैकिंग मायने रखते हों। स्टैंडर्ड लाइब्रेरी संदेश भेजती है; वह प्रतिष्ठा नहीं संभालती और न ही यह बताती है कि संदेश सौंपने के बाद क्या हुआ। Bird ईमेल जैसा API यह काम संभालता है।

पूरे अनुरोध और प्रतिक्रिया की संरचना के लिए, ईमेल भेजने की गाइड API को शुरू से अंत तक समझाती है।

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

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

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