notifications: Move send_future_email to zerver/lib/send_email.py.

This commit is contained in:
Rishi Gupta
2017-05-03 18:11:47 -07:00
committed by Tim Abbott
parent d70e09b41d
commit 0d4c1b0467
5 changed files with 33 additions and 26 deletions

View File

@@ -10,8 +10,9 @@ from django.db.models import Q, QuerySet
from django.template import loader from django.template import loader
from django.conf import settings from django.conf import settings
from zerver.lib.send_email import send_future_email
from zerver.lib.notifications import build_message_list, hash_util_encode, \ from zerver.lib.notifications import build_message_list, hash_util_encode, \
send_future_email, one_click_unsubscribe_link one_click_unsubscribe_link
from zerver.models import UserProfile, UserMessage, Recipient, Stream, \ from zerver.models import UserProfile, UserMessage, Recipient, Stream, \
Subscription, get_active_streams Subscription, get_active_streams
from zerver.context_processors import common_context from zerver.context_processors import common_context

View File

@@ -8,6 +8,7 @@ from django.core.mail import EmailMultiAlternatives
from django.template import loader from django.template import loader
from django.utils.timezone import now as timezone_now from django.utils.timezone import now as timezone_now
from zerver.decorator import statsd_increment from zerver.decorator import statsd_increment
from zerver.lib.send_email import send_future_email
from zerver.lib.queue import queue_json_publish from zerver.lib.queue import queue_json_publish
from zerver.models import ( from zerver.models import (
Recipient, Recipient,
@@ -378,26 +379,6 @@ def log_digest_event(msg):
logging.basicConfig(filename=settings.DIGEST_LOG_PATH, level=logging.INFO) logging.basicConfig(filename=settings.DIGEST_LOG_PATH, level=logging.INFO)
logging.info(msg) logging.info(msg)
def send_future_email(template_prefix, recipients, from_email=None, context={},
delay=datetime.timedelta(0), tags=[]):
# type: (str, List[Dict[str, Any]], Optional[Text], Dict[str, Any], datetime.timedelta, Iterable[Text]) -> None
subject = loader.render_to_string(template_prefix + '.subject', context).strip()
email_text = loader.render_to_string(template_prefix + '.txt', context)
email_html = loader.render_to_string(template_prefix + '.html', context)
if from_email is None:
from_email = settings.NOREPLY_EMAIL_ADDRESS
for recipient in recipients:
email_fields = {'email_html': email_html,
'email_subject': subject,
'email_text': email_text,
'recipient_email': recipient.get('email'),
'recipient_name': recipient.get('name'),
'from_email': from_email}
ScheduledJob.objects.create(type=ScheduledJob.EMAIL, filter_string=recipient.get('email'),
data=ujson.dumps(email_fields),
scheduled_timestamp=timezone_now() + delay)
def enqueue_welcome_emails(email, name): def enqueue_welcome_emails(email, name):
# type: (Text, Text) -> None # type: (Text, Text) -> None
from zerver.context_processors import common_context from zerver.context_processors import common_context

View File

@@ -1,9 +1,13 @@
from django.conf import settings from django.conf import settings
from django.core.mail import send_mail from django.core.mail import send_mail
from django.template import loader, TemplateDoesNotExist from django.template import loader, TemplateDoesNotExist
from zerver.models import UserProfile from django.utils.timezone import now as timezone_now
from zerver.models import UserProfile, ScheduledJob, get_user_profile_by_email
from typing import Dict, List, Optional, Text import datetime
import ujson
from typing import Any, Dict, Iterable, List, Optional, Text
def display_email(user): def display_email(user):
# type: (UserProfile) -> Text # type: (UserProfile) -> Text
@@ -27,3 +31,23 @@ def send_email(template_prefix, to_email, from_email=None, context={}):
def send_email_to_user(template_prefix, user, from_email=None, context={}): def send_email_to_user(template_prefix, user, from_email=None, context={}):
# type: (str, UserProfile, Optional[Text], Dict[str, Text]) -> bool # type: (str, UserProfile, Optional[Text], Dict[str, Text]) -> bool
return send_email(template_prefix, display_email(user), from_email=from_email, context=context) return send_email(template_prefix, display_email(user), from_email=from_email, context=context)
def send_future_email(template_prefix, recipients, from_email=None, context={},
delay=datetime.timedelta(0), tags=[]):
# type: (str, List[Dict[str, Any]], Optional[Text], Dict[str, Any], datetime.timedelta, Iterable[Text]) -> None
subject = loader.render_to_string(template_prefix + '.subject', context).strip()
email_text = loader.render_to_string(template_prefix + '.txt', context)
email_html = loader.render_to_string(template_prefix + '.html', context)
if from_email is None:
from_email = settings.NOREPLY_EMAIL_ADDRESS
for recipient in recipients:
email_fields = {'email_html': email_html,
'email_subject': subject,
'email_text': email_text,
'recipient_email': recipient.get('email'),
'recipient_name': recipient.get('name'),
'from_email': from_email}
ScheduledJob.objects.create(type=ScheduledJob.EMAIL, filter_string=recipient.get('email'),
data=ujson.dumps(email_fields),
scheduled_timestamp=timezone_now() + delay)

View File

@@ -35,7 +35,7 @@ from zerver.lib.actions import (
get_stream, get_stream,
do_create_realm, do_create_realm,
) )
from zerver.lib.send_email import send_future_email
from zerver.lib.initial_password import initial_password from zerver.lib.initial_password import initial_password
from zerver.lib.actions import ( from zerver.lib.actions import (
do_deactivate_realm, do_deactivate_realm,
@@ -45,7 +45,7 @@ from zerver.lib.actions import (
from zerver.lib.mobile_auth_otp import xor_hex_strings, ascii_to_hex, \ from zerver.lib.mobile_auth_otp import xor_hex_strings, ascii_to_hex, \
otp_encrypt_api_key, is_valid_otp, hex_to_ascii, otp_decrypt_api_key otp_encrypt_api_key, is_valid_otp, hex_to_ascii, otp_decrypt_api_key
from zerver.lib.notifications import enqueue_welcome_emails, \ from zerver.lib.notifications import enqueue_welcome_emails, \
one_click_unsubscribe_link, send_future_email one_click_unsubscribe_link
from zerver.lib.test_helpers import find_pattern_in_email, find_key_by_email, queries_captured, \ from zerver.lib.test_helpers import find_pattern_in_email, find_key_by_email, queries_captured, \
HostRequestMock, unsign_subdomain_cookie HostRequestMock, unsign_subdomain_cookie
from zerver.lib.test_classes import ( from zerver.lib.test_classes import (

View File

@@ -14,7 +14,7 @@ from zerver.lib.feedback import handle_feedback
from zerver.lib.queue import SimpleQueueClient, queue_json_publish from zerver.lib.queue import SimpleQueueClient, queue_json_publish
from zerver.lib.timestamp import timestamp_to_datetime from zerver.lib.timestamp import timestamp_to_datetime
from zerver.lib.notifications import handle_missedmessage_emails, enqueue_welcome_emails, \ from zerver.lib.notifications import handle_missedmessage_emails, enqueue_welcome_emails, \
clear_followup_emails_queue, send_future_email, send_missedmessage_email clear_followup_emails_queue, send_missedmessage_email
from zerver.lib.push_notifications import handle_push_notification from zerver.lib.push_notifications import handle_push_notification
from zerver.lib.actions import do_send_confirmation_email, \ from zerver.lib.actions import do_send_confirmation_email, \
do_update_user_activity, do_update_user_activity_interval, do_update_user_presence, \ do_update_user_activity, do_update_user_activity_interval, do_update_user_presence, \
@@ -22,6 +22,7 @@ from zerver.lib.actions import do_send_confirmation_email, \
render_incoming_message, do_update_embedded_data render_incoming_message, do_update_embedded_data
from zerver.lib.url_preview import preview as url_preview from zerver.lib.url_preview import preview as url_preview
from zerver.lib.digest import handle_digest_email from zerver.lib.digest import handle_digest_email
from zerver.lib.send_email import send_future_email
from zerver.lib.email_mirror import process_message as mirror_email from zerver.lib.email_mirror import process_message as mirror_email
from zerver.decorator import JsonableError from zerver.decorator import JsonableError
from zerver.tornado.socket import req_redis_key from zerver.tornado.socket import req_redis_key