Сервер Django не отправляет письма через SMTP сервера. Что не так?

Письма высланные сервером Django не приходят адресату. SMTP сервер Mail.ru.В данном примере Django настроен в соответствии с инструкцией Mail.ru (см. settings.py ниже ).Никаких ошибок в консоли не появляется.Пробовал отключать\включать TLS и SSL. Сам сервер запущен на localhost.

Вот так выглядит вызов метода, который отправляет письмо (он помещён в другом методе во view что бы срабатывать при переходе по определенному адресу, просто для теста):

from django.core.mail import send_mail
from django.conf import settings

send_mail("email header", "email content",settings.EMAIL_HOST_USER, ["username@gmail.com",], fail_silently=False)

Часть settings.py с настройками отправки писем:

DEBUG = True

EMAIL_HOST = 'smtp.mail.ru'
EMAIL_PORT = 465
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True
EMAIL_HOST_USER = 'myemail@mail.ru'
SERVER_EMAIL = 'myemail@mail.ru'
DEFAULT_FROM_EMAIL = 'myemail@mail.ru'
EMAIL_HOST_PASSWORD = 'w0H3daDpZ2pWuqDm4JNF' 

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Вывод в консоль при срабатывании send_mail():

Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: email header
From: myemail@mail.ru
To: username@gmail.com
Date: Sat, 01 Oct 2022 13:01:33 -0000
Message-ID: <166462929332.8728.3184342138468482655@DESKTOP-UF2TN2R>

email content
-------------------------------------------------------------------------------

Пробовал разные SMTP серверы (Yandex, Mail.ru, Gmail), результат тот же, письма неприходят.

Оказывается всё дело в переменной EMAIL_BACKEND. Её значение в данном случае было:

EMAIL_BACKEND 'django.core.mail.backends.console.EmailBackend'

При этом письма отправлялись только в консоль, видимо это отладочный вариант.

После замены значения на:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

Письма стали приходить на SMTP сервер. Вот что говорит докумендация Django про данную переменную:

Besides django.core.mail.backends.smtp.EmailBackend, you can use:

  • django.core.mail.backends.console.EmailBackend - the console backend that composes the emails that will be sent to the standard output. Not intended for production use.
  • django.core.mail.backends.filebased.EmailBackend - the file backend that creates emails in the form of a new file per each new session opened on the backend. Not intended for production use.
  • django.core.mail.backends.locmem.EmailBackend - the in-memory backend that stores messages in the local memory cache of django.core.mail.outbox. Not intended for production use.
  • django.core.mail.backends.dummy.EmailBackend - the dummy cache backend that implements the cache interface and does nothing with your emails. Not intended for production use.
  • Any out-of-the-box backend for Amazon SES, Mailgun, SendGrid, and other services.

Надеюсь кому-то это поможет :)

Вернуться на верх