66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
# programmer/utils/email_notifications.py
|
||
from django.core.mail import send_mail, EmailMultiAlternatives
|
||
from django.template.loader import render_to_string
|
||
from django.conf import settings
|
||
from django.utils.html import strip_tags
|
||
import logging
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
def send_callback_notification(callback_request):
|
||
"""
|
||
Отправляет уведомление о новой заявке на обратный звонок
|
||
"""
|
||
try:
|
||
subject = f'🚨 Новая заявка на обратный звонок от {callback_request.name}'
|
||
|
||
# HTML версия письма
|
||
html_message = render_to_string('emails/callback_notification.html', {
|
||
'callback': callback_request,
|
||
'site_url': settings.ALLOWED_HOSTS[0] if settings.ALLOWED_HOSTS else 'localhost',
|
||
})
|
||
|
||
# Текстовая версия письма
|
||
plain_message = strip_tags(html_message)
|
||
|
||
# Проверяем настройки email
|
||
if not all([settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD]):
|
||
logger.error("Email settings are not configured properly")
|
||
return False
|
||
|
||
# Отправляем email
|
||
send_mail(
|
||
subject=subject,
|
||
message=plain_message,
|
||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||
recipient_list=settings.ADMIN_EMAILS,
|
||
html_message=html_message,
|
||
fail_silently=False,
|
||
)
|
||
|
||
logger.info(f"Email notification sent successfully for callback #{callback_request.id}")
|
||
return True
|
||
|
||
except Exception as e:
|
||
logger.error(f"Error sending email notification: {e}")
|
||
return False
|
||
|
||
|
||
def send_test_email():
|
||
"""
|
||
Функция для тестирования отправки email
|
||
"""
|
||
try:
|
||
send_mail(
|
||
subject='📧 Test Email from Django',
|
||
message='This is a test email from your Django application.',
|
||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||
recipient_list=settings.ADMIN_EMAILS,
|
||
fail_silently=False,
|
||
)
|
||
return True
|
||
except Exception as e:
|
||
logger.error(f"Test email failed: {e}")
|
||
return False
|