Ответ
Отправка email в Django осуществляется через модуль django.core.mail. Процесс включает настройку бэкенда и вызов соответствующей функции.
1. Конфигурация в settings.py
Сначала необходимо настроить параметры SMTP-сервера. Для безопасности никогда не храните учетные данные в коде, используйте переменные окружения.
# settings.py
import os
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.example.com' # Ваш SMTP-сервер
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('EMAIL_USER') # Логин из переменных окружения
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS') # Пароль
2. Отправка простого текстового письма
Для быстрой отправки используется функция send_mail.
from django.core.mail import send_mail
send_mail(
subject='Тема письма',
message='Текст сообщения.',
from_email='noreply@example.com', # Должен совпадать с EMAIL_HOST_USER или быть разрешенным
recipient_list=['recipient1@example.com'],
fail_silently=False, # Если True, ошибки отправки будут проигнорированы
)
3. Отправка HTML-письма
Для большего контроля и отправки HTML-контента используется класс EmailMessage.
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
# Можно использовать шаблонизатор Django для генерации HTML
html_content = render_to_string('emails/welcome.html', {'user': 'John'})
email = EmailMessage(
'Тема письма с HTML',
'Это сообщение будет показано, если почтовый клиент не поддерживает HTML.',
'from@example.com',
['to@example.com']
)
email.attach_alternative(html_content, "text/html")
email.send()
Рекомендации для Production
В production-среде отправку писем следует выполнять асинхронно с помощью очередей задач (например, Celery), чтобы не блокировать основной поток приложения и не замедлять ответ пользователю.
Ответ 18+ 🔞
Ага, смотри, тут про почту в Джанге. Ну, в общем, всё просто, как три копейки, но если накосячить — письма твои в никуда улетят, как хуй с горы.
Слушай, первым делом надо в settings.py всё настроить. Это как на почте контору свою зарегистрировать, понимаешь? Только пароли и логины ни в коем случае в код не пихай, а то какой-нибудь пидарас шерстяной их утянет. Используй переменные окружения, я серьёзно.
# settings.py
import os
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.example.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('EMAIL_USER')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS')
Вот, видишь? os.environ.get — это наш спасательный круг. Без него — пиши пропало, доверия ебать ноль к такому коду.
Ну а дальше, если тебе просто текст отправить, то проще некуда. Функция send_mail — твой друг.
from django.core.mail import send_mail
send_mail(
subject='Тема письма',
message='Текст сообщения.',
from_email='noreply@example.com',
recipient_list=['recipient1@example.com'],
fail_silently=False,
)
Только смотри, fail_silently=False поставь, а то письмо не уйдёт, а ты и не узнаешь — волнение ебать потом будет, где же ответ-то.
А если хочешь красоты нахуярить, HTML там всякий, то уже EmailMessage в руки бери. Это как из рогатки стрельнуть или из пушки — разница, блядь, ощутимая.
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
html_content = render_to_string('emails/welcome.html', {'user': 'John'})
email = EmailMessage(
'Тема письма с HTML',
'Это сообщение будет показано, если почтовый клиент не поддерживает HTML.',
'from@example.com',
['to@example.com']
)
email.attach_alternative(html_content, "text/html")
email.send()
Вот, attach_alternative — это ключевой момент. Без него твой HTML-шедевр так и останется мечтой, а клиент покажет голый текст. Пиздопроебибна, да?
И главное, запомни на всю жизнь: в продакшене никогда не шли письма прямо из вьюхи! Представь, пользователь кнопку нажал, а твоё приложение тупит, пока письмо на другой конец света плывёт. Терпения ноль ебать у людей. Ставь задачу в очередь, через Celery там или что-то подобное. Пусть работает в фоне, а пользователю сразу ответ отдавай. Иначе — накрылся медным тазом твой юзабилити.
Вот и вся наука. Не так страшен чёрт, как его малюют. Главное — настройки не проёби и в очередь отправляй.