Отправить письмо через Zoho SMTP
Я пытаюсь отправить электронную почту с моего сайта на основе django, но у меня возникла проблема-неожиданно закрыто соединение SMTPServerDisconnected Мой setting.py:
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'me@mydomain.com'
EMAIL_HOST_PASSWORD = 'XXXXXX'
Я использую django 1.5.1, python 2.7.3. Кто может решить эту проблему?
Спасибо за помощь
9 ответов
у меня такая же проблема с тайм-ауты соединения. Мне кажется, что есть проблемы вокруг SSL-сокетов в библиотеке SMTP Django по умолчанию. В версии разработки Django есть возможность установить EMAIL_USE_SSL = True
что позволяет использовать подразумевается соединение TLS (в отличие от явно, который указан как EMAIL_USE_TLS = True
). Как правило, первый (неявный) использует порт 465, в то время как последний (явный) использует порт 587. Вижу Джанго docs -- сравнивать версии с версии 1.5. Обратите внимание, что опция EMAIL_USE_SSL
нет в 1.5.
таким образом, проблема в том, что SMTP-сервер Zoho по умолчанию использует порт 465 и требует SSL, а EMAIL_USE_TLS
опция не выполняет это требование. (Примечание: возможно, попробуйте установить этот параметр в False
? Я не пытался.) Во всяком случае, я лучше всего предполагаю, что это специфическая проблема Django и не может быть решена до 1.7.
как для решение вашей проблемы: вы можете получить доступ к SMTP-серверу Zoho с помощью Python (2.7.1)'s smtplib
(см. скрипт ниже). Итак, если вы хотите немного неэлегантное исправление, вы можете пойти по этому маршруту. Я проверил это в Django 1.5.1 и он работает как шарм.
вот автономный скрипт Python (который можно адаптировать для использования в проекте Django):
import smtplib
from email.mime.text import MIMEText
# Define to/from
sender = 'sender@example.com'
recipient = 'recipient@example.com'
# 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('sender@example.com', 'password')
server.sendmail(sender, [recipient], msg.as_string())
server.quit()
попробуйте проверить, что приведенный выше скрипт работает с вашими учетными данными Zoho, прежде чем подключать его к веб-проекту. Хороший удачи!
В моем случае я получал, что:
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 = 'dio@streetbarz.com'
EMAIL_HOST_PASSWORD = 'password'
после установки сервера.set_debuglevel (1), я обнаружил, что мой DEFAULT_FROM_EMAIL отличается от EMAIL_HOST_USER
DEFAULT_FROM_EMAIL = "dio@streetbarz.com"
добавив, что Исправлена проблема.
ответ B. Welsh не решает проблему, если вы хотите получить отчеты об ошибках по электронной почте.
Итак, для всех, кому это нужно:
порт для TLS Zoho составляет 587, как определено в их страница конфигурации SMTP-сервера . Эта страница также указывает, что вы не можете использовать "от", отличное от используемого вами письма, иначе оно не пройдет.
есть код, который вам нужен в settings.py
чтобы получить отчет об ошибке по электронной почте работает:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
ADMINS = (('Yourname', 'youremail@yourdomain.com'),)
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
у меня есть способ отправить с помощью django 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
попробуйте 1 вместо True:
EMAIL_USE_TLS = 1
EMAIL_PORT = 465
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'me@mydomain.com'
EMAIL_HOST_PASSWORD = 'XXXXXX'
альтернативно попробуйте альтернативный порт:
EMAIL_USE_TLS = 1
EMAIL_PORT = 587
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'me@mydomain.com'
EMAIL_HOST_PASSWORD = 'XXXXXX'
ваш класс бэкэнда электронной почты stmp может быть старым. Гото!--1-->
python/site-packages/django/core/mail/stmp.py
file и убедитесь, что у вас есть USE_SSL в качестве опции. Если нет, просто замените весь файл на тот, который делает. Вот, держи. Работал на меня с ЗОХО.
извините за плохое форматирование этого ответа, это мой первый вклад в SO...
параметры конфигурации SMTP для Zoho Mail-TLS используют порт 587 и ssl 465. так
использоватьEMAIL_PORT = 587
Если вы используете EMAIL_USE_TLS = True
я обнаружил, что Zoho не любит стандартный django.ядро.почта.подход send_mail. Проблема, по-видимому, связана с типом контента. Есть несколько способов обойти это, мой подход состоял в том, чтобы переключиться на EmailMessage, который имеет более богатый интерфейс и позволяет передавать тип контента в заголовке.
переключение от этого:
from django.core import mail
mail.send_mail(subject='Hello',
message='Body goes here',
from_email='user@example.com',
recipient_list=['user@example.com'])
для этого:
from django.core.mail import EmailMessage
email = EmailMessage(
subject='Hello',
body='Body goes here',
from_email='user@example.com',
to=['user@example.com'],
reply_to=['user@example.com'],
headers={'Content-Type': 'text/plain'},
)
email.send()
другие настройки почты Zoho:
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'user@example.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
это решило мои проблемы с отправкой почты Zoho и совместим с другими плагинами очереди, такими как django-yubin.
немного не связано с вопросом, но обратите внимание, что Zoho Mail больше не предлагает поддержку IMAP/POP со своим бесплатным планом. Надеюсь, я смогу сэкономить время отладки с этим сообщением.
```
FREE PLAN
Up to 25 Users
5GB* /User, 25MB Attachment Limit
Webmail access only+. Single domain hosting.
```
+поддержка IMAP/POP доступна исключительно с платными планами.
https://www.zoho.com/workplace/pricing.html?src=zmail
старые бесплатные планы (зарегистрирован до 2018 года???), кажется, еще есть Поддержка IMAP / POP доступна
источник: https://help.zoho.com/portal/community/topic/zoho-free-tier-pop-imap-activesync-no-longer-free