import logging import traceback from django.core.mail.backends.base import BaseEmailBackend from .models import FeedbackFromForm, EmailConnectionSettings from django.core.mail import get_connection logger = logging.getLogger(__name__) class CustomMailBackend(BaseEmailBackend): def send_messages(self, email_messages): try: email_settings: EmailConnectionSettings = EmailConnectionSettings.objects.all().first() smtp_backend = get_connection( backend="django.core.mail.backends.smtp.EmailBackend", host=email_settings.host, port=email_settings.port, use_tls=email_settings.use_tls, use_ssl=email_settings.use_ssl, **{ 'username': email_settings.username if email_settings.username else None, 'password': email_settings.password if email_settings.password else None, 'ssl_keyfile': email_settings.ssl_keyfile if email_settings.use_ssl else None, 'ssl_certfile': email_settings.ssl_certfile if email_settings.use_ssl else None } ) except Exception as e: logger.error(f"Failed to initialize SMTP connection: {e}") print(traceback.format_exc()) for email in email_messages: FeedbackFromForm.objects.create( email=email.to[0], subject=email.subject, body=email.body, success=False, error_message=str(e) ) return 0 for email in email_messages: if email_settings and email_settings.username: email.from_email = email_settings.username feedback: FeedbackFromForm = FeedbackFromForm.objects.create( email=email.to[0], subject=email.subject, body=email.body, ) try: smtp_backend.send_messages([email]) feedback.success = True feedback.save() except Exception as e: feedback.error_message = str(e) feedback.save() logger.error(f"Failed to send email to {email.to[0]}: {e}") print(traceback.format_exc()) return len(email_messages)