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