SES - Validate domain before send_raw_email

This commit is contained in:
Bert Blommers 2020-05-07 09:49:37 +01:00
parent 34911b7c8b
commit 691e206854
2 changed files with 36 additions and 15 deletions

View File

@ -189,7 +189,7 @@ class SESBackend(BaseBackend):
def send_raw_email(self, source, destinations, raw_data, region):
if source is not None:
_, source_email_address = parseaddr(source)
if source_email_address not in self.addresses:
if not self._is_verified_address(source_email_address):
raise MessageRejectedError(
"Did not have authority to send from email %s"
% source_email_address
@ -202,7 +202,7 @@ class SESBackend(BaseBackend):
raise MessageRejectedError("Source not specified")
_, source_email_address = parseaddr(message["from"])
if source_email_address not in self.addresses:
if not self._is_verified_address(source_email_address):
raise MessageRejectedError(
"Did not have authority to send from email %s"
% source_email_address

View File

@ -139,19 +139,7 @@ def test_send_html_email():
def test_send_raw_email():
conn = boto3.client("ses", region_name="us-east-1")
message = MIMEMultipart()
message["Subject"] = "Test"
message["From"] = "test@example.com"
message["To"] = "to@example.com, foo@example.com"
# Message body
part = MIMEText("test file attached")
message.attach(part)
# Attachment
part = MIMEText("contents of test file here")
part.add_header("Content-Disposition", "attachment; filename=test.txt")
message.attach(part)
message = get_raw_email()
kwargs = dict(Source=message["From"], RawMessage={"Data": message.as_string()})
@ -165,6 +153,39 @@ def test_send_raw_email():
sent_count.should.equal(2)
@mock_ses
def test_send_raw_email_validate_domain():
conn = boto3.client("ses", region_name="us-east-1")
message = get_raw_email()
kwargs = dict(Source=message["From"], RawMessage={"Data": message.as_string()})
conn.send_raw_email.when.called_with(**kwargs).should.throw(ClientError)
conn.verify_domain_identity(Domain="example.com")
conn.send_raw_email(**kwargs)
send_quota = conn.get_send_quota()
sent_count = int(send_quota["SentLast24Hours"])
sent_count.should.equal(2)
def get_raw_email():
message = MIMEMultipart()
message["Subject"] = "Test"
message["From"] = "test@example.com"
message["To"] = "to@example.com, foo@example.com"
# Message body
part = MIMEText("test file attached")
message.attach(part)
# Attachment
part = MIMEText("contents of test file here")
part.add_header("Content-Disposition", "attachment; filename=test.txt")
message.attach(part)
return message
@mock_ses
def test_send_raw_email_without_source():
conn = boto3.client("ses", region_name="us-east-1")