From 83899f7e0a5044d2034952df6f1cc14e02010671 Mon Sep 17 00:00:00 2001 From: Mikko Nieminen Date: Wed, 24 Apr 2024 14:10:19 +0200 Subject: [PATCH] add adminalert email sending (#415), update email helpers --- CHANGELOG.rst | 4 + adminalerts/forms.py | 20 +- adminalerts/plugins.py | 21 ++ adminalerts/tests/test_views.py | 298 +++++++++++++++--- adminalerts/tests/test_views_ajax.py | 1 + adminalerts/views.py | 106 ++++++- config/settings/test.py | 1 + .../_static/app_adminalerts/alert_form.png | Bin 48684 -> 60045 bytes docs/source/app_adminalerts.rst | 5 + docs/source/app_userprofile.rst | 2 + docs/source/major_changes.rst | 2 + projectroles/email.py | 34 +- 12 files changed, 438 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c49434ee..be145e5b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,9 @@ Added - **General** - Python v3.11 support (#1157) - Flake8 rule in ``Makefile`` (#1387) +- **Adminalerts** + - Admin alert email sending (#415) + - ``notify_email_alert`` app setting (#415) - **Filesfolders** - Optional pagination for REST API list views (#1313) - **Projectroles** @@ -29,6 +32,7 @@ Added - ``SODARPageNumberPagination`` pagination class (#1313) - Optional pagination for REST API list views (#1313) - Email notification opt-out settings (#1417) + - CC and BCC field support in sending generic emails (#415) - **Timeline** - ``sodar_uuid`` field in ``TimelineEventObjectRef`` model (#1415) - REST API views (#1350) diff --git a/adminalerts/forms.py b/adminalerts/forms.py index 75f6a510..cf6f341b 100644 --- a/adminalerts/forms.py +++ b/adminalerts/forms.py @@ -9,9 +9,20 @@ from adminalerts.models import AdminAlert +# Local constants +EMAIL_HELP_CREATE = 'Send alert as email to all users on this site' +EMAIL_HELP_UPDATE = 'Send updated alert as email to all users on this site' + + class AdminAlertForm(SODARModelForm): """Form for AdminAlert creation/updating""" + send_email = forms.BooleanField( + initial=True, + label='Send alert as email', + required=False, + ) + class Meta: model = AdminAlert fields = [ @@ -19,6 +30,7 @@ class Meta: 'date_expire', 'active', 'require_auth', + 'send_email', 'description', ] @@ -40,13 +52,17 @@ def __init__(self, current_user=None, *args, **kwargs): # Creation if not self.instance.pk: - self.fields['date_expire'].initial = ( - timezone.now() + timezone.timedelta(days=1) + self.initial['date_expire'] = timezone.now() + timezone.timedelta( + days=1 ) + self.fields['send_email'].help_text = EMAIL_HELP_CREATE # Updating else: # self.instance.pk # Set description value as raw markdown self.initial['description'] = self.instance.description.raw + self.fields['send_email'].help_text = EMAIL_HELP_UPDATE + # Sending email for update should be false by default + self.initial['send_email'] = False def clean(self): """Custom form validation and cleanup""" diff --git a/adminalerts/plugins.py b/adminalerts/plugins.py index 22d941e8..0e48682e 100644 --- a/adminalerts/plugins.py +++ b/adminalerts/plugins.py @@ -4,12 +4,17 @@ from django.utils import timezone # Projectroles dependency +from projectroles.models import SODAR_CONSTANTS from projectroles.plugins import SiteAppPluginPoint from adminalerts.models import AdminAlert from adminalerts.urls import urlpatterns +# SODAR constants +APP_SETTING_SCOPE_USER = SODAR_CONSTANTS['APP_SETTING_SCOPE_USER'] + + class SiteAppPlugin(SiteAppPluginPoint): """Projectroles plugin for registering the app""" @@ -22,6 +27,22 @@ class SiteAppPlugin(SiteAppPluginPoint): #: UI URLs urls = urlpatterns + #: App settings definition + app_settings = { + 'notify_email_alert': { + 'scope': APP_SETTING_SCOPE_USER, + 'type': 'BOOLEAN', + 'default': True, + 'label': 'Receive email for admin alerts', + 'description': ( + 'Receive email for important administrator alerts regarding ' + 'e.g. site downtime.' + ), + 'user_modifiable': True, + 'global': False, + } + } + #: Iconify icon icon = 'mdi:alert' diff --git a/adminalerts/tests/test_views.py b/adminalerts/tests/test_views.py index 38dce2e4..b9f24e60 100644 --- a/adminalerts/tests/test_views.py +++ b/adminalerts/tests/test_views.py @@ -1,34 +1,54 @@ """Tests for UI views in the adminalerts app""" +from django.conf import settings +from django.core import mail from django.urls import reverse from django.utils import timezone from test_plus.test import TestCase +# Projectroles dependency +from projectroles.app_settings import AppSettingAPI + from adminalerts.models import AdminAlert from adminalerts.tests.test_models import AdminAlertMixin +from adminalerts.views import EMAIL_SUBJECT + + +app_settings = AppSettingAPI() + + +# Local constants +APP_NAME = 'adminalerts' +ALERT_MSG = 'New alert' +ALERT_MSG_UPDATED = 'Updated alert' +ALERT_DESC = 'Description' +ALERT_DESC_UPDATED = 'Updated description' +ALERT_DESC_MARKDOWN = '## Description' +EMAIL_DESC_LEGEND = 'Additional details' class AdminalertsViewTestBase(AdminAlertMixin, TestCase): """Base class for adminalerts view testing""" + def _make_alert(self): + return self.make_alert( + message=ALERT_MSG, + user=self.superuser, + description=ALERT_DESC, + active=True, + require_auth=True, + ) + def setUp(self): # Create users self.superuser = self.make_user('superuser') self.superuser.is_superuser = True self.superuser.is_staff = True self.superuser.save() - self.regular_user = self.make_user('regular_user') + self.user_regular = self.make_user('user_regular') # No user self.anonymous = None - # Create alert - self.alert = self.make_alert( - message='alert', - user=self.superuser, - description='description', - active=True, - require_auth=True, - ) self.expiry_str = ( timezone.now() + timezone.timedelta(days=1) ).strftime('%Y-%m-%d') @@ -37,6 +57,10 @@ def setUp(self): class TestAdminAlertListView(AdminalertsViewTestBase): """Tests for AdminAlertListView""" + def setUp(self): + super().setUp() + self.alert = self._make_alert() + def test_get(self): """Test AdminAlertListView GET""" with self.login(self.superuser): @@ -49,6 +73,10 @@ def test_get(self): class TestAdminAlertDetailView(AdminalertsViewTestBase): """Tests for AdminAlertDetailView""" + def setUp(self): + super().setUp() + self.alert = self._make_alert() + def test_get(self): """Test AdminAlertDetailView GET""" with self.login(self.superuser): @@ -65,6 +93,18 @@ def test_get(self): class TestAdminAlertCreateView(AdminalertsViewTestBase): """Tests for AdminAlertCreateView""" + def _get_post_data(self, **kwargs): + ret = { + 'message': ALERT_MSG, + 'description': ALERT_DESC, + 'date_expire': self.expiry_str, + 'active': True, + 'require_auth': True, + 'send_email': True, + } + ret.update(**kwargs) + return ret + def setUp(self): super().setUp() self.url = reverse('adminalerts:create') @@ -77,44 +117,179 @@ def test_get(self): def test_post(self): """Test POST""" - self.assertEqual(AdminAlert.objects.all().count(), 1) - post_data = { - 'message': 'new alert', - 'description': 'description', - 'date_expire': self.expiry_str, - 'active': 1, - 'require_auth': 1, - } + self.assertEqual(AdminAlert.objects.all().count(), 0) + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data() with self.login(self.superuser): - response = self.client.post(self.url, post_data) + response = self.client.post(self.url, data) self.assertEqual(response.status_code, 302) self.assertEqual(response.url, reverse('adminalerts:list')) - self.assertEqual(AdminAlert.objects.all().count(), 2) + self.assertEqual(AdminAlert.objects.all().count(), 1) + self.assertEqual(len(mail.outbox), 1) + self.assertIn( + EMAIL_SUBJECT.format(state='New', message=ALERT_MSG), + mail.outbox[0].subject, + ) + self.assertEqual( + mail.outbox[0].recipients(), + [settings.EMAIL_SENDER, self.user_regular.email], + ) + self.assertEqual(mail.outbox[0].to, [settings.EMAIL_SENDER]) + self.assertEqual(mail.outbox[0].bcc, [self.user_regular.email]) + self.assertIn(ALERT_MSG, mail.outbox[0].body) + self.assertIn(EMAIL_DESC_LEGEND, mail.outbox[0].body) + self.assertIn(ALERT_DESC, mail.outbox[0].body) + + def test_post_no_description(self): + """Test POST with no description""" + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(description='') + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 1) + self.assertIn(ALERT_MSG, mail.outbox[0].body) + self.assertNotIn(EMAIL_DESC_LEGEND, mail.outbox[0].body) + + def test_post_markdown_description(self): + """Test POST with markdown description""" + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(description=ALERT_DESC_MARKDOWN) + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 1) + self.assertIn(ALERT_MSG, mail.outbox[0].body) + self.assertIn(EMAIL_DESC_LEGEND, mail.outbox[0].body) + # Description should be provided in raw format + self.assertIn(ALERT_DESC_MARKDOWN, mail.outbox[0].body) + + def test_post_no_email(self): + """Test POST with no email to be sent""" + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(send_email=False) + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 0) + + def test_post_inactive(self): + """Test POST with inactive state""" + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(active=False) + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 0) + + def test_post_multiple_users(self): + """Test POST with multiple users""" + user_new = self.make_user('user_new') + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data() + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 1) + self.assertEqual( + mail.outbox[0].recipients(), + [settings.EMAIL_SENDER, user_new.email, self.user_regular.email], + ) + self.assertIn(ALERT_MSG, mail.outbox[0].body) + self.assertIn(EMAIL_DESC_LEGEND, mail.outbox[0].body) + self.assertIn(ALERT_DESC, mail.outbox[0].body) + + def test_post_alt_email_regular_user(self): + """Test POST with alt emails on regular user""" + alt_email = 'alt@example.com' + alt_email2 = 'alt2@example.com' + app_settings.set( + 'projectroles', + 'user_email_additional', + ';'.join([alt_email, alt_email2]), + user=self.user_regular, + ) + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data() + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 1) + self.assertEqual( + mail.outbox[0].recipients(), + [ + settings.EMAIL_SENDER, + self.user_regular.email, + alt_email, + alt_email2, + ], + ) + + def test_post_alt_email_superuser(self): + """Test POST with alt emails on superuser""" + alt_email = 'alt@example.com' + alt_email2 = 'alt2@example.com' + app_settings.set( + 'projectroles', + 'user_email_additional', + ';'.join([alt_email, alt_email2]), + user=self.superuser, + ) + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data() + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 1) + # Superuser alt emails should not be included + self.assertEqual( + mail.outbox[0].recipients(), + [settings.EMAIL_SENDER, self.user_regular.email], + ) + + def test_post_email_disable(self): + """Test POST with email notifications disabled""" + app_settings.set( + APP_NAME, 'notify_email_alert', False, user=self.user_regular + ) + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data() + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 0) def test_post_expired(self): """Test POST with old expiry date (should fail)""" - self.assertEqual(AdminAlert.objects.all().count(), 1) - expiry_fail = (timezone.now() + timezone.timedelta(days=-1)).strftime( + self.assertEqual(AdminAlert.objects.all().count(), 0) + expire_fail = (timezone.now() + timezone.timedelta(days=-1)).strftime( '%Y-%m-%d' ) - post_data = { - 'message': 'new alert', - 'description': 'description', - 'date_expire': expiry_fail, - 'active': 1, - 'require_auth': 1, - } + data = self._get_post_data(date_expire=expire_fail) with self.login(self.superuser): - response = self.client.post(self.url, post_data) + response = self.client.post(self.url, data) self.assertEqual(response.status_code, 200) - self.assertEqual(AdminAlert.objects.all().count(), 1) + self.assertEqual(AdminAlert.objects.all().count(), 0) class TestAdminAlertUpdateView(AdminalertsViewTestBase): """Tests for AdminAlertUpdateView""" + def _get_post_data(self, **kwargs): + ret = { + 'message': ALERT_MSG_UPDATED, + 'description': ALERT_DESC_UPDATED, + 'date_expire': self.expiry_str, + 'active': False, + 'require_auth': True, + 'send_email': False, + } + ret.update(kwargs) + return ret + def setUp(self): super().setUp() + self.alert = self._make_alert() self.url = reverse( 'adminalerts:update', kwargs={'adminalert': self.alert.sodar_uuid}, @@ -129,35 +304,65 @@ def test_get(self): def test_post(self): """Test POST""" self.assertEqual(AdminAlert.objects.all().count(), 1) - post_data = { - 'message': 'updated alert', - 'description': 'updated description', - 'date_expire': self.expiry_str, - 'active': '', - } + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data() with self.login(self.superuser): - response = self.client.post(self.url, post_data) + response = self.client.post(self.url, data) self.assertEqual(response.status_code, 302) self.assertEqual(response.url, reverse('adminalerts:list')) self.assertEqual(AdminAlert.objects.all().count(), 1) self.alert.refresh_from_db() - self.assertEqual(self.alert.message, 'updated alert') - self.assertEqual(self.alert.description.raw, 'updated description') + self.assertEqual(self.alert.message, ALERT_MSG_UPDATED) + self.assertEqual(self.alert.description.raw, ALERT_DESC_UPDATED) self.assertEqual(self.alert.active, False) + self.assertEqual(len(mail.outbox), 0) + + def test_post_email(self): + """Test POST with email update enabled""" + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(active=True, send_email=True) + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 1) + self.assertIn( + EMAIL_SUBJECT.format(state='Updated', message=ALERT_MSG_UPDATED), + mail.outbox[0].subject, + ) + self.assertEqual( + mail.outbox[0].recipients(), + [settings.EMAIL_SENDER, self.user_regular.email], + ) + + def test_post_email_inactive(self): + """Test POST with email update enabled and inactive alert""" + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(send_email=True) + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 0) # No email for inactive event + + def test_post_email_disable(self): + """Test POST with disabled email notifications""" + app_settings.set( + APP_NAME, 'notify_email_alert', False, user=self.user_regular + ) + self.assertEqual(len(mail.outbox), 0) + data = self._get_post_data(active=True, send_email=True) + with self.login(self.superuser): + response = self.client.post(self.url, data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(mail.outbox), 0) def test_post_user(self): """Test POST by different user""" superuser2 = self.make_user('superuser2') superuser2.is_superuser = True superuser2.save() - post_data = { - 'message': 'updated alert', - 'description': 'updated description', - 'date_expire': self.expiry_str, - 'active': '', - } + data = self._get_post_data() with self.login(superuser2): - response = self.client.post(self.url, post_data) + response = self.client.post(self.url, data) self.assertEqual(response.status_code, 302) self.assertEqual(response.url, reverse('adminalerts:list')) self.alert.refresh_from_db() @@ -169,6 +374,7 @@ class TestAdminAlertDeleteView(AdminalertsViewTestBase): def setUp(self): super().setUp() + self.alert = self._make_alert() self.url = reverse( 'adminalerts:delete', kwargs={'adminalert': self.alert.sodar_uuid}, diff --git a/adminalerts/tests/test_views_ajax.py b/adminalerts/tests/test_views_ajax.py index 688f1303..6e6473df 100644 --- a/adminalerts/tests/test_views_ajax.py +++ b/adminalerts/tests/test_views_ajax.py @@ -12,6 +12,7 @@ class TestAdminAlertActiveToggleAjaxView(AdminalertsViewTestBase): def setUp(self): super().setUp() + self.alert = self._make_alert() self.url = reverse( 'adminalerts:ajax_active_toggle', kwargs={'adminalert': self.alert.sodar_uuid}, diff --git a/adminalerts/views.py b/adminalerts/views.py index 0b46b8f9..d39690c7 100644 --- a/adminalerts/views.py +++ b/adminalerts/views.py @@ -1,7 +1,10 @@ """UI views for the adminalerts app""" +import logging + from django.conf import settings from django.contrib import messages +from django.contrib.auth import get_user_model from django.shortcuts import redirect from django.urls import reverse from django.views.generic import ( @@ -14,6 +17,8 @@ from django.views.generic.edit import ModelFormMixin # Projectroles dependency +from projectroles.app_settings import AppSettingAPI +from projectroles.email import get_email_user, send_generic_mail from projectroles.views import ( LoggedInPermissionMixin, HTTPRefererMixin, @@ -25,7 +30,26 @@ from adminalerts.models import AdminAlert +app_settings = AppSettingAPI() +logger = logging.getLogger(__name__) +User = get_user_model() + + +# Local constants +APP_NAME = 'adminalerts' DEFAULT_PAGINATION = 15 +EMAIL_SUBJECT = '{state} admin alert: {message}' +EMAIL_BODY = r''' +An admin alert has been {action}d by {issuer}: + +{message} +'''.lstrip() +EMAIL_BODY_DESCRIPTION = r''' +Additional details: +---------------------------------------- +{description} +---------------------------------------- +''' # Listing/details views -------------------------------------------------------- @@ -63,10 +87,88 @@ class AdminAlertDetailView( class AdminAlertModifyMixin(ModelFormMixin): + """Common modification methods for AdminAlert create/update views""" + + @classmethod + def _get_email_recipients(cls, alert): + """ + Return list of email addresses for alert email recipients, excluding the + alert issuer. + """ + ret = [] + users = User.objects.exclude(sodar_uuid=alert.user.sodar_uuid).order_by( + 'email' + ) + for u in users: + if not app_settings.get(APP_NAME, 'notify_email_alert', user=u): + continue + if not u.email: + logger.warning('No email set for user: {}'.format(u.username)) + continue + if u.email not in ret: + ret.append(u.email) + alt_emails = app_settings.get( + 'projectroles', 'user_email_additional', user=u + ) + if not alt_emails: + continue + for e in alt_emails.split(';'): + if e not in ret: + ret.append(e) + return ret + + def _send_email(self, alert, action): + """ + Send email alerts to all users except for the alert issuer. + + :param alert: AdminAlert object + :param action: "create" or "update" (string) + """ + subject = EMAIL_SUBJECT.format( + state='New' if action == 'create' else 'Updated', + message=alert.message, + ) + body = EMAIL_BODY.format( + action=action, + issuer=get_email_user(alert.user), + message=alert.message, + ) + if alert.description: + body += EMAIL_BODY_DESCRIPTION.format( + description=alert.description.raw + ) + recipients = self._get_email_recipients(alert) + # NOTE: Recipients go under bcc + # NOTE: If we have no recipients in bcc we cancel sending + if len(recipients) == 0: + return 0 + return send_generic_mail( + subject, + body, + [settings.EMAIL_SENDER], + self.request, + reply_to=None, + bcc=recipients, + ) + def form_valid(self, form): - form.save() form_action = 'update' if self.object else 'create' - messages.success(self.request, 'Alert {}d.'.format(form_action)) + self.object = form.save() + email_count = 0 + email_msg_suffix = '' + if ( + form.cleaned_data['send_email'] + and self.object.active + and settings.PROJECTROLES_SEND_EMAIL + ): + email_count = self._send_email(form.instance, form_action) + if email_count > 0: + email_msg_suffix = ', {} email{} sent'.format( + email_count, 's' if email_count != 1 else '' + ) + messages.success( + self.request, 'Alert {}d{}.'.format(form_action, email_msg_suffix) + ) return redirect(reverse('adminalerts:list')) diff --git a/config/settings/test.py b/config/settings/test.py index 19c89d2a..57f435eb 100644 --- a/config/settings/test.py +++ b/config/settings/test.py @@ -31,6 +31,7 @@ # In-memory email backend stores messages in django.core.mail.outbox # for unit testing purposes EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend' +EMAIL_SENDER = 'noreply@example.com' # CACHING # ------------------------------------------------------------------------------ diff --git a/docs/source/_static/app_adminalerts/alert_form.png b/docs/source/_static/app_adminalerts/alert_form.png index 6a390ddb8b7a1b99282e3164be05047130752920..431baeea396b2f958083cee4cd17bfdf84ab4b34 100644 GIT binary patch literal 60045 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

0q?_q_UnyG-Ik?(4t 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 literal 48684 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

{$S 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 ai}Fak+<6k^C@G)41dvyMRr&JuyZ-<%0L_;G diff --git a/docs/source/app_adminalerts.rst b/docs/source/app_adminalerts.rst index a74907b9..8914f65c 100644 --- a/docs/source/app_adminalerts.rst +++ b/docs/source/app_adminalerts.rst @@ -120,6 +120,11 @@ Require Auth If set true, this alert will only be shown to users logged in to the site. If false, it will also appear in the login screen as well as for anonymous users if allowed on the site. +Send Alert as Email + Send alert as email to all users with email notifications enabled, with the + exception of the sender. This is enabled by default when creating an alert. + When updating an existing alert it is initially disabled to avoid redundant + emails when e.g. fixing a typo. Description A longer description, which can be accessed through the :guilabel:`Details` link in the alert element. Markdown syntax is supported. diff --git a/docs/source/app_userprofile.rst b/docs/source/app_userprofile.rst index 8c17a470..c51966fc 100644 --- a/docs/source/app_userprofile.rst +++ b/docs/source/app_userprofile.rst @@ -81,6 +81,8 @@ app plugins. User settings defined in the ``projectroles`` app, available for all SODAR Core using sites: +Receive Email for Admin Alerts + Receive email for :ref:`admin alerts `. Display Project UUID Copying Link If set true, display a link in the project title bar for copying the project UUID into the clipboard. diff --git a/docs/source/major_changes.rst b/docs/source/major_changes.rst index 1f99015f..1a865d06 100644 --- a/docs/source/major_changes.rst +++ b/docs/source/major_changes.rst @@ -22,11 +22,13 @@ Release Highlights - Add REST API versioning independent from repo/site versions - Add timeline REST API - Add optional pagination for REST API list views +- Add admin alert email sending to all users - Add user opt-out settings for email notifications - Add target site user UUID updating in remote sync - Add remote sync of existing target local users - Add remote sync of USER scope app settings - Add checkusers management command +- Add CC and BCC field support in sending generic emails - Rewrite sodarcache REST API views - Rename AppSettingAPI "app_name" arguments to "plugin_name" - Plugin API return data updates and deprecations diff --git a/projectroles/email.py b/projectroles/email.py index 55efc828..1155becb 100644 --- a/projectroles/email.py +++ b/projectroles/email.py @@ -408,7 +408,15 @@ def _validate(user, email): return ret -def send_mail(subject, message, recipient_list, request=None, reply_to=None): +def send_mail( + subject, + message, + recipient_list, + request=None, + reply_to=None, + cc=None, + bcc=None, +): """ Wrapper for send_mail() with logging and error messaging. @@ -417,6 +425,8 @@ def send_mail(subject, message, recipient_list, request=None, reply_to=None): :param recipient_list: Recipients of email (list) :param request: Request object (optional) :param reply_to: List of emails for the "reply-to" header (optional) + :param cc: List of emails for "cc" field (optional) + :param bcc: List of emails for "bcc" field (optional) :return: Amount of sent email (int) """ try: @@ -426,6 +436,8 @@ def send_mail(subject, message, recipient_list, request=None, reply_to=None): from_email=EMAIL_SENDER, to=recipient_list, reply_to=reply_to if isinstance(reply_to, list) else [], + cc=cc if isinstance(cc, list) else [], + bcc=bcc if isinstance(bcc, list) else [], ) ret = e.send(fail_silently=False) logger.debug( @@ -723,17 +735,25 @@ def send_project_archive_mail(project, action, request): def send_generic_mail( - subject_body, message_body, recipient_list, request=None, reply_to=None + subject_body, + message_body, + recipient_list, + request=None, + reply_to=None, + cc=None, + bcc=None, ): """ - Send a notification email to the issuer of an invitation when a user - attempts to accept an expired invitation. + Send a generic mail with standard header and footer and no-reply + notifications. :param subject_body: Subject body without prefix (string) :param message_body: Message body before header or footer (string) :param recipient_list: Recipients (list of User objects or email strings) - :param reply_to: List of emails for the "reply-to" header (optional) :param request: Request object (optional) + :param reply_to: List of emails for the "reply-to" header (optional) + :param cc: List of emails for "cc" field (optional) + :param bcc: List of emails for "bcc" field (optional) :return: Amount of mail sent (int) """ subject = SUBJECT_PREFIX + subject_body @@ -752,5 +772,7 @@ def send_generic_mail( if not reply_to and not settings.PROJECTROLES_EMAIL_SENDER_REPLY: message += NO_REPLY_NOTE message += get_email_footer() - ret += send_mail(subject, message, recp_addr, request, reply_to) + ret += send_mail( + subject, message, recp_addr, request, reply_to, cc, bcc + ) return ret