Настроил отправку заявок на звонок

This commit is contained in:
NikDizell 2026-02-24 00:32:11 +03:00
parent c84483424a
commit f449ed8960
3 changed files with 48 additions and 10 deletions

View File

@ -209,8 +209,9 @@ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = os.getenv('EMAIL_HOST') # или smtp.gmail.com, smtp.mail.ru
EMAIL_PORT = int(os.getenv('EMAIL_PORT', 465))
EMAIL_USE_SSL = os.getenv('EMAIL_USE_SSL', 'False').lower() == 'False'
EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS', 'False').lower() == 'False'
EMAIL_USE_SSL = True
# if os.getenv('EMAIL_USE_TLS', 'False').lower() == 'False':
# EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

View File

@ -52,12 +52,8 @@ class CallbackAdmin(admin.ModelAdmin):
actions = ['mark_as_read', 'mark_as_unread', 'mark_as_processed', 'resend_notification']
def resend_notification(self, request, queryset):
from .utils.email_notifications import send_callback_notification
count = 0
for callback in queryset:
success = send_callback_notification(callback)
if success:
count += 1
from .utils.email_notifications import send_multiple_callback_notifications
count = send_multiple_callback_notifications(queryset)
self.message_user(request, f'Уведомления отправлены для {count} заявок')
resend_notification.short_description = "Переотправить email уведомления"

View File

@ -1,5 +1,4 @@
# programmer/utils/email_notifications.py
from django.core.mail import send_mail, EmailMultiAlternatives
from django.core.mail import send_mail, get_connection
from django.template.loader import render_to_string
from django.conf import settings
from django.utils.html import strip_tags
@ -63,3 +62,45 @@ def send_test_email():
except Exception as e:
logger.error(f"Test email failed: {e}")
return False
def send_multiple_callback_notifications(callbacks):
"""
Отправляет уведомления для нескольких заявок, используя одно SMTP-соединение.
Возвращает количество успешно отправленных.
"""
if not callbacks:
return 0
connection = get_connection()
try:
connection.open()
count = 0
for callback in callbacks:
try:
subject = f'🚨 Новая заявка на обратный звонок от {callback.name}'
html_message = render_to_string('emails/callback_notification.html', {
'callback': callback,
'site_url': settings.ALLOWED_HOSTS[0] if settings.ALLOWED_HOSTS else 'localhost',
})
plain_message = strip_tags(html_message)
send_mail(
subject=subject,
message=plain_message,
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=settings.ADMIN_EMAILS,
html_message=html_message,
connection=connection, # используем одно соединение
fail_silently=False,
)
count += 1
except Exception as e:
logger.error(f"Error sending email for callback #{callback.id}: {e}")
connection.close()
return count
except Exception as e:
logger.error(f"Connection error: {e}")
if connection:
connection.close()
return 0