Курс по 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