Настроил отправку заявок на звонок
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_HOST = os.getenv('EMAIL_HOST') # или smtp.gmail.com, smtp.mail.ru
|
||||||
EMAIL_PORT = int(os.getenv('EMAIL_PORT', 465))
|
EMAIL_PORT = int(os.getenv('EMAIL_PORT', 465))
|
||||||
EMAIL_USE_SSL = os.getenv('EMAIL_USE_SSL', 'False').lower() == 'False'
|
EMAIL_USE_SSL = True
|
||||||
EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS', 'False').lower() == 'False'
|
# if os.getenv('EMAIL_USE_TLS', 'False').lower() == 'False':
|
||||||
|
# EMAIL_USE_TLS = True
|
||||||
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
|
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
|
||||||
EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
|
EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
|
||||||
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
|
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']
|
actions = ['mark_as_read', 'mark_as_unread', 'mark_as_processed', 'resend_notification']
|
||||||
|
|
||||||
def resend_notification(self, request, queryset):
|
def resend_notification(self, request, queryset):
|
||||||
from .utils.email_notifications import send_callback_notification
|
from .utils.email_notifications import send_multiple_callback_notifications
|
||||||
count = 0
|
count = send_multiple_callback_notifications(queryset)
|
||||||
for callback in queryset:
|
|
||||||
success = send_callback_notification(callback)
|
|
||||||
if success:
|
|
||||||
count += 1
|
|
||||||
self.message_user(request, f'Уведомления отправлены для {count} заявок')
|
self.message_user(request, f'Уведомления отправлены для {count} заявок')
|
||||||
|
|
||||||
resend_notification.short_description = "Переотправить email уведомления"
|
resend_notification.short_description = "Переотправить email уведомления"
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
# programmer/utils/email_notifications.py
|
from django.core.mail import send_mail, get_connection
|
||||||
from django.core.mail import send_mail, EmailMultiAlternatives
|
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.html import strip_tags
|
from django.utils.html import strip_tags
|
||||||
@ -63,3 +62,45 @@ def send_test_email():
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Test email failed: {e}")
|
logger.error(f"Test email failed: {e}")
|
||||||
return False
|
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