2011-12-09 6 views
5

के बारे में भ्रमित है, मैं अजगर में एक ईमेल भेजने की कोशिश कर रहा हूं। मेरा कोड यहाँ है।पायथन smtplib के साथ ईमेल भेजना काम नहीं कर रहा है, "से" फ़ील्ड

import smtplib 

if __name__ == '__main__': 
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[0], message) 
server.quit() 
print "Message sent!" 

यह त्रुटि के बिना चलाता है, लेकिन कोई ईमेल [email protected] को भेजा जाता है।

प्रश्न

एक बात मैं इस कोड के बारे में समझ में नहीं आता --- जब FROM क्षेत्र की स्थापना मैं क्या प्रतिबंध है?

क्या मुझे किसी भी तरह यह कहना है कि यह मेरे कंप्यूटर से था?

किसी और के ईमेल को धोखा देने से रोकने के लिए क्या जगह है?

या क्या मैं ऐसा करने की स्वतंत्रता में हूं?

+1

क्यों [0] और नहीं? – sherpya

+0

मैंने सोचा कि शायद मुझे एक सूची में गुजरने का अनुमान नहीं था, लेकिन मुझे लगता है कि यह समस्या नहीं है। (मैंने दोनों तरीकों की कोशिश की, कोई फर्क नहीं पड़ता) – WillHaack

+0

यह मेरे लिए काम करता है, sendmail फ़ंक्शन के परिणाम प्रिंट करें यह एक खाली dict होना चाहिए, सर्वर.set_debuglevel (1) – sherpya

उत्तर

6

यह बिना त्रुटि के चलता है, लेकिन [email protected] पर कोई ईमेल नहीं भेजा जाता है।

इसका आमतौर पर मतलब है, संदेश 'एमटीए (मेलसेवर) को' लोकलहोस्ट 'पर स्थानांतरित कर दिया गया था, लेकिन यह सर्वर इसे जीमेल पर रिले नहीं कर सका। शायद यह "[email protected]" पर बाउंस संदेश भेजने की कोशिश की और वह भी असफल रहा। या यह संदेश सफलतापूर्वक भेजा लेकिन यह gmails स्पैम फ़ोल्डर में उतरा (क्योंकि यह एक तारीख हेडर अनुपलब्ध है संदेश स्पैम नियमों को चालू कर सकते)

एक बात मैं इस कोड के बारे में समझ में नहीं आता --- क्या प्रतिबंध करना मेरे पास फ़ील्ड सेट करते समय है?

यह एक वाक्य रचना मान्य ईमेल पता

मैं किसी भी तरह कहने के लिए है कि यह अपने कंप्यूटर से था है होना चाहिए?

संख्या। लेकिन यह समस्या हो सकती है क्यों इसे वितरित नहीं किया गया था। क्या आपका कंप्यूटर घर/गतिशील/डायल-अप आईपी पर है? जीमेल (और कई अन्य प्रदाता) ऐसे आईपी से मेल स्वीकार नहीं करते हैं। आपके मेलसेवर का हेल्लो गलत हो सकता है, DNS सेटिंग्स गलत हो सकती हैं आदि। आपको सर्वर लॉग की जांच करने की आवश्यकता है। आपको संभवत: लक्ष्य सर्वर से सीधे संपर्क करने की कोशिश करने के बजाय संदेश को रिलेस्टोस्ट के माध्यम से संदेश को रिले करने के लिए अपने स्थानीय मेलसर्वर को कॉन्फ़िगर करना होगा।

किसी और के ईमेल को धोखा देने से रोकने के लिए क्या जगह है?

ज्यादा नहीं, इसलिए हमारे पास जालीदार एड्रेस से इतना स्पैम है। एसपीएफ़/डीकेआईएम जैसी चीजें थोड़ा सा मदद कर सकती हैं, लेकिन एसएमटीपी प्रोटोकॉल स्वयं स्पूफिंग के खिलाफ सुरक्षा प्रदान नहीं करता है।

या क्या मैं ऐसा करने की स्वतंत्रता में हूं?

तकनीकी रूप से हाँ।

0

ठीक है, क्योंकि आप यह निर्दिष्ट नहीं करते कि आप किस प्रकार का ईमेल सर्वर उपयोग कर रहे हैं और इसकी सेटिंग्स, यहां कई चीजें हैं जो गलत हो सकती हैं। सबसे पहले, आपको अपने सर्वर के HOST और पोर्ट को निर्दिष्ट करने और उससे कनेक्ट करने की आवश्यकता है। उदाहरण:

HOST = "smtp.gmail.com" 
PORT = "587" 
SERVER = smtplib.SMTP() 
SERVER.connect(HOST, PORT) 

तो फिर तुम एक उपयोगकर्ता और इस होस्ट को अपने पासवर्ड निर्दिष्ट करना। उदाहरण:

USER = "[email protected]" 
PASSWD = "123456" 

कुछ सर्वर टीएलएस प्रोटोकॉल की आवश्यकता है। उदाहरण:

SERVER.starttls() 

तो फिर तुम लॉग इन करने की जरूरत है। उदाहरण:

SERVER.login(USER,PASSWD) 

उसके बाद ही आप अपने sendmail साथ ईमेल भेजने के लिए सक्षम हैं। यह उदाहरण सबसे आम सर्वरों में बहुत अच्छी तरह से काम करता है। यदि आप ऐसा लगता है, जैसा कि लगता है, आपका स्वयं का सर्वर है, तो आपको लागू करने के लिए बहुत अधिक परिवर्तन नहीं हैं। लेकिन आपको यह जानने की जरूरत है कि इस सर्वर के किस प्रकार की आवश्यकताएं हैं।

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