union_auto_test/mail_vanger/backends.py

60 lines
2.3 KiB
Python
Raw Normal View History

2026-01-10 09:45:10 +00:00
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)