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