From 6139fa7b704a1e30c835a4da7b3659e2565a01a7 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 9 Jan 2022 19:02:53 +0100 Subject: [PATCH] Define own function for sending emails and use it --- aleksis/core/celery.py | 4 ++-- aleksis/core/data_checks.py | 5 ++--- aleksis/core/models.py | 4 ++-- aleksis/core/util/email.py | 30 ++++++++++++++++++++++++++++++ aleksis/core/util/notifications.py | 6 ++---- 5 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 aleksis/core/util/email.py diff --git a/aleksis/core/celery.py b/aleksis/core/celery.py index 10457ea9b..0d898812e 100644 --- a/aleksis/core/celery.py +++ b/aleksis/core/celery.py @@ -4,9 +4,9 @@ from django.conf import settings from celery import Celery from celery.signals import task_failure -from templated_email import send_templated_mail from .util.core_helpers import get_site_preferences +from .util.email import send_email os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aleksis.core.settings") @@ -20,7 +20,7 @@ def task_failure_notifier( sender=None, task_id=None, exception=None, args=None, traceback=None, **kwargs ): recipient_list = [e[1] for e in settings.ADMINS] - send_templated_mail( + send_email( template_name="celery_failure", from_email=get_site_preferences()["mail__address"], recipient_list=recipient_list, diff --git a/aleksis/core/data_checks.py b/aleksis/core/data_checks.py index 234c82c0c..e077f4ccd 100644 --- a/aleksis/core/data_checks.py +++ b/aleksis/core/data_checks.py @@ -8,10 +8,10 @@ from django.utils.translation import gettext as _ import reversion from reversion import set_comment -from templated_email import send_templated_mail from .util.celery_progress import ProgressRecorder, recorded_task from .util.core_helpers import get_site_preferences +from .util.email import send_email class SolveOption: @@ -274,9 +274,8 @@ def send_emails_for_data_checks(): for group in get_site_preferences()["general__data_checks_recipient_groups"]: recipient_list += [p.mail_sender for p in group.announcement_recipients if p.email] - send_templated_mail( + send_email( template_name="data_checks", - from_email=get_site_preferences()["mail__address"], recipient_list=recipient_list, context={"results": results_with_checks}, ) diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 9c78211ea..8bb6def6c 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -45,7 +45,6 @@ from oauth2_provider.models import ( ) from phonenumber_field.modelfields import PhoneNumberField from polymorphic.models import PolymorphicModel -from templated_email import send_templated_mail from aleksis.core.data_checks import BrokenDashboardWidgetDataCheck, DataCheck, DataCheckRegistry @@ -65,6 +64,7 @@ from .mixins import ( ) from .tasks import send_notification from .util.core_helpers import generate_random_code, get_site_preferences, now_tomorrow +from .util.email import send_email from .util.model_helpers import ICONS FIELD_CHOICES = ( @@ -386,7 +386,7 @@ class Person(ExtensibleModel): recipients = recipients or [ get_site_preferences()["account__person_change_notification_contact"] ] - send_templated_mail( + send_email( template_name="person_changed", from_email=self.mail_sender_via, headers={ diff --git a/aleksis/core/util/email.py b/aleksis/core/util/email.py new file mode 100644 index 000000000..fc7525a7d --- /dev/null +++ b/aleksis/core/util/email.py @@ -0,0 +1,30 @@ +from typing import Any, Dict, List, Optional + +from django.conf import settings + +from templated_email import send_templated_mail + +from aleksis.core.util.core_helpers import get_site_preferences, process_custom_context_processors + + +def send_email( + template_name: str, + recipient_list: List[str], + context: Dict[str, Any], + from_email: Optional[str] = None, + **kwargs, +): + """Send templated email with data from context processors.""" + processed_context = process_custom_context_processors(settings.PDF_CONTEXT_PROCESSORS) + processed_context.update(context) + if not from_email: + from_address = get_site_preferences()["mail__address"] + from_name = get_site_preferences()["general__title"] + from_email = f"{from_name} <{from_address}>" + return send_templated_mail( + template_name=template_name, + from_email=from_email, + recipient_list=recipient_list, + context=processed_context, + **kwargs, + ) diff --git a/aleksis/core/util/notifications.py b/aleksis/core/util/notifications.py index dac344b7a..13887a197 100644 --- a/aleksis/core/util/notifications.py +++ b/aleksis/core/util/notifications.py @@ -8,9 +8,8 @@ from django.template.loader import get_template from django.utils.functional import lazy from django.utils.translation import gettext_lazy as _ -from templated_email import send_templated_mail - from .core_helpers import lazy_preference +from .email import send_email try: from twilio.rest import Client as TwilioClient @@ -35,9 +34,8 @@ def _send_notification_email(notification: "Notification", template: str = "noti "notification": notification, "notification_user": notification.recipient.addressing_name, } - send_templated_mail( + send_email( template_name=template, - from_email=lazy_preference("mail", "address"), recipient_list=[notification.recipient.email], context=context, ) -- GitLab