mirror of https://github.com/zulip/zulip.git
digest: On an app server, only send digest emails for domains it manages.
(imported from commit 9aea636a19eb6fdefacdc7dc393bf075a05862c5)
This commit is contained in:
parent
235c4d5f8f
commit
61103d8349
|
@ -2321,6 +2321,15 @@ def send_future_email(recipients, email_html, email_text, subject,
|
|||
|
||||
'mail_client' is filled in by the decorator
|
||||
"""
|
||||
# When sending real emails while testing locally, don't accidentally send
|
||||
# emails to non-zulip.com users.
|
||||
if not settings.DEPLOYED and \
|
||||
settings.EMAIL_BACKEND != 'django.core.mail.backends.console.EmailBackend':
|
||||
for recipient in recipients:
|
||||
email = recipient.get("email")
|
||||
if get_user_profile_by_email(email).realm.domain != "zulip.com":
|
||||
raise ValueError("digest: refusing to send emails to non-zulip.com users.")
|
||||
|
||||
# message = {"from_email": "othello@zulip.com",
|
||||
# "from_name": "Othello",
|
||||
# "html": "<p>hello</p> there",
|
||||
|
|
|
@ -52,6 +52,33 @@ def queue_digest_recipient(user_profile, cutoff):
|
|||
"cutoff": cutoff.strftime('%s')}
|
||||
queue_json_publish("digest_emails", event, lambda event: None)
|
||||
|
||||
def domains_for_this_deployment():
|
||||
if settings.DEPLOYED and not settings.ENTERPRISE:
|
||||
# Enterprise deployments don't have a Deployment entry.
|
||||
# Only send zulip.com digests on staging.
|
||||
from zilencer.models import Deployment
|
||||
site_url = settings.EXTERNAL_URI_SCHEME + settings.EXTERNAL_HOST.rstrip("/")
|
||||
try:
|
||||
deployment = Deployment.objects.select_related('realms').get(
|
||||
base_site_url__startswith=site_url)
|
||||
except Deployment.DoesNotExist:
|
||||
raise ValueError("digest: Unable to determine deployment.")
|
||||
|
||||
return (r.domain for r in deployment.realms.all())
|
||||
# Enterprise and localhost.
|
||||
return ()
|
||||
|
||||
def should_process_digest(domain, deployment_domains):
|
||||
if settings.ENTERPRISE:
|
||||
# Enterprise. We ship with a zulip.com realm for the feedback bot, but
|
||||
# don't try to send e-mails to it.
|
||||
return domain != "zulip.com"
|
||||
elif settings.DEPLOYED:
|
||||
return domain in deployment_domains
|
||||
else:
|
||||
# Localhost.
|
||||
return True
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = """Enqueue digest emails for users that haven't checked the app
|
||||
in a while.
|
||||
|
@ -63,7 +90,13 @@ in a while.
|
|||
if datetime.datetime.utcnow().weekday() not in VALID_DIGEST_DAYS:
|
||||
return
|
||||
|
||||
for domain in ["zulip.com"]:
|
||||
digest_domains = ["zulip.com"]
|
||||
deployment_domains = domains_for_this_deployment()
|
||||
|
||||
for domain in digest_domains:
|
||||
if not should_process_digest(domain, deployment_domains):
|
||||
continue
|
||||
|
||||
user_profiles = UserProfile.objects.filter(
|
||||
realm=get_realm(domain), is_active=True, is_bot=False,
|
||||
enable_digest_emails=True)
|
||||
|
|
Loading…
Reference in New Issue