From 84c9333e3f43a7d95cf725558b92141b6bf8440e Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Fri, 13 Jun 2025 10:45:57 +0800 Subject: [PATCH] fix: Activate user language when sending emails --- apps/assets/automations/base/manager.py | 14 ++++++++------ apps/common/tasks.py | 8 +++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/assets/automations/base/manager.py b/apps/assets/automations/base/manager.py index e4999d363..9ff38ba63 100644 --- a/apps/assets/automations/base/manager.py +++ b/apps/assets/automations/base/manager.py @@ -22,6 +22,7 @@ from common.tasks import send_mail_async from common.utils import get_logger, lazyproperty, is_openssh_format_key, ssh_pubkey_gen from ops.ansible import JMSInventory, DefaultCallback, SuperPlaybookRunner from ops.ansible.interface import interface +from users.utils import activate_user_language logger = get_logger(__name__) @@ -151,12 +152,13 @@ class BaseManager: if not recipients: return print(f"Send report to: {','.join([str(u) for u in recipients])}") - - report = self.gen_report() - report = transform(report, cssutils_logging_level="CRITICAL") - subject = self.get_report_subject() - emails = [r.email for r in recipients if r.email] - send_mail_async(subject, report, emails, html_message=report) + for user in recipients: + with activate_user_language(user): + report = self.gen_report() + report = transform(report, cssutils_logging_level="CRITICAL") + subject = self.get_report_subject() + emails = [r.email for r in recipients if r.email] + send_mail_async(subject, report, emails, html_message=report) def gen_report(self): template_path = self.get_report_template() diff --git a/apps/common/tasks.py b/apps/common/tasks.py index 6c20e0e4e..2723c3e77 100644 --- a/apps/common/tasks.py +++ b/apps/common/tasks.py @@ -6,6 +6,7 @@ from django.core.mail import send_mail, EmailMultiAlternatives, get_connection from django.utils.translation import gettext_lazy as _ from common.storage import jms_storage +from users.models import User from .utils import get_logger logger = get_logger(__file__) @@ -48,6 +49,8 @@ def send_mail_async(*args, **kwargs): Example: send_mail_sync.delay(subject, message, recipient_list, fail_silently=False, html_message=None) """ + from users.utils import activate_user_language + if len(args) == 3: args = list(args) args[0] = (settings.EMAIL_SUBJECT_PREFIX or '') + args[0] @@ -63,7 +66,10 @@ def send_mail_async(*args, **kwargs): ) try: - return send_mail(connection=get_email_connection(), *args, **kwargs) + users = User.objects.filter(email__in=recipient_list).all() + for user in users: + with activate_user_language(user): + send_mail(connection=get_email_connection(), *args, **kwargs) except Exception as e: logger.error("Sending mail error: {}".format(e))