Utils: convert internal ParsedEmail to documented EmailAddress

Update internal-use ParsedEmail to be more like Python 3.6+
email.headerregistry.Address, and remove "internal use only"
recommendation.

(Prep for exposing inbound email headers in a convenient form.
Old names remain temporarily available for internal use;
should clean up at some point.)
This commit is contained in:
medmunds
2017-10-24 16:21:49 -07:00
parent fe097ce4b4
commit 3866689084
3 changed files with 79 additions and 62 deletions

View File

@@ -1,6 +1,6 @@
from ..exceptions import AnymailRequestsAPIError
from ..message import AnymailRecipientStatus, ANYMAIL_STATUSES
from ..utils import get_anymail_setting, ParsedEmail, parse_address_list
from ..utils import get_anymail_setting, EmailAddress, parse_address_list
from .base_requests import AnymailRequestsBackend, RequestsPayload
@@ -127,11 +127,11 @@ class MailjetPayload(RequestsPayload):
# if there's a comma in the template's From display-name:
from_email = headers["From"].replace(",", "||COMMA||")
parsed = parse_address_list([from_email])[0]
if parsed.name:
parsed.name = parsed.name.replace("||COMMA||", ",")
if parsed.display_name:
parsed = EmailAddress(parsed.display_name.replace("||COMMA||", ","),
parsed.addr_spec)
else:
name_addr = (headers["SenderName"], headers["SenderEmail"])
parsed = ParsedEmail(name_addr)
parsed = EmailAddress(headers["SenderName"], headers["SenderEmail"])
except KeyError:
raise AnymailRequestsAPIError("Invalid Mailjet template API response",
email_message=self.message, response=response, backend=self.backend)
@@ -165,7 +165,7 @@ class MailjetPayload(RequestsPayload):
formatted_emails = [
email.address if "," not in email.name
# else name has a comma, so force it into MIME encoded-word utf-8 syntax:
else ParsedEmail((email.name.encode('utf-8'), email.email)).formataddr('utf-8')
else EmailAddress(email.name.encode('utf-8'), email.email).formataddr('utf-8')
for email in emails
]
self.data[recipient_type.capitalize()] = ", ".join(formatted_emails)