Сервер 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.
Надеюсь кому-то это поможет :)