Email

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 यह सब शामिल करता है। आप एक key से ऑथेंटिकेट करते हैं, 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 सैंडबॉक्स एड्रेस हमेशा मेल स्वीकार करता है, इसलिए पहला रन असली प्राप्तकर्ताओं को भेजने से पहले आपकी key और पेलोड की पुष्टि करता है। SDK एक (data, error) पेयर लौटाता है, जो SMTP एक्सेप्शन पकड़ने के बजाय एरर हैंडलिंग को स्पष्ट रखता है। अगर PHP आपकी भाषा है, तो PHPMailer वॉकथ्रू उस इकोसिस्टम में समकक्ष कवर करता है।

FAQ

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

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

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

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

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

जब आपको डिलीवरेबिलिटी, फिर से प्रयास, और इवेंट ट्रैकिंग की ज़रूरत हो। स्टैंडर्ड लाइब्रेरी मैसेज भेजती है; यह प्रतिष्ठा प्रबंधित नहीं करती या हैंडऑफ़ के बाद क्या हुआ यह नहीं बताती। Bird email जैसा API वह परत कवर करता है।

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

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

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

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

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

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

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