Программы
Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Настройки традиционно находятся в settings.py. Однако, не всё так просто: для того, чтобы отправить письмо с реального smtp-сервера, надо его поднять и настроить.

Если же не хочется держать свой SMTP-сервер, можете воспользоваться одним из известных публичных серверов. Например, yandex. Для этого нужно добавить свой домен в pdd.yandex.ru, либо же настроить mx-записи для своего домена.

Так, например, добавив свой домен на yandex, можете создать учётную mail запись. Также не забудьте сгенерировать пароль для приложений (стандартный пароль для входа в веб-интерфейс не подойдёт).

Далее нужно настроить Django:

DEFAULT_FROM_EMAIL = '1337@900913.ru'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.yandex.ru'
EMAIL_PORT = 587
EMAIL_HOST_USER = '1337@900913.ru'
EMAIL_HOST_PASSWORD = 'xxxxxxx'

E-mail, пользователь и пароль, само собой, свои.

Во время же разработки не получится отправлять письма с реального smtp сервера, можно воспользоваться "подменой". Так мы можем поднять mock-сервер smtp:

$ python -m smtpd -n -c DebuggingServer localhost:1025

И настройки для разработки будут следующими:

DEFAULT_FROM_EMAIL = '1337@900913.ru'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False

Отправить же письмо можно стандартной командой send_mail:

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

send_mail('Заголовок письма', 'Текст письма', settings.DEFAULT_FROM_EMAIL, ['адреса@получателей'])
Изображение Python 3.11. Что нового?