diff --git a/zerver/lib/digest.py b/zerver/lib/digest.py index 9e8706f69c..c04fdccf47 100644 --- a/zerver/lib/digest.py +++ b/zerver/lib/digest.py @@ -212,7 +212,8 @@ def handle_digest_email(user_profile_id: int, cutoff: float, logger.info("Sending digest email for user %s" % (user_profile.id,)) # Send now, as a ScheduledEmail send_future_email('zerver/emails/digest', user_profile.realm, to_user_ids=[user_profile.id], - from_name="Zulip Digest", from_address=FromAddress.NOREPLY, context=context) + from_name="Zulip Digest", from_address=FromAddress.no_reply_placeholder, + context=context) return None def exclude_subscription_modified_streams(user_profile: UserProfile, diff --git a/zerver/lib/email_notifications.py b/zerver/lib/email_notifications.py index ecb2b1b6cc..65a67d492a 100644 --- a/zerver/lib/email_notifications.py +++ b/zerver/lib/email_notifications.py @@ -546,7 +546,7 @@ def enqueue_welcome_emails(user: UserProfile, realm_creation: bool=False) -> Non from_address = settings.WELCOME_EMAIL_SENDER['email'] else: from_name = None - from_address = FromAddress.SUPPORT + from_address = FromAddress.support_placeholder other_account_count = UserProfile.objects.filter( delivery_email__iexact=user.delivery_email).exclude(id=user.id).count() diff --git a/zerver/lib/send_email.py b/zerver/lib/send_email.py index ea275b7865..1b4e4d9424 100644 --- a/zerver/lib/send_email.py +++ b/zerver/lib/send_email.py @@ -29,6 +29,10 @@ class FromAddress: SUPPORT = parseaddr(settings.ZULIP_ADMINISTRATOR)[1] NOREPLY = parseaddr(settings.NOREPLY_EMAIL_ADDRESS)[1] + support_placeholder = "SUPPORT" + no_reply_placeholder = 'NO_REPLY' + tokenized_no_reply_placeholder = 'TOKENIZED_NO_REPLY' + # Generates an unpredictable noreply address. @staticmethod def tokenized_no_reply_address() -> str: @@ -96,6 +100,13 @@ def build_email(template_prefix: str, to_user_ids: Optional[List[int]]=None, from_name = "Zulip" if from_address is None: from_address = FromAddress.NOREPLY + if from_address == FromAddress.tokenized_no_reply_placeholder: + from_address = FromAddress.tokenized_no_reply_address() + if from_address == FromAddress.no_reply_placeholder: + from_address = FromAddress.NOREPLY + if from_address == FromAddress.support_placeholder: + from_address = FromAddress.SUPPORT + from_email = formataddr((from_name, from_address)) reply_to = None if reply_to_email is not None: diff --git a/zerver/tests/test_signup.py b/zerver/tests/test_signup.py index 8f15976c41..abf1e81d4d 100644 --- a/zerver/tests/test_signup.py +++ b/zerver/tests/test_signup.py @@ -1399,7 +1399,7 @@ so we didn't send them an invitation. We did send invitations to everyone else!" email = data["email"] send_future_email( "zerver/emails/invitation_reminder", referrer.realm, to_emails=[email], - from_address=FromAddress.NOREPLY, context=context) + from_address=FromAddress.no_reply_placeholder, context=context) email_jobs_to_deliver = ScheduledEmail.objects.filter( scheduled_timestamp__lte=timezone_now()) self.assertEqual(len(email_jobs_to_deliver), 1) @@ -1414,7 +1414,7 @@ so we didn't send them an invitation. We did send invitations to everyone else!" email = data["email"] send_future_email( "zerver/emails/invitation_reminder", referrer.realm, to_emails=[email], - from_address=FromAddress.NOREPLY, context=context) + from_address=FromAddress.no_reply_placeholder, context=context) email_jobs_to_deliver = ScheduledEmail.objects.filter( scheduled_timestamp__lte=timezone_now(), type=ScheduledEmail.INVITATION_REMINDER) diff --git a/zerver/worker/queue_processors.py b/zerver/worker/queue_processors.py index 7dd90ad481..c0d425b517 100644 --- a/zerver/worker/queue_processors.py +++ b/zerver/worker/queue_processors.py @@ -241,7 +241,7 @@ class ConfirmationEmailWorker(QueueProcessingWorker): "zerver/emails/invitation_reminder", referrer.realm, to_emails=[invitee.email], - from_address=FromAddress.tokenized_no_reply_address(), + from_address=FromAddress.tokenized_no_reply_placeholder, language=referrer.realm.default_language, context=context, delay=datetime.timedelta(days=settings.INVITATION_LINK_VALIDITY_DAYS - 2))