Мы реализовали представление отображения формы на странице и передачи формы на обработку. Теперь мы научимся отправлять электронные письма с помощью Django и затем добавим эту функциональность в представление post_share.
Отправка электронных писем с помощью Django
Отправка электронных писем в Django очень проста. Для того чтобы отправлять электронные письма с помощью Django, необходимо иметь локальный SMTP-сервер(работающий по простому протоколу передачи почты) либо обращаться к внешнему SMTP-серверу, например к своему поставщику услуг электронной почты.
Следующие ниже настроечные параметры позволяют определять конфигурацию SMTP, чтобы отправлять электронные письма с помощью Django:
EMAIL_HOST: хост SMTP-сервера; по умолчанию используетсяlocalhost;EMAIL_PORT: SMTP-порт; по умолчанию равен 25;EMAIL_HOST_USER: пользовательское имя для SMTP-сервера;EMAIL_HOST_PASSWORD: пароль для SMTP-сервера;EMAIL_USE_TLS: следует ли использовать защищенное соединение транспортного слоя (TLS)2;EMAIL_USE_SSL: следует ли использовать неявное защищенное соединение TLS.
В этом примере мы будем использовать SMTP-сервер Google со стандартной учетной записью Gmail.
Если у вас есть учетная запись Gmail, то отредактируйте файл settings.py проекта, добавив следующий ниже исходный код:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# Конфигурация сервера электронной почты
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your_account@gmail.com'
EMAIL_HOST_PASSWORD = ''
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Замените your_account@gmail.com своей реальной учетной записью Gmail. Если у вас нет учетной записи Gmail, то можете использовать конфигурацию SMTP-сервера своего поставщика услуг электронной почты.
Вместо Gmail также можно использовать профессиональный масштабируемый почтовый сервис, который позволяет отправлять электронные письма по протоколу SMTP, используя ваш собственный домен.
Например, SendGrid(https://sendgrid.com/) или простой почтовый сервис Amazon(https://aws.amazon.com/ses/). Оба сервиса потребуют подтверждения домена и учетных записей электронной почты отправителя и предоставят учетные данные SMTP для отправки электронных писем.
Приложения Django django-sendgrid и django-ses упрощают задачу добавления сервисов SendGrid или Amazon SES в свой проект. Инструкции по установке django-sendgrid находятся на странице https://github.com/sklarsa/django-sendgrid-v5, инструкции по установке django-ses расположены на странице https://github.com/django-ses/django-ses.
Если вы не можете использовать SMTP-сервер, то можно сообщить Django, что нужно писать электронные письма в консоль, добавив в файл settings.py следующий ниже настроечный параметр:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Используя этот параметр, Django будет выводить все электронные письма в оболочку, не отправляя их. Это бывает очень удобно при тестировании своего приложения без SMTP-сервера.
Завершая конфигурирование Gmail, необходимо ввести пароль для SMTP-сервера. Поскольку Google использует двухэтапный процесс верификации и дополнительные меры безопасности, вы не сможете использовать пароль своей учетной записи Google напрямую.
Вместо этого Google позволяет создавать конкретно-прикладные пароли в вашем аккаунте. Пароль приложения – это 16-значный код доступа, который дает менее защищенному приложению или устройству разрешение на доступ к вашей учетной записи Google.
Пройдите по URL-адресу https://myaccount.google.com/ в своем браузере. Введем в поиске:
Далее выбираем Приложение - Другое:
Вводим название my_blog и получаем наш пароль:
Или следуйте инструкции - https://support.google.com/accounts/answer/185833.
Скопируйте сгенерированный пароль приложения. Отредактируйте файл settings.py проекта, добавив пароль приложения в настроечный параметр EMAIL_HOST_PASSWORD, как показано ниже:
# Конфигурация сервера электронной почты
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your_account@gmail.com'
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxxxxx'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Откройте оболочку Python, выполнив следующую ниже команду в командной строке системной оболочки:
python manage.py shell
Исполните следующий ниже исходный код в оболочке Python:
from django.core.mail import send_mail
send_mail('Django mail',
'This e-mail was sent with Django.',
'Ваш e-mail, как и в настройках Django',
['e-mail куда отправить письмо'],
fail_silently=False)
Функция send_mail() принимает тему, сообщение, отправителя и список получателей в качестве требуемых аргументов. Устанавливая опциональный аргумент fail_silently=False, мы сообщаем ей, что если электронное письмо невозможно отправить, нужно вызывать исключение.
Если результат, который вы видите, равен 1, значит, ваше электронное письмо было успешно отправлено:
Проверьте свой почтовый ящик. Если вы все делали правильно, вы должны были получить электронное письмо:
В следующем шаге мы добавим эту функциональность в представление post_share.
Более подробная информация об отправке электронных писем с помощью Django находится на странице https://docs.djangoproject.com/en/5.0/topics/email/.