2013-08-20 7 views
9

के माध्यम से ई-मेल भेजें मैं अपने Django आधारित वेबसाइट से ईमेल भेजने के लिए कोशिश कर रहा हूँ, लेकिन मैं कुछ समस्या मिला - SMTPServerDisconnected कनेक्शन अप्रत्याशित रूप से मेरे setting.py बंद कर दिया:जोहो एसएमटीपी

EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.zoho.com' 
EMAIL_PORT = 465 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'XXXXXX' 

मैं Django 1.5 उपयोग कर रहा हूँ। 1, पायथन 2.7.3। कोई भी इस समस्या को हल कर सकता है?

आपकी मदद

उत्तर

25

मैं कनेक्शन की समय समाप्ति के साथ एक ही समस्या आ रही है। ऐसा लगता है कि डिफ़ॉल्ट Django SMTP लाइब्रेरी में SSL सॉकेट के आसपास समस्याएं हैं। Django के विकास संस्करण में EMAIL_USE_SSL = True सेट करने का विकल्प है जो अंतर्निहित टीएलएस कनेक्शन (स्पष्ट के विपरीत, EMAIL_USE_TLS = True द्वारा निर्दिष्ट) के उपयोग के लिए अनुमति देता है। आम तौर पर पूर्व (निहित) पोर्ट 465 का उपयोग करता है, जबकि बाद वाला (स्पष्ट) पोर्ट 587 का उपयोग करता है। Django docs देखें - संस्करण 1.5 के साथ विकास संस्करण की तुलना करें। ध्यान दें कि विकल्प EMAIL_USE_SSL 1.5 में मौजूद नहीं है।

इस प्रकार, समस्या यह है कि Zoho's default SMTP server uses port 465 and requires SSL है, लेकिन EMAIL_USE_TLS विकल्प इस आवश्यकता को पूरा नहीं करता है। (साइड नोट: शायद इस विकल्प को False पर सेट करने का प्रयास करें? मैंने कोशिश नहीं की।) वैसे भी, मेरा सबसे अच्छा अनुमान यह है कि यह एक Django-विशिष्ट समस्या है और इसे 1.7 तक हल नहीं किया जा सकता है।

आपकी समस्या के समाधान के लिए: आप निश्चित रूप से पायथन (2.7.1) के smtplib (नीचे लिपि देखें) के साथ ज़ोहो के एसएमटीपी सर्वर तक पहुंच सकते हैं। इसलिए, यदि आप थोड़ा सा सुरुचिपूर्ण फिक्स चाहते हैं, तो आप उस मार्ग पर जा सकते हैं। मैंने Django 1.5.1 में इसका परीक्षण किया है और यह एक आकर्षण की तरह काम करता है।

यहाँ स्टैंड-अलोन पायथॉन लिपि (जो एक Django परियोजना में उपयोग के लिए अनुकूलित किया जा सकता) है:

import smtplib 
from email.mime.text import MIMEText 

# Define to/from 
sender = '[email protected]' 
recipient = '[email protected]' 

# Create message 
msg = MIMEText("Message text") 
msg['Subject'] = "Sent from python" 
msg['From'] = sender 
msg['To'] = recipient 

# Create server object with SSL option 
server = smtplib.SMTP_SSL('smtp.zoho.com', 465) 

# Perform operations via server 
server.login('[email protected]', 'password') 
server.sendmail(sender, [recipient], msg.as_string()) 
server.quit() 

जांच करते हुए कि ऊपर स्क्रिप्ट अपने वेब परियोजना में यह प्लग से पहले अपने जोहो पहचान के साथ चलाता है की कोशिश करो। सौभाग्य!

+1

इस विधि मेरे लिए काम कर रहा है :) मैं कैसे संदेश – ZenOut

+0

वर्क्स एक आकर्षण की तरह में html सामग्री भेजते हैं। अतिरिक्त: यदि आप एक से अधिक व्यक्तियों को ईमेल भेजना चाहते हैं, तो दो पंक्तियां बदलें: 'msg [' to '] =' [email protected]; u2 @ ex.com 'और 'server.sendmail (प्रेषक, [' [email protected] ',' [email protected] '], msg.as_string()) ' –

+0

@ZenOut आप मल्टीपार्ट ईमेल का उपयोग करना होगा ..see https://docs.python.org/2/library/ ईमेल-example.html # id5 – Coderaemon

0

प्रयास करें 1 यह सच है के बजाय के लिए धन्यवाद:

EMAIL_USE_TLS = 1 
EMAIL_PORT = 465 
EMAIL_HOST = 'smtp.zoho.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'XXXXXX' 

वैकल्पिक रूप से एक वैकल्पिक बंदरगाह का प्रयास करें:

EMAIL_USE_TLS = 1 
EMAIL_PORT = 587 
EMAIL_HOST = 'smtp.zoho.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'XXXXXX' 
0

आपका stmp ईमेल बैकएंड क्लास पुराना हो सकता है। गोटो

अजगर/साइट-संकुल/Django/कोर/मेल/stmp.py

फ़ाइल और सुनिश्चित करें कि आप एक विकल्प के रूप USE_SSL किया हुआ है। यदि नहीं, तो बस पूरी फ़ाइल को उस व्यक्ति के साथ बदलें जो करता है। हेयर यू गो। ज़ोहो के साथ मेरे लिए काम किया।

stmp.py file

कीजिए इस प्रतिक्रिया के गरीब स्वरूपण, यह मेरी पहली योगदान अतः ...

4

B.Welsh के जवाब समस्या का समाधान नहीं करता है के लिए आप ईमेल द्वारा त्रुटि रिपोर्ट प्राप्त करना चाहते हैं, तो है।

वाले किसी भी व्यक्ति की जरूरत के लिए

तो:

जोहो के टीएलएस के लिए पोर्ट 587 के रूप में उनके SMTP Server Configuration Page में परिभाषित किया गया है। कि पेज यह भी बताता है कि आप उपयोग नहीं कर सकते एक, ईमेल का उपयोग कर रहे तुलना में अलग "से" अन्यथा यह के माध्यम से जाना नहीं होगा।

DEBUG = False 
TEMPLATE_DEBUG = DEBUG 
ADMINS = (('Yourname', '[email protected]'),) 
SERVER_EMAIL = constants.SENDER_EMAIL 

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'smtp.zoho.com' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 
EMAIL_HOST_USER = constants.SENDER_EMAIL 
EMAIL_HOST_PASSWORD = constants.EMAIL_PASSWORD 
1

मैं Django 1.6.8 का उपयोग कर भेजने के लिए एक तरह से मिल गया है:

वहाँ कोड आप settings.py में आवश्यकता ईमेल काम कर रहे द्वारा त्रुटि रिपोर्ट प्राप्त करने के लिए है। सबसे पहले, आपको गिटहब में उपलब्ध django-smtp-ssl इंस्टॉल करना होगा। कोड चलाएँ:

pip install django-smtp-ssl 

और जोड़ने के अपने settings.py के लिए निम्न:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' 
EMAIL_HOST = 'mail.example.com' 
EMAIL_PORT = 465 

देखें लिंक https://github.com/bancek/django-smtp-ssl

11

मेरे मामले में मुझे लगता है कि प्राप्त था:

SMTPServerDisconnected: Connection unexpectedly closed 

: इन सेटिंग के साथ 0
EMAIL_PORT = 465 
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' 
EMAIL_USE_SSL = True 
EMAIL_HOST = 'smtp.zoho.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'password' 

server.set_debuglevel स्थापित करने के बाद (1), मुझे पता चला कि मेरी DEFAULT_FROM_EMAIL EMAIL_HOST_USER

DEFAULT_FROM_EMAIL = "[email protected]" 

कि समस्या को ठीक जोड़ने से अलग था।

+1

यह मेरी समस्या हल! –

+1

यह मेरा मुद्दा भी – Godfrey

+1

@diofeher धन्यवाद आदमी हल! इसने मेरा मुद्दा भी हल किया!आप एक गले, कॉफी, एक बियर या कुछ के लायक हैं! – jfunez

0

एसएमटीपी विन्यास के लिए जोहो मेल सेटिंग - टीएलएस पोर्ट 587 का उपयोग करें और ssl 465 के लिए बहुत उपयोग EMAIL_PORT = 587 आप EMAIL_USE_TLS = सच

0

मैंने पाया कि जोहो एक मानक django.core.mail.send_mail पसंद नहीं करता है का उपयोग करता है, तो दृष्टिकोण। यह समस्या सामग्री-प्रकार से संबंधित प्रतीत होती है। वहाँ कई तरीके आप इस के आसपास काम कर सकता है, मेरे दृष्टिकोण EmailMessage जो एक अमीर इंटरफ़ेस है और आप एक शीर्ष लेख में सामग्री प्रकार पारित करने के लिए अनुमति देता है के लिए स्विच करने के लिए किया गया था।

इस से स्विचिंग:

from django.core.mail import EmailMessage 
email = EmailMessage(
    subject='Hello', 
    body='Body goes here', 
    from_email='[email protected]', 
    to=['[email protected]'], 
    reply_to=['[email protected]'], 
    headers={'Content-Type': 'text/plain'}, 
) 
email.send() 

अन्य जोहो मेल सेटिंग्स:

from django.core import mail 
mail.send_mail(subject='Hello', 
       message='Body goes here', 
       from_email='[email protected]', 
       recipient_list=['[email protected]']) 
इस के लिए

EMAIL_HOST = 'smtp.zoho.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'password' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 
EMAIL_USE_SSL = False 

यह जोहो मेल भेजने के साथ अपने मुद्दों को हल किया और अन्य के साथ संगत है django-yubin जैसे queuing प्लगइन्स।

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