पायथन 3 - एसएमटीपी का उपयोग करके ईमेल भेजना

सिंपल मेल ट्रांसफर प्रोटोकॉल (SMTP) एक प्रोटोकॉल है, जो मेल सर्वर के बीच ई-मेल और रूटिंग ई-मेल भेजने का काम करता है।

अजगर प्रदान करता है smtplib मॉड्यूल, जो एक SMTP क्लाइंट सत्र ऑब्जेक्ट को परिभाषित करता है जिसका उपयोग किसी भी इंटरनेट मशीन पर SMTP या ESMTP श्रोता डेमन के साथ मेल भेजने के लिए किया जा सकता है।

यहां एक SMTP ऑब्जेक्ट बनाने के लिए एक सरल वाक्यविन्यास है, जिसे बाद में ई-मेल भेजने के लिए इस्तेमाल किया जा सकता है -

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

यहाँ मापदंडों का विस्तार है -

  • host- यह होस्ट आपके SMTP सर्वर को चलाने वाला है। आप होस्ट या IP नाम की IP पता को tutorialspoint.com की तरह निर्दिष्ट कर सकते हैं। यह एक वैकल्पिक तर्क है।

  • port- यदि आप होस्ट तर्क प्रदान कर रहे हैं , तो आपको एक पोर्ट निर्दिष्ट करने की आवश्यकता है, जहां एसएमटीपी सर्वर सुन रहा है। आमतौर पर यह पोर्ट 25 का होगा।

  • local_hostname- यदि आपका एसएमटीपी सर्वर आपकी लोकल मशीन पर चल रहा है, तो आप केवल लोकलहोस्ट विकल्प को निर्दिष्ट कर सकते हैं ।

SMTP ऑब्जेक्ट के पास एक इंस्टेंस विधि होती है जिसे कहा जाता है sendmail, जो आम तौर पर एक संदेश भेजने का काम करने के लिए उपयोग किया जाता है। इसके तीन मापदंड हैं -

  • इस - प्रेषक का पता के साथ एक स्ट्रिंग।

  • रिसीवर - स्ट्रिंग की एक सूची, प्रत्येक प्राप्तकर्ता के लिए एक।

  • संदेश - एक स्ट्रिंग विभिन्न RFC के में निर्दिष्ट के रूप में स्वरूपित के रूप में एक संदेश।

उदाहरण

यहाँ पायथन लिपि का उपयोग करके एक ई-मेल भेजने का एक सरल तरीका है। एक बार आजमा कर देखें -

#!/usr/bin/python3

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

यहां, आपने संदेश में एक बुनियादी ई-मेल रखा है, एक ट्रिपल उद्धरण का उपयोग करते हुए, हेडर को सही ढंग से प्रारूपित करने का ध्यान रखते हुए। एक ई-मेल की आवश्यकता हैFrom, To, और ए Subject हेडर, एक खाली लाइन के साथ ई-मेल के शरीर से अलग हो गया।

मेल भेजने के लिए आप smtpObj का उपयोग स्थानीय मशीन पर SMTP सर्वर से कनेक्ट करने के लिए करते हैं। फिर संदेश के साथ प्रेषक विधि, पते से और गंतव्य पते को पैरामीटर के रूप में उपयोग करें (भले ही और पते से पते ई-मेल के भीतर ही हों, ये हमेशा मेल को रूट करने के लिए उपयोग नहीं किए जाते हैं)।

यदि आप अपने स्थानीय मशीन पर SMTP सर्वर नहीं चला रहे हैं, तो आप दूरस्थ SMTP सर्वर के साथ संचार करने के लिए smtplib क्लाइंट का उपयोग कर सकते हैं । जब तक आप एक वेबमेल सेवा (जैसे जीमेल या याहू-मेल) का उपयोग नहीं कर रहे हैं, तब तक आपके ई-मेल प्रदाता ने आपको आउटगोइंग मेल सर्वर विवरण प्रदान किया होगा जो आप उन्हें आपूर्ति कर सकते हैं, निम्नानुसार -

mail = smtplib.SMTP('smtp.gmail.com', 587)

पायथन का उपयोग करके एक HTML ई-मेल भेजना

जब आप पायथन का उपयोग करके एक पाठ संदेश भेजते हैं, तो सभी सामग्री को सरल पाठ के रूप में माना जाता है। यहां तक ​​कि अगर आप एक टेक्स्ट संदेश में HTML टैग शामिल करते हैं, तो इसे सरल पाठ के रूप में प्रदर्शित किया जाता है और HTML टैग्स को HTML सिंटैक्स के अनुसार स्वरूपित नहीं किया जाएगा। हालाँकि, पायथन एक HTML संदेश को वास्तविक HTML संदेश के रूप में भेजने का विकल्प प्रदान करता है।

ई-मेल संदेश भेजते समय, आप एक Mime संस्करण, सामग्री प्रकार और HTML ई-मेल भेजने के लिए निर्धारित वर्ण निर्दिष्ट कर सकते हैं।

उदाहरण

HTML सामग्री को ई-मेल के रूप में भेजने के लिए निम्नलिखित एक उदाहरण है। एक बार आजमा कर देखें -

#!/usr/bin/python3

import smtplib

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

ई-मेल के रूप में अटैचमेंट भेजना

मिश्रित सामग्री के साथ ई-मेल भेजने के लिए मेल की स्थापना की आवश्यकता होती है Content-type हेडर करने के लिए multipart/mixed। फिर, टेक्स्ट और अटैचमेंट सेक्शन को निर्दिष्ट किया जा सकता हैboundaries

एक सीमा दो हाइफ़न के साथ शुरू होती है, जिसके बाद एक अद्वितीय संख्या होती है, जो ई-मेल के संदेश भाग में दिखाई नहीं देती है। ई-मेल के अंतिम खंड को दर्शाती एक अंतिम सीमा भी दो हाइफ़न के साथ समाप्त होनी चाहिए।

संलग्न फ़ाइलों के साथ एन्कोड किया जाना चाहिए pack("m") ट्रांसमिशन से पहले बेस 64 एन्कोडिंग का कार्य करता है।

उदाहरण

निम्नलिखित एक उदाहरण है, जो एक फ़ाइल भेजता है /tmp/test.txtएक अनुलग्नक के रूप में। एक बार आजमा कर देखें -

#!/usr/bin/python3

import smtplib
import base64

filename = "/tmp/test.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = '[email protected]'
reciever = '[email protected]'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print ("Error: unable to send email")