From eed217262f167ad7766adc015a29bf8fa1cd6384 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 30 Aug 2019 10:52:12 +0200 Subject: [PATCH] Add signal global_email_filter --- src/pretix/base/services/mail.py | 4 +++- src/pretix/base/signals.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/services/mail.py b/src/pretix/base/services/mail.py index 16508c8aa7..519a647136 100644 --- a/src/pretix/base/services/mail.py +++ b/src/pretix/base/services/mail.py @@ -29,7 +29,7 @@ from pretix.base.models import ( from pretix.base.services.invoices import invoice_pdf_task from pretix.base.services.tasks import TransactionAwareTask from pretix.base.services.tickets import get_tickets_for_order -from pretix.base.signals import email_filter +from pretix.base.signals import email_filter, global_email_filter from pretix.celery_app import app from pretix.multidomain.urlreverse import build_absolute_uri @@ -305,6 +305,8 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st email = email_filter.send_chained(event, 'message', message=email, order=order, user=user) + email = global_email_filter.send_chained(None, 'message', message=email, user=user) + try: backend.send_messages([email]) except smtplib.SMTPResponseException as e: diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index 30a54e2302..de1ca431ac 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -514,6 +514,18 @@ If the email is associated with a specific user, e.g. a notification email, the well, otherwise it will be ``None``. """ +global_email_filter = django.dispatch.Signal( + providing_args=['message', 'user'] +) +""" +This signal allows you to implement a middleware-style filter on all outgoing emails. You are expected to +return a (possibly modified) copy of the message object passed to you. + +This signal is called on all events and even if there is no known event. ``sender`` is None. +The ``message`` argument will contain an ``EmailMultiAlternatives`` object. +If the email is associated with a specific user, e.g. a notification email, the ``user`` argument will be passed as +well, otherwise it will be ``None``. +""" layout_text_variables = EventPluginSignal() """