From 3c4982ea94b2ccc48d0be22f2c2bb8462ff474ba Mon Sep 17 00:00:00 2001 From: Horilla Date: Tue, 18 Mar 2025 13:32:05 +0530 Subject: [PATCH] [Add] BASE: Configuration to toggle display email name --- base/backends.py | 31 ++++++++++++++++++++++--------- base/models.py | 6 ++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/base/backends.py b/base/backends.py index 18c3634ad..96367a2e6 100644 --- a/base/backends.py +++ b/base/backends.py @@ -7,6 +7,7 @@ This module is used to write email backends import importlib import logging +from django.core.cache import cache from django.core.mail import EmailMessage from django.core.mail.backends.smtp import EmailBackend @@ -71,6 +72,23 @@ class DefaultHorillaMailBackend(EmailBackend): configuration = DynamicEmailConfiguration.objects.filter( is_primary=True ).first() + if configuration: + display_email_name = ( + f"{configuration.display_name} <{configuration.from_email}>" + ) + if request: + if ( + configuration.use_dynamic_display_name + and request.user.is_authenticated + ): + display_email_name = f"{request.user.employee_get.get_full_name()} <{request.user.employee_get.get_email()}>" + cache.set(f"dynamic_display_name{request.user.pk}", display_email_name) + if request.user.is_authenticated: + reply_to = [ + f"{request.user.employee_get.get_full_name()} <{request.user.employee_get.get_email()}>", + ] + cache.set(f"reply_to{request.user.pk}", reply_to) + return configuration @property @@ -218,15 +236,10 @@ def new_init( custom __init_method to override """ request = getattr(_thread_locals, "request", None) - - if request: - try: - display_email_name = f"{request.user.employee_get.get_full_name()} <{request.user.employee_get.email}>" - from_email = display_email_name if not from_email else from_email - reply_to = [display_email_name] if not reply_to else reply_to - - except Exception as e: - logger.error(e) + DefaultHorillaMailBackend() + from_email = cache.get(f"dynamic_display_name{request.user.pk}") + if request.user.is_authenticated: + reply_to = cache.get(f"reply_to{request.user.pk}") if not reply_to else reply_to message_init( self, diff --git a/base/models.py b/base/models.py index e12b198d6..735052243 100644 --- a/base/models.py +++ b/base/models.py @@ -1215,6 +1215,12 @@ class DynamicEmailConfiguration(HorillaModel): is_primary = models.BooleanField( default=False, verbose_name=_("Primary Mail Server") ) + use_dynamic_display_name = models.BooleanField( + default=True, + help_text=_( + "By enabling this the display name will take from who triggered the mail" + ), + ) timeout = models.SmallIntegerField( null=True, verbose_name=_("Email Send Timeout (seconds)")