2013-08-20 7 views
9

Я пытаюсь отправить почту от моего Джанго на основе веб-сайта, но у меня какая-то проблема - SMTPServerDisconnected Соединение неожиданно закрыто Мой setting.py:Отправить электронную почту через SMTP Zoho

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, python 2.7.3. Кто-нибудь может решить эту проблему?

Спасибо за вашу помощь

ответ

25

У меня та же проблема с подключением к тайм-ауты. Мне кажется, что есть проблемы со SSL-сокетами в Django SMTP-библиотеке по умолчанию. В версии разработки 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.

Что касается решения вашей проблемы: вы можете определенно получить доступ к SMTP-серверу Zoho с помощью Python (2.7.1) smtplib (см. Скрипт ниже). Итак, если вы хотите немного неэлегантное исправление, вы можете пойти по этому маршруту. Я тестировал это в Django 1.5.1, и он работает как шарм.

Вот автономные Python скрипт (который может быть адаптирован для использования в проекте 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() 

Попробуйте проверить, что выше скрипт работает с учетными данными Zoho, прежде чем подключить его в ваш веб-проект. Удачи!

+1

Этот метод работает для меня :) Как отправить html-контент в сообщении – ZenOut

+0

Работает как шарм. Дополнение: если вы хотите отправлять электронные письма нескольким лицам, измените две строки: 'msg ['To'] = '[email protected]; u2 @ ex.com'' и' server.sendmail (отправитель, [' [email protected] ',' [email protected] '], msg.as_string()) ' –

+0

@ZenOut вам придется использовать электронную почту Multipart ..see https://docs.python.org/2/library/ email-examples.html # id5 – Coderaemon

0

Try 1 вместо True:

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 может быть старым. Goto

питон/сайт-пакеты/Джанго/ядро ​​/ почта/stmp.py

файл и убедитесь, что у вас есть USE_SSL в качестве опции. Если нет, просто замените весь файл на тот, который делает. Ну вот. Работал для меня с ZOHO.

stmp.py file

Оправдание бедных форматирование этого ответа, это мой первый вклад в SO ...

4

ответ B.Welsh не решает проблему, если вы хотите получать отчеты об ошибках по электронной почте.

Так что для тех, кто нуждается в ней:

Порт для TLS Zoho является 587, как это определено в их SMTP Server Configuration Page. Эта страница также указывает, что вы не можете использовать «от», отличающийся от используемого вами письма, иначе оно не пройдет.

Там в коде, который нужен в settings.py получить сообщение об ошибке по электронной почте работой:

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

У меня есть способ отправить с помощью Джанго 1.6.8. Во-первых, вы должны установить django-smtp-ssl, доступный в GitHub. Выполнить код:

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 

с этими настройками:

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

Параметры конфигурации SMTP для Zoho Mail - TLS используется порт 587 и 465. SSL так использования EMAIL_PORT = 587 если вы используете EMAIL_USE_TLS = True

0

я обнаружил, что Zoho не нравится стандартный django.core.mail.send_mail подход. Проблема, похоже, связана с типом контента. Есть несколько способов, которыми вы могли бы обойти это, мой подход состоял в том, чтобы переключиться на EmailMessage, который имеет более богатый интерфейс и позволяет передавать Content-type в заголовке.

Переключение из этого:

from django.core import mail 
mail.send_mail(subject='Hello', 
       message='Body goes here', 
       from_email='[email protected]', 
       recipient_list=['[email protected]']) 

к этому:

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() 

Другие Zoho настройки почты:

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 

Это решило мои проблемы с Zoho отправки почты и совместим с другими плагины очередей, такие как django-yubin.

Смежные вопросы