diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 1b670c1a78..904f3afd4e 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -6652,7 +6652,9 @@ def filter_presence_idle_user_ids(user_ids: Set[int]) -> List[int]: return sorted(idle_user_ids) -def do_send_confirmation_email(invitee: PreregistrationUser, referrer: UserProfile) -> str: +def do_send_confirmation_email( + invitee: PreregistrationUser, referrer: UserProfile, email_language: str +) -> str: """ Send the confirmation/welcome e-mail to an invited user. """ @@ -6667,7 +6669,7 @@ def do_send_confirmation_email(invitee: PreregistrationUser, referrer: UserProfi "zerver/emails/invitation", to_emails=[invitee.email], from_address=FromAddress.tokenized_no_reply_address(), - language=referrer.realm.default_language, + language=email_language, context=context, realm=referrer.realm, ) @@ -6829,7 +6831,11 @@ def do_invite_users( stream_ids = [stream.id for stream in streams] prereg_user.streams.set(stream_ids) - event = {"prereg_id": prereg_user.id, "referrer_id": user_profile.id} + event = { + "prereg_id": prereg_user.id, + "referrer_id": user_profile.id, + "email_language": user_profile.realm.default_language, + } queue_json_publish("invites", event) if skipped: @@ -6951,6 +6957,7 @@ def do_resend_user_invite_email(prereg_user: PreregistrationUser) -> int: event = { "prereg_id": prereg_user.id, "referrer_id": prereg_user.referred_by.id, + "email_language": prereg_user.referred_by.realm.default_language, } queue_json_publish("invites", event) diff --git a/zerver/tests/test_queue_worker.py b/zerver/tests/test_queue_worker.py index 2e32ec4429..0b5d16ceca 100644 --- a/zerver/tests/test_queue_worker.py +++ b/zerver/tests/test_queue_worker.py @@ -442,6 +442,11 @@ class WorkerTest(ZulipTestCase): ) data: List[Dict[str, Any]] = [ dict(prereg_id=prereg_alice.id, referrer_id=inviter.id), + dict( + prereg_id=prereg_alice.id, + referrer_id=inviter.id, + email_language="en", + ), # Nonexistent prereg_id, as if the invitation was deleted dict(prereg_id=-1, referrer_id=inviter.id), ] @@ -455,7 +460,7 @@ class WorkerTest(ZulipTestCase): "zerver.worker.queue_processors.send_future_email" ) as send_mock: worker.start() - self.assertEqual(send_mock.call_count, 1) + self.assertEqual(send_mock.call_count, 2) def test_error_handling(self) -> None: processed = [] diff --git a/zerver/worker/queue_processors.py b/zerver/worker/queue_processors.py index d94237905e..b0ebac6fa5 100644 --- a/zerver/worker/queue_processors.py +++ b/zerver/worker/queue_processors.py @@ -424,7 +424,11 @@ class ConfirmationEmailWorker(QueueProcessingWorker): logger.info( "Sending invitation for realm %s to %s", referrer.realm.string_id, invitee.email ) - activate_url = do_send_confirmation_email(invitee, referrer) + if "email_language" in data: + email_language = data["email_language"] + else: + email_language = referrer.realm.default_language + activate_url = do_send_confirmation_email(invitee, referrer, email_language) # queue invitation reminder if settings.INVITATION_LINK_VALIDITY_DAYS >= 4: @@ -440,7 +444,7 @@ class ConfirmationEmailWorker(QueueProcessingWorker): referrer.realm, to_emails=[invitee.email], from_address=FromAddress.tokenized_no_reply_placeholder, - language=referrer.realm.default_language, + language=email_language, context=context, delay=datetime.timedelta(days=settings.INVITATION_LINK_VALIDITY_DAYS - 2), )