Merge pull request #2582 from alphagov/punycode

punycode encode emails before sending
This commit is contained in:
Leo Hemsted
2019-08-12 15:16:44 +01:00
committed by GitHub
2 changed files with 40 additions and 14 deletions

View File

@@ -83,7 +83,7 @@ class AwsSesClient(EmailClient):
response = self._client.send_email(
Source=source,
Destination={
'ToAddresses': to_addresses,
'ToAddresses': [punycode_encode_email(addr) for addr in to_addresses],
'CcAddresses': [],
'BccAddresses': []
},
@@ -93,7 +93,7 @@ class AwsSesClient(EmailClient):
},
'Body': body
},
ReplyToAddresses=reply_to_addresses
ReplyToAddresses=[punycode_encode_email(addr) for addr in reply_to_addresses]
)
except botocore.exceptions.ClientError as e:
self.statsd_client.incr("clients.ses.error")
@@ -116,3 +116,9 @@ class AwsSesClient(EmailClient):
self.statsd_client.timing("clients.ses.request-time", elapsed_time)
self.statsd_client.incr("clients.ses.success")
return response['MessageId']
def punycode_encode_email(email_address):
# only the hostname should ever be punycode encoded.
local, hostname = email_address.split('@')
return '{}@{}'.format(local, hostname.encode('idna').decode('utf-8'))