From 933e47293cac2a49cf75f25d2fe03edbd8a5a7b3 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Fri, 23 Feb 2018 09:09:26 +0100 Subject: [PATCH] Accept multiple bcc_to entries in mails construct --- mails/mixins.py | 38 +++++++++++++------ .../registration_invitation.json | 2 +- .../registration_invitation_reminder.json | 2 +- .../submissions_referee_invite.json | 2 +- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/mails/mixins.py b/mails/mixins.py index c85a53568..e34dd9712 100644 --- a/mails/mixins.py +++ b/mails/mixins.py @@ -137,27 +137,41 @@ class MailUtilsMixin: self.subject = self.mail_data['subject'] - def validate_bcc_list(self): - # Get recipients list. Try to send through BCC to prevent privacy issues! - self.bcc_list = [] - if self.mail_data.get('bcc_to', False) and self.object: - if re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to')): - self.bcc_list = [self.mail_data.get('bcc_to')] + def _validate_single_entry(self, entry): + """ + entry -- raw email string or path or properties leading to email mail field + + Returns a list of email addresses found. + """ + if entry and self.object: + if re.match("[^@]+@[^@]+\.[^@]+", entry): + # Email string + return [entry] else: bcc_to = self.object - for attr in self.mail_data.get('bcc_to').split('.'): + for attr in entry.split('.'): try: bcc_to = getattr(bcc_to, attr) except AttributeError: # Invalid property, don't use bcc - return + return [] if not isinstance(bcc_to, list): - self.bcc_list = [bcc_to] + return [bcc_to] else: - self.bcc_list = bcc_to - elif re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to', '')): - self.bcc_list = [self.mail_data.get('bcc_to')] + return bcc_to + elif re.match("[^@]+@[^@]+\.[^@]+", entry): + return [entry] + + def validate_bcc_list(self): + """ + bcc_to in the .json file may contain multiple raw email addreses or property paths to + an email field. The different entries need to be comma separated. + """ + # Get recipients list. Try to send through BCC to prevent privacy issues! + self.bcc_list = [] + for bcc_entry in self.mail_data.get('bcc_to', '').split(','): + self.bcc_list += self._validate_single_entry(bcc_entry) def validate_recipients(self): # Check the send list diff --git a/mails/templates/mail_templates/registration_invitation.json b/mails/templates/mail_templates/registration_invitation.json index 35371fb03..4c7426326 100644 --- a/mails/templates/mail_templates/registration_invitation.json +++ b/mails/templates/mail_templates/registration_invitation.json @@ -1,7 +1,7 @@ { "subject": "SciPost: invitation", "to_address": "email", - "bcc_to": "invited_by.email", + "bcc_to": "invited_by.email,admin@scipost.org", "from_address_name": "SciPost Registration", "from_address": "registration@scipost.org", "context_object": "invitation" diff --git a/mails/templates/mail_templates/registration_invitation_reminder.json b/mails/templates/mail_templates/registration_invitation_reminder.json index 1ab25d8c8..6ed2b96fe 100644 --- a/mails/templates/mail_templates/registration_invitation_reminder.json +++ b/mails/templates/mail_templates/registration_invitation_reminder.json @@ -1,7 +1,7 @@ { "subject": "RE: SciPost: invitation", "to_address": "email", - "bcc_to": "invited_by.email", + "bcc_to": "invited_by.email,admin@scipost.org", "from_address_name": "SciPost Registration", "from_address": "registration@scipost.org", "context_object": "invitation" diff --git a/mails/templates/mail_templates/submissions_referee_invite.json b/mails/templates/mail_templates/submissions_referee_invite.json index a5d6803a4..c1495012e 100644 --- a/mails/templates/mail_templates/submissions_referee_invite.json +++ b/mails/templates/mail_templates/submissions_referee_invite.json @@ -1,7 +1,7 @@ { "subject": "SciPost: refereeing request", "to_address": "referee.user.email", - "bcc_to": "submission.editor_in_charge.user.email", + "bcc_to": "submission.editor_in_charge.user.email,admin@scipost.org", "from_address_name": "SciPost Refereeing", "from_address": "refereeing@scipost.org", "context_object": "invitation" -- GitLab