Merged in [15708] and [15730] from housley@vigilsec.com:

Added a mail alias for all review team secretaries. Fixes #2139.  Use
the alias if there is one for email about review request changes.  Added
a test for the review team secretary alias functionality.
 - Legacy-Id: 15747
Note: SVN reference [15708] has been migrated to Git commit 6067dcbfef

Note: SVN reference [15730] has been migrated to Git commit d525ade0b0
This commit is contained in:
Henrik Levkowetz 2018-11-10 20:32:42 +00:00
parent 3b811ecb41
commit e024cca8c4
3 changed files with 20 additions and 5 deletions

View file

@ -4,7 +4,7 @@ from django.db import models
from django.template import Template, Context
from email.utils import parseaddr
from ietf.utils.mail import formataddr
from ietf.utils.mail import formataddr, get_email_addresses_from_text
from ietf.person.models import Email
from ietf.review.models import ReviewTeamSettings
@ -60,7 +60,7 @@ class Recipient(models.Model):
if self.template:
rendering = Template('{%% autoescape off %%}%s{%% endautoescape %%}'%self.template).render(Context(kwargs))
if rendering:
retval.extend([x.strip() for x in rendering.split(',')])
retval.extend( get_email_addresses_from_text(rendering) )
return clean_duplicates(retval)
@ -175,7 +175,7 @@ class Recipient(models.Model):
if not group.acronym=='none':
rts = ReviewTeamSettings.objects.filter(group=group).first()
if rts and rts.secr_mail_alias and len(rts.secr_mail_alias) > 1:
addrs = [rts.secr_mail_alias, ]
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))
return addrs

View file

@ -17,7 +17,7 @@ from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream
from ietf.review.models import (ReviewRequest, ReviewRequestStateName, ReviewTypeName,
ReviewerSettings, UnavailablePeriod, ReviewWish, NextReviewerInTeam,
ReviewTeamSettings, ReviewSecretarySettings)
from ietf.utils.mail import send_mail
from ietf.utils.mail import send_mail, get_email_addresses_from_text
from ietf.doc.utils import extract_complete_replaces_ancestor_mapping_for_docs
def active_review_teams():
@ -352,7 +352,8 @@ def email_review_request_change(request, review_req, subject, msg, by, notify_se
if notify_secretary:
rts = ReviewTeamSettings.objects.filter(group=review_req.team).first()
if rts and rts.secr_mail_alias and rts.secr_mail_alias.strip() != '':
to.add(rts.secr_mail_alias)
for addr in get_email_addresses_from_text(rts.secr_mail_alias):
to.add(addr)
else:
extract_email_addresses(Role.objects.filter(name="secr", group=review_req.team).distinct())
if notify_reviewer:

View file

@ -448,3 +448,17 @@ def is_valid_email(address):
return True
except ValidationError:
return False
def get_email_addresses_from_text(text):
"""
Expects a string with one or more email addresses, each in 2822-compatible
form, separated by comma (as in an RFC2822, Section 3.4 address-list)
Could be as simple as 'foo@example.com' or as complex as 'Some Person
<some.person@example.com>, "list@ietf.org"\n\t<list@ietf.org>'.
Returns a list of properly formatted email address strings.
"""
return [ formataddr(e) for e in getaddresses([text, ]) ]