Настройка почтового сервера по SMTP-протоколу

Курс по Django: https://stepik.org/a/183363

Архив проекта: 70_sitewomen.zip

На этом занятии мы с вами воспользуемся реальным SMTP почтовым сервером для отправки сообщений о восстановлении пароля пользователям. В качестве примера я рассмотрю использование почтового сервера компании Яндекс. Но принцип будет тем же и для других SMTP-серверов.

Для учебных целей я уже зарегистрировал аккаунт в Яндексе по ссылке:

passport.yandex.ru/registration/

с почтовым ящиком djangocourse@yandex.ru. Это учебная почта и письма я здесь не смотрю. Давайте настроим сервер для этого ящика с возможностью отправлять почтовые сообщения из фреймворка Django.

Первым делом в аккаунте почты Яндекса перейти в расширенные настройки и далее в «Почтовые программы». Ставим галочки в разделе «Разрешить доступ к почтовому ящику с помощью почтовых клиентов»:

Чтобы не столкнуться с ошибкой аутентификации и правильно настроить SMTP для Yandex, нам необходимо сгенерировать пароль для приложения, чтобы мы смогли аутентифицироваться из нашего проекта на Django. Для этого переходим в свой Яндекс ID («Управление аккаунтом»), далее, «Безопасность», затем, «Доступы» и «Пароли приложений»:

https://id.yandex.ru/security/app-passwords

На этой странице выбрать «Почта» и ввести любой пароль, можно от текущего почтового ящика. Система автоматически сгенерирует пароль для приложения и его нужно обязательно скопировать, так как он показывается только один раз. Скопированный пароль сразу же сохраним в файле settings.py нашего проекта Django в параметре:

EMAIL_HOST_PASSWORD = "zbuekakprdsqnleg"

После этого в этом же файле укажем использовать почтовый SMTP-бэкенд. Можно убрать параметр EMAIL_BACKEND, или прописать его со значением:

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

Подробно о различных бэкендах фреймворка Django можно посмотреть на странице:

https://docs.djangoproject.com/en/4.2/topics/email/#email-backends

Также здесь видим набор параметров, которые необходимо дополнительно прописать для настройки SMTP-бэкенда, то есть, привязать его к нашему почтовому ящику.

Откуда взять данные для этих параметров? Заходим в официальную документацию Яндекса:

https://yandex.ru/support/mail/mail-clients/others.html

и здесь на шаге 3 видим значения необходимых настроек для входящих писем и для исходящих. Нам нужно для исходящих, так как мы будет отправлять письма с нашего почтового ящика.

В моем случае настройки будут следующими:

EMAIL_HOST = "smtp.yandex.ru"
EMAIL_PORT = 465
EMAIL_HOST_USER = "djangocourse@yandex.ru"
EMAIL_HOST_PASSWORD = " bnufhkwcripaunvu"
EMAIL_USE_SSL = True

И, кроме того, для отправки сообщений от имени приложения, необходимо добавить еще такие параметры:

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER
EMAIL_ADMIN = EMAIL_HOST_USER

Конечно, вместо EMAIL_HOST_USER можно указать любой другой E-mail адрес. Главное, чтобы эти три параметра также были прописаны.

На этом настройка SMTP-бэкенда во фреймворке Django завершена и он теперь связан с почтовым сервером Яндекса. Проверим, как все будет работать. Перейдем на страницу восстановления пароля:

http://127.0.0.1:8000/users/password-reset/

Вводим E-mail адрес, который присутствует в БД (это обязательно, иначе письмо не будет отправлено). И нажимаем на кнопку «Сбросить пароль». Если все было сделано правильно, то должна отобразиться информационная страница со сбросом пароля. Переходим в почтовый ящик, куда письмо было отправлено. И видим в нем новое письмо со ссылкой для восстановления пароля. Копируем ссылку, вставляем в адрес браузера и появляется форма изменения пароля. Создаем новый пароль и он успешно меняется для текущего пользователя. Теперь мы можем войти в аккаунт, используя E-mail адрес и пароль, который только что создали. Все работает.

В качестве домашнего задания попробуйте проделать подобную процедуру привязки почтового SMTP-бэкенда к аккаунту Google. Если будут возникать сложности, сначала разберитесь в них самостоятельно. Вся информация об этом есть на просторах Интернета.

Курс по Django: https://stepik.org/a/183363

Видео по теме