2014-06-17 6 views
11

से अज्ञात मेल भेजें मैं बाहरी एसएमटीपी सर्वर का उपयोग कर ईमेल भेजने के लिए पायथन का उपयोग कर रहा था। नीचे दिए गए कोड में, मैंने किसी अन्य आईडी पर जीमेल आईडी से ईमेल भेजने के लिए जीमेल एसएमटीपी का उपयोग करने की कोशिश की। मैं नीचे दिए गए कोड के साथ आउटपुट का उत्पादन करने में सक्षम था।स्थानीय पीसी

import smtplib 
from email.MIMEText import MIMEText 
import socket 


socket.setdefaulttimeout(None) 
HOST = "smtp.gmail.com" 
PORT = "587" 
sender= "[email protected]" 
password = "pass" 
receiver= "[email protected]" 

msg = MIMEText("Hello World") 

msg['Subject'] = 'Subject - Hello World' 
msg['From'] = sender 
msg['To'] = receiver 

server = smtplib.SMTP() 
server.connect(HOST, PORT) 
server.starttls() 
server.login(sender,password) 
server.sendmail(sender,receiver, msg.as_string()) 
server.close() 

लेकिन मुझे बाहरी एसएमटीपी सर्वर की मदद के बिना ऐसा करना है। पाइथन के साथ ऐसा कैसे कर सकता है? कृपया मदद करें।

+0

'बाहरी SMTP सर्वर की सहायता के बिना' आप वास्तव में क्या मतलब रखते हैं? आप किसी भी एसएमटीपी सर्वर का उपयोग नहीं करना चाहते हैं? क्या आप अपने स्वयं के एसएमटीपी सर्वर का उपयोग करना चाहते हैं? क्या आप कुछ अन्य एसएमटीपी सर्वर का उपयोग करना चाहते हैं? –

+0

असल में मैं इसे अपने स्वयं के एसएमटीपी सर्वर के साथ चाहता हूं। और यदि एक एसएमटीपी सर्वर के बिना एक ही आवश्यकता को हासिल करना संभव है, तो यह मेरे लिए भी ठीक है। जो मैं पूरा करने की कोशिश कर रहा हूं वह एक अज्ञात कस्टम ईमेल आईडी से मेरे स्थानीय पीसी से किसी अन्य ईमेल आईडी पर एक ईमेल भेज रहा है। –

उत्तर

1

इसे प्राप्त करने का सबसे अच्छा तरीका Fake SMTP कोड है यह महान smtpd module का उपयोग करता है।

#!/usr/bin/env python 
"""A noddy fake smtp server.""" 

import smtpd 
import asyncore 

class FakeSMTPServer(smtpd.SMTPServer): 
    """A Fake smtp server""" 

    def __init__(*args, **kwargs): 
     print "Running fake smtp server on port 25" 
     smtpd.SMTPServer.__init__(*args, **kwargs) 

    def process_message(*args, **kwargs): 
     pass 

if __name__ == "__main__": 
    smtp_server = FakeSMTPServer(('localhost', 25), None) 
    try: 
     asyncore.loop() 
    except KeyboardInterrupt: 
     smtp_server.close() 

इस का उपयोग करने के लिए, fake_stmp.py के रूप में ऊपर बचाने के लिए और:

chmod +x fake_smtp.py 
sudo ./fake_smtp.py 

तुम सच में अधिक जानकारी के में जाने के लिए चाहते हैं, तो मेरा सुझाव है कि आप उस मॉड्यूल के स्रोत कोड को समझते हैं।

कि smtplib कोशिश काम नहीं करता है:

import smtplib 

SERVER = "localhost" 

FROM = "[email protected]" 
TO = ["[email protected]"] # must be a list 

SUBJECT = "Hello!" 

TEXT = "This message was sent with Python's smtplib." 

# Prepare actual message 

message = """\ 
From: %s 
To: %s 
Subject: %s 

%s 
""" % (FROM, ", ".join(TO), SUBJECT, TEXT) 

# Send the mail 

server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 
+1

मुझे यह उदाहरण कहीं और मिला। लेकिन जब भी मैं समझता हूं कि जब भी मैं इस स्थानीय नकली smtp सर्वर की मदद से मेल भेजने की कोशिश कर रहा हूं, तो विधि "process_message" अनुरोध को संभालती है। लेकिन यहां विधि कुछ भी नहीं कर रही है। तो ईमेल रिसीवर के इनबॉक्स में वितरित नहीं हो रहे हैं। कृपया मुझे एक दिशा दें। –

+0

@ निधिन जोसेफ, इस दूसरी स्क्रिप्ट को देखें और इसे आज़माएं, अगर यह काम नहीं करता है तो सुनिश्चित करें कि आपके कंप्यूटर पर उन मॉड्यूल को ठीक से इंस्टॉल किया गया है। – Mansueli

+0

मैं इस उदाहरण का पालन करने की कोशिश कर रहा हूं, लेकिन कोड के दूसरे भाग को निष्पादित करते समय कुछ भी नहीं होता है। स्क्रिप्ट किसी त्रुटि या स्थिति को वापस नहीं करती है। मुझे यह समझने की कोशिश कैसे करनी चाहिए कि क्या खुशी हो रही है? – AlvaroAV

1

सबसे अधिक संभावना है, तो आप पहले से ही एक एसएमटीपी सर्वर मेजबान है कि आप पर काम कर रहे पर चल रहा है हो सकता है। यदि आप ls -l /usr/sbin/sendmail करते हैं तो यह दिखाता है कि इस स्थान पर निष्पादन योग्य फ़ाइल (या किसी अन्य फ़ाइल में सिम्लिंक) मौजूद है? यदि ऐसा है, तो आप आउटगोइंग मेल भेजने के लिए इसका उपयोग कर सकते हैं। प्राप्तकर्ता@recipientdomain.com पर /path/to/file.txt में निहित संदेश भेजने के लिए /usr/sbin/sendmail [email protected] < /path/to/file.txt आज़माएं (/path/to/file.txt एक आरएफसी-अनुरूप ईमेल संदेश होना चाहिए)। यदि यह काम करता है, तो आप अपनी पायथन स्क्रिप्ट से मेल भेजने के लिए/usr/sbin/sendmail का उपयोग कर सकते हैं - या तो/usr/sbin/sendmail को हैंडल खोलकर और इसे संदेश लिखकर, या बस उपरोक्त आदेश को निष्पादित करके सिस्टम कॉल के माध्यम से पायथन लिपि।

संबंधित मुद्दे