Отправить письмо через 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 в качестве опции. Если нет, просто замените весь файл на тот, который делает. Вот, держи. Работал на меня с ЗОХО.

stmp.py файл

извините за плохое форматирование этого ответа, это мой первый вклад в 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