When group secretary email addresses occurred in some mailtrigger To: entries, they were given with both name and address parts, while when occurring in Cc: entries, no names were present. Fixed one case of this, and adjusted a test case for consistency. Also added a more general utility function to exclude selected email addresses from email address lists.

- Legacy-Id: 17107
This commit is contained in:
Henrik Levkowetz 2019-11-27 21:49:22 +00:00
parent 5cf2cac8d0
commit 2c28cb3eb0
4 changed files with 19 additions and 5 deletions

View file

@ -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('<reviewsecretary@example.com>', outbox[0]["Cc"])
self.assertIn('<reviewer@example.com>', outbox[0]["To"])
self.assertIn('Deadline changed', outbox[0]['Subject'])

View file

@ -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):

View file

@ -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)

View file

@ -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))")