diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index da01ecda7..95f510ef0 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -1152,7 +1152,7 @@ class ReviewTests(TestCase): review_req = reload_db_objects(review_req) self.assertEqual(review_req.deadline,new_deadline) self.assertEqual(len(outbox), 1) - self.assertIn('reviewsecretary@example.com', outbox[0]["Cc"]) + self.assertIn('', outbox[0]["Cc"]) self.assertIn('', outbox[0]["To"]) self.assertIn('Deadline changed', outbox[0]['Subject']) diff --git a/ietf/mailtrigger/models.py b/ietf/mailtrigger/models.py index e55324ac0..ed70ddeb1 100644 --- a/ietf/mailtrigger/models.py +++ b/ietf/mailtrigger/models.py @@ -182,7 +182,8 @@ class Recipient(models.Model): if rts and rts.secr_mail_alias and len(rts.secr_mail_alias) > 1: addrs = get_email_addresses_from_text(rts.secr_mail_alias) else: - addrs.extend(group.role_set.filter(name='secr').values_list('email__address',flat=True)) + for role in group.role_set.filter(name='secr'): + addrs.append(role.person.formatted_email()) return addrs def gather_review_req_reviewers(self, **kwargs): diff --git a/ietf/mailtrigger/utils.py b/ietf/mailtrigger/utils.py index 24411f7db..a72d15b97 100644 --- a/ietf/mailtrigger/utils.py +++ b/ietf/mailtrigger/utils.py @@ -6,6 +6,7 @@ import debug # pyflakes:ignore from ietf.mailtrigger.models import MailTrigger, Recipient from ietf.submit.models import Submission +from ietf.utils.mail import excludeaddrs class AddrLists(namedtuple('AddrLists',['to','cc'])): @@ -29,18 +30,17 @@ def gather_address_lists(slug, skipped_recipients=None, create_from_slug_if_not_ to.update(recipient.gather(**kwargs)) to.discard('') if skipped_recipients: - to -= set(skipped_recipients) + to = excludeaddrs(to, skipped_recipients) cc = set() for recipient in mailtrigger.cc.all(): cc.update(recipient.gather(**kwargs)) cc.discard('') if skipped_recipients: - cc -= set(skipped_recipients) + cc = excludeaddrs(cc, skipped_recipients) return AddrLists(to=list(to),cc=list(cc)) - def get_mailtrigger(slug, create_from_slug_if_not_exists, desc_if_not_exists): try: mailtrigger = MailTrigger.objects.get(slug=slug) diff --git a/ietf/utils/mail.py b/ietf/utils/mail.py index 4c295a17d..90aaef863 100644 --- a/ietf/utils/mail.py +++ b/ietf/utils/mail.py @@ -249,6 +249,19 @@ def parseaddr(addr): name, addr = simple_parseaddr(addr) return name, addr +def excludeaddrs(addrlist, exlist): + """ + Takes a list or set of email address strings in 2822 format, and + eliminates entries whose address part occurs in the given exclusion list. + """ + exlist = set([ parseaddr(a)[1] for a in exlist ]) + filtered = [] + for a in addrlist: + if not parseaddr(a)[1] in exlist: + filtered.append(a) + filtered = type(addrlist)(filtered) + return filtered + def condition_message(to, frm, subject, msg, cc, extra): if extra: assertion("isinstance(extra, (dict, Message))")