From ce084cbd3698d221c5a53339b3eb3d14fdeb7453 Mon Sep 17 00:00:00 2001 From: Guillaume Chanaud Date: Sat, 6 Jul 2024 08:41:17 +0200 Subject: [PATCH] Adding a test form to test email server configuration (#235) * Remove duplicate I18N settings removal of LANGUAGE_CODE, TIME_ZONE, USE_I18N AND USE_TZ duplicates in settings.py * Fix incorrect variable in mail backends (typo error) ssl_certfile was incorrectly named as ssl_keyfile * Adding a test email form on the Mail Server page This add a form to send a test mail to test mail server configuration. If any exception is caught during the send_mail it will be shown as a notification. For the moment, any error error in the mail configuration is hard to debug without this. * Resolve bug regarding wrong form input assignation to var --- base/backends.py | 2 +- base/forms.py | 6 +++ .../base/mail_server/form_email_test.html | 44 +++++++++++++++++++ .../base/mail_server/mail_server_view.html | 1 + base/urls.py | 1 + base/views.py | 41 +++++++++++++++++ horilla/settings.py | 18 +++----- 7 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 base/templates/base/mail_server/form_email_test.html diff --git a/base/backends.py b/base/backends.py index fd1b7d7dd..20569efa6 100644 --- a/base/backends.py +++ b/base/backends.py @@ -37,7 +37,7 @@ class DefaultHorillaMailBackend(EmailBackend): ssl_certfile = ( getattr(self.configuration, "ssl_certfile", None) if self.configuration - else ssl_keyfile or getattr(settings, "ssl_certfile", None) + else ssl_certfile or getattr(settings, "ssl_certfile", None) ) self.mail_sent_from = self.dynamic_username super().__init__( diff --git a/base/forms.py b/base/forms.py index ee54cac65..b94cf2ee9 100644 --- a/base/forms.py +++ b/base/forms.py @@ -1929,6 +1929,12 @@ class DynamicMailConfForm(ModelForm): return table_html +class DynamicMailTestForm(forms.Form): + """ + DynamicEmailTest + """ + to_email = forms.EmailField(label="To email", required=True) + class MultipleApproveConditionForm(ModelForm): CONDITION_CHOICE = [ ("equal", _("Equal (==)")), diff --git a/base/templates/base/mail_server/form_email_test.html b/base/templates/base/mail_server/form_email_test.html new file mode 100644 index 000000000..9e8d76c84 --- /dev/null +++ b/base/templates/base/mail_server/form_email_test.html @@ -0,0 +1,44 @@ +{% load i18n %} {% load widget_tweaks %} +

{% trans "Send test email" %}

+
+ {% csrf_token %} + {% for field in form %} + {% if field.field.widget.is_hidden %} + {{ field }} + {% endif %} + {% endfor %} +
+
+
+
{{form.non_field_errors}}
+ {% for field in form.visible_fields %} +
+ + {{ field|add_class:"form-control" }} + + {{field.errors}} +
+ {% endfor %} + +
+ + +
+
+ +
+

+ {{send_test_mail_result}} +

diff --git a/base/templates/base/mail_server/mail_server_view.html b/base/templates/base/mail_server/mail_server_view.html index 144792fe9..9a3075fec 100644 --- a/base/templates/base/mail_server/mail_server_view.html +++ b/base/templates/base/mail_server/mail_server_view.html @@ -55,6 +55,7 @@
+
diff --git a/base/urls.py b/base/urls.py index ef48cbe4f..bfca7d533 100644 --- a/base/urls.py +++ b/base/urls.py @@ -151,6 +151,7 @@ urlpatterns = [ views.mail_server_create_or_update, name="mail-server-create-update", ), + path("settings/mail-server-test-email/", views.mail_server_test_email, name="mail-server-test-email"), path("mail-server-delete", views.mail_server_delete, name="mail-server-delete"), path( "replace-primary-mail", views.replace_primary_mail, name="replace-primary-mail" diff --git a/base/views.py b/base/views.py index a6dfb086f..68060438e 100644 --- a/base/views.py +++ b/base/views.py @@ -58,6 +58,7 @@ from base.forms import ( DepartmentForm, DriverForm, DynamicMailConfForm, + DynamicMailTestForm, DynamicPaginationForm, EmployeeShiftForm, EmployeeShiftScheduleForm, @@ -1199,6 +1200,46 @@ def mail_server_conf(request): ) +@login_required +@permission_required("base.view_dynamicemailconfiguration") +def mail_server_test_email(request): + instance_id = request.GET.get("instance_id") + form = DynamicMailTestForm() + if request.method == "POST": + form = DynamicMailTestForm(request.POST) + if form.is_valid(): + email_to = form.cleaned_data["to_email"] + subject = _("Test mail from Horilla") + body = _("Email tested successfully") + email_backend = ConfiguredEmailBackend() + emailconfig = DynamicEmailConfiguration.objects.filter( + id=instance_id + ).first() + email_backend.configuration = emailconfig + try: + send_mail( + subject, + body, + email_backend.dynamic_username_with_display_name, + [email_to], + fail_silently=False, + connection=email_backend + ) + except Exception as e: + messages.error( + request, + " ".join([_("Something went wrong :"), str(e)]) + ) + return HttpResponse("") + messages.success(request, _("Mail sent successfully")) + return HttpResponse("") + return render( + request, + "base/mail_server/form_email_test.html", + {"form": form, "instance_id": instance_id} + ) + + @login_required @permission_required("base.delete_dynamicemailconfiguration") def mail_server_delete(request): diff --git a/horilla/settings.py b/horilla/settings.py index 4e6a00a1a..09d2c014b 100755 --- a/horilla/settings.py +++ b/horilla/settings.py @@ -155,18 +155,6 @@ AUTH_PASSWORD_VALIDATORS = [ ] -# Internationalization -# https://docs.djangoproject.com/en/4.1/topics/i18n/ - -LANGUAGE_CODE = "en-us" - -TIME_ZONE = "Asia/Kolkata" - -USE_I18N = True - -USE_TZ = True - - # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.1/howto/static-files/ @@ -228,6 +216,12 @@ LOCALE_PATHS = [ join(BASE_DIR, "horilla", "locale"), ] + +# Internationalization +# https://docs.djangoproject.com/en/4.1/topics/i18n/ + +LANGUAGE_CODE = "en-us" + TIME_ZONE = "Asia/Kolkata" USE_I18N = True