Настроил отправку заявок на звонок
This commit is contained in:
parent
c84483424a
commit
f449ed8960
@ -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
|
||||
|
||||
@ -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 уведомления"
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user