Python की स्टैंडर्ड लाइब्रेरी में SMTP कनेक्शन के लिए smtplib और संदेश बनाने के लिए email.message.EmailMessage शामिल हैं, इसलिए साधारण SMTP भेजने के लिए किसी थर्ड-पार्टी पैकेज की ज़रूरत नहीं होती। प्रोडक्शन डिलीवरी के लिए HTTP ईमेल API IP वार्मअप, फिर से प्रयास और बाउंस इवेंट संभालता है, और आपको अपना मेल सर्वर नहीं चलाना पड़ता।
स्टैंडर्ड लाइब्रेरी से ईमेल कैसे भेजें?
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 यह परत संभालता है: आप API कुंजी से प्रमाणीकरण करते हैं, JSON भेजते हैं, और SMTP स्टेटस कोड पार्स करने के बजाय संरचित प्रतिक्रियाएँ पढ़ते हैं।
Bird से भेजें
SMTP कनेक्शन संभाले बिना HTTPS पर भेजने के लिए Bird Python SDK (pip install messagebird-sdk) इंस्टॉल करें:
from bird import APIError, Bird
client = Bird()
try:
message = client.email.send(
from_="onboarding@messagebird.dev",
to=["delivered@messagebird.dev"],
subject="Hello from Python",
text="It works.",
html="<p>It works.</p>",
)
print(message.id, message.status)
except APIError as err:
print("send failed:", err)
Bird() एनवायरनमेंट से BIRD_API_KEY अपने-आप पढ़ता है। onboarding@messagebird.dev से delivered@messagebird.dev सैंडबॉक्स पते पर भेजने से कस्टम डोमेन कॉन्फ़िगर करने से पहले आपकी कुंजी और पेलोड की पुष्टि हो जाती है। अगर अनुरोध सत्यापन में विफल होता है, तो APIError HTTP स्टेटस कोड और त्रुटि कोड दिखाता है।