fix: Activate user language when sending emails

This commit is contained in:
wangruidong 2025-06-13 10:45:57 +08:00
parent 70b2d28760
commit 84c9333e3f
2 changed files with 15 additions and 7 deletions

View File

@ -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 common.utils import get_logger, lazyproperty, is_openssh_format_key, ssh_pubkey_gen
from ops.ansible import JMSInventory, DefaultCallback, SuperPlaybookRunner from ops.ansible import JMSInventory, DefaultCallback, SuperPlaybookRunner
from ops.ansible.interface import interface from ops.ansible.interface import interface
from users.utils import activate_user_language
logger = get_logger(__name__) logger = get_logger(__name__)
@ -151,12 +152,13 @@ class BaseManager:
if not recipients: if not recipients:
return return
print(f"Send report to: {','.join([str(u) for u in recipients])}") print(f"Send report to: {','.join([str(u) for u in recipients])}")
for user in recipients:
report = self.gen_report() with activate_user_language(user):
report = transform(report, cssutils_logging_level="CRITICAL") report = self.gen_report()
subject = self.get_report_subject() report = transform(report, cssutils_logging_level="CRITICAL")
emails = [r.email for r in recipients if r.email] subject = self.get_report_subject()
send_mail_async(subject, report, emails, html_message=report) emails = [r.email for r in recipients if r.email]
send_mail_async(subject, report, emails, html_message=report)
def gen_report(self): def gen_report(self):
template_path = self.get_report_template() template_path = self.get_report_template()

View File

@ -6,6 +6,7 @@ from django.core.mail import send_mail, EmailMultiAlternatives, get_connection
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from common.storage import jms_storage from common.storage import jms_storage
from users.models import User
from .utils import get_logger from .utils import get_logger
logger = get_logger(__file__) logger = get_logger(__file__)
@ -48,6 +49,8 @@ def send_mail_async(*args, **kwargs):
Example: Example:
send_mail_sync.delay(subject, message, recipient_list, fail_silently=False, html_message=None) 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: if len(args) == 3:
args = list(args) args = list(args)
args[0] = (settings.EMAIL_SUBJECT_PREFIX or '') + args[0] args[0] = (settings.EMAIL_SUBJECT_PREFIX or '') + args[0]
@ -63,7 +66,10 @@ def send_mail_async(*args, **kwargs):
) )
try: 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: except Exception as e:
logger.error("Sending mail error: {}".format(e)) logger.error("Sending mail error: {}".format(e))