इसे छोड़कर कंटेंट पर जाएं
हिन्दी

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

कनेक्ट करने से पहले

अपने एप्लिकेशन से SMTP के ज़रिए ईमेल भेजने के लिए मेलबॉक्स का यूज़रनेम और पासवर्ड इस्तेमाल करें। SMTP के लिए API कुंजी और अकाउंट टोकन का उपयोग नहीं किया जा सकता।

जुड़े हुए डोमेन पर एक सक्रिय मेलबॉक्स बनाएं और उसके DNS रिकॉर्ड का सत्यापन पूरा करें। यूज़रनेम पूरा ईमेल पता होता है, जैसे [email protected]। मेल अकाउंट का नहीं, उस मेलबॉक्स का पासवर्ड इस्तेमाल करें। उदाहरणों के पतों को अपने पतों से बदलें; प्रोग्राम चलाते समय पासवर्ड दर्ज किया जाता है और स्क्रीन पर दिखाई नहीं देता।

सर्वर, पोर्ट और एन्क्रिप्शन

किसी भी जुड़े हुए डोमेन के लिए mail.adapt-mail.com इस्तेमाल करें। पोर्ट 465 पर TLS तुरंत शुरू होता है; पोर्ट 587 पर प्रमाणीकरण से पहले STARTTLS होता है। इनमें से एक विकल्प चुनें। प्रमाणपत्र का सत्यापन चालू रखें।

उदाहरणों में From पता और SMTP एनवेलप का प्रेषक मेलबॉक्स के यूज़रनेम के समान हैं। प्रेषक का दिखाई देने वाला नाम बदला जा सकता है। पोर्ट 25 मेल सर्वरों के बीच संचार के लिए है; अपने एप्लिकेशन के लिए 465 या 587 इस्तेमाल करें।

SMTP_HOST = "mail.adapt-mail.com"
SMTP_PORT = 465
SMTP_USER = "[email protected]"
SMTP_PASSWORD = "<mailbox-password>"
SMTP_FROM = "[email protected]"
SMTP_FROM_NAME = "Example"
465: implicit TLS
587: STARTTLS

Python: पोर्ट 465 से भेजना

यह उदाहरण केवल Python 3 की मानक लाइब्रेरी का उपयोग करता है। इसे send_mail.py में सहेजें और python3 send_mail.py चलाएं। स्वचालित भेजने के लिए पासवर्ड अपने एप्लिकेशन के सुरक्षित कॉन्फ़िगरेशन से लें; उसे Git या लॉग में न रखें।

import smtplib
import ssl
from getpass import getpass
from email.message import EmailMessage
from email.utils import formataddr, make_msgid, formatdate
username = "[email protected]"
password = getpass("SMTP password: ")
recipient = "[email protected]"
message = EmailMessage()
message["From"] = formataddr(("Example", username))
message["To"] = recipient
message["Subject"] = "SMTP test"
message["Date"] = formatdate(localtime=False, usegmt=True)
message["Message-ID"] = make_msgid(domain=username.split("@")[1])
message.set_content("Hello! This message was sent through Adapt Mail SMTP.")
with smtplib.SMTP_SSL(
"mail.adapt-mail.com", 465, timeout=30,
context=ssl.create_default_context(),
) as smtp:
smtp.login(username, password)
refused = smtp.send_message(
message, from_addr=username, to_addrs=[recipient],
)
print("Rejected recipients:", refused)

Python: पोर्ट 587 से कनेक्ट करना

STARTTLS के लिए पिछले उदाहरण में संदेश तैयार करने वाला कोड रखें और with smtplib.SMTP_SSL ब्लॉक को नीचे दिए गए कोड से बदलें। smtplib.SMTP में पासवर्ड STARTTLS सफल होने के बाद ही भेजा जाता है।

with smtplib.SMTP("mail.adapt-mail.com", 587, timeout=30) as smtp:
smtp.ehlo()
smtp.starttls(context=ssl.create_default_context())
smtp.ehlo()
smtp.login(username, password)
refused = smtp.send_message(
message, from_addr=username, to_addrs=[recipient],
)
print("Rejected recipients:", refused)

HTML और अटैचमेंट

set_content के बाद HTML संस्करण जोड़ें और भेजने से पहले अटैचमेंट जोड़ें। HTML का समर्थन न करने वाले क्लाइंट के लिए सादा टेक्स्ट संस्करण भी रखें। केवल भरोसेमंद HTML इस्तेमाल करें या जोड़े जाने वाले डेटा को एस्केप करें।

message.add_alternative(
"<p>Hello! This message was sent through <strong>Adapt Mail</strong>.</p>",
subtype="html",
)
with open("document.pdf", "rb") as attachment:
message.add_attachment(
attachment.read(), maintype="application", subtype="pdf",
filename="document.pdf",
)

परिणाम, सीमाएं और भेजे गए संदेश

send_message की सफलता का मतलब है कि SMTP सर्वर ने संदेश स्वीकार कर लिया है, न कि वह प्राप्तकर्ता के इनबॉक्स में पहुंच गया है। refused डिक्शनरी में अस्वीकृत प्राप्तकर्ता होते हैं; सभी प्राप्तकर्ता अस्वीकृत होने पर Python SMTPRecipientsRefused अपवाद देता है।

SMTP और API हर मेलबॉक्स की समान सीमाएं साझा करते हैं: पिछले 60 सेकंड में अधिकतम 30 संदेश, हर संदेश में 50 प्राप्तकर्ता और पिछले 24 घंटों में 1000 प्राप्तकर्ता; बढ़ी हुई सीमा चालू होने पर 5000 प्राप्तकर्ता। To, Cc और Bcc के सभी प्राप्तकर्ता गिने जाते हैं।

सीधे SMTP से भेजने पर भेजे गए संदेशों के फ़ोल्डर में अपने आप कॉपी नहीं बनती। मेल क्लाइंट यह काम IMAP से करते हैं; Adapt Mail API से भेजने पर कॉपी अलग से सहेजी जाती है।

SMTP त्रुटियां

535
प्रमाणीकरण विफल: पूरा पता, मेलबॉक्स का पासवर्ड और मेलबॉक्स की उपलब्धता जांचें।
451
अस्थायी विफलता, जिसमें भेजने की सीमा पार होना भी शामिल है। कुछ देर बाद फिर कोशिश करें।
550 / 5xx
स्थायी अस्वीकृति: पते, प्रेषक की अनुमतियां और जवाब का विवरण जांचें। 50 से अधिक प्राप्तकर्ता DATA के बाद अस्वीकृत होते हैं। दोबारा कोशिश करने से पहले कारण ठीक करें।
TLS / timeout
mail.adapt-mail.com, पोर्ट, TLS मोड और एप्लिकेशन सर्वर से बाहरी कनेक्शन की अनुमति जांचें। 465 पर SMTP_SSL और 587 पर STARTTLS के साथ SMTP इस्तेमाल करें।

SMTP सर्वर का पूरा जवाब पढ़ें। अस्थायी विफलता पर कुछ देर बाद फिर कोशिश करें। संदेश भेजने के बाद कनेक्शन टूट जाए और परिणाम पता न हो, तो बिना जांचे दोबारा न भेजें: SMTP में Idempotency-Key नहीं होता और दोबारा कोशिश करने से डुप्लिकेट बन सकता है।