union_auto_test/mail_vanger/admin.py

58 lines
2.1 KiB
Python

from django.contrib import admin
from django.http import HttpResponseRedirect
from django.core.mail import get_connection, EmailMessage
from .models import FeedbackFromForm, EmailConnectionSettings
admin.site.register(EmailConnectionSettings)
@admin.register(FeedbackFromForm)
class FeedbackFromFormAdmin(admin.ModelAdmin):
list_display = ('created_at', 'email', 'subject', 'success')
readonly_fields = ('success',)
search_fields = ('email',)
change_form_template = "mail_vanger/resend_button_form.html"
def response_change(self, request, obj):
if "resend-button" in request.POST:
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
}
)
message = EmailMessage(
from_email=email_settings.username,
subject=obj.subject,
body=obj.body,
to=[obj.email]
)
smtp_backend.send_messages([message])
obj.error_message = ''
obj.success = True
except Exception as e:
obj.error_message = f'Ошибка при повторной отправке сообщения: {str(e)}'
obj.save()
return HttpResponseRedirect(".")
return super().response_change(request, obj)