From 58eca93f9a134155562866032ef1da02cb97abc5 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Tue, 9 Jul 2019 13:02:49 +0000 Subject: [PATCH] Added validation of email addresses extracted by get_email_addresses_from_text(). - Legacy-Id: 16439 --- ietf/utils/mail.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ietf/utils/mail.py b/ietf/utils/mail.py index eaf5138db..6f0cb060a 100644 --- a/ietf/utils/mail.py +++ b/ietf/utils/mail.py @@ -2,6 +2,8 @@ import copy import datetime +import logging +import re import smtplib import sys import textwrap @@ -520,6 +522,7 @@ def is_valid_email(address): except ValidationError: return False +logger = logging.getLogger('django') def get_email_addresses_from_text(text): """ @@ -531,5 +534,15 @@ def get_email_addresses_from_text(text): Returns a list of properly formatted email address strings. """ - return [ formataddr(e) for e in getaddresses([text, ]) ] + def valid(email): + name, addr = email + try: + validate_email(addr) + return True + except ValidationError: + logger.error(f'Bad data: get_email_addresses_from_text() got an invalid email address tuple: {email}, in "{text}".') + return False + # whitespace normalization -- getaddresses doesn't do this + text = re.sub(r'(?u)\s+', ' ', text) + return [ formataddr(e) for e in getaddresses([text, ]) if valid(e) ]