SES - Validate domain before send_raw_email
This commit is contained in:
parent
34911b7c8b
commit
691e206854
@ -189,7 +189,7 @@ class SESBackend(BaseBackend):
|
|||||||
def send_raw_email(self, source, destinations, raw_data, region):
|
def send_raw_email(self, source, destinations, raw_data, region):
|
||||||
if source is not None:
|
if source is not None:
|
||||||
_, source_email_address = parseaddr(source)
|
_, source_email_address = parseaddr(source)
|
||||||
if source_email_address not in self.addresses:
|
if not self._is_verified_address(source_email_address):
|
||||||
raise MessageRejectedError(
|
raise MessageRejectedError(
|
||||||
"Did not have authority to send from email %s"
|
"Did not have authority to send from email %s"
|
||||||
% source_email_address
|
% source_email_address
|
||||||
@ -202,7 +202,7 @@ class SESBackend(BaseBackend):
|
|||||||
raise MessageRejectedError("Source not specified")
|
raise MessageRejectedError("Source not specified")
|
||||||
|
|
||||||
_, source_email_address = parseaddr(message["from"])
|
_, 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(
|
raise MessageRejectedError(
|
||||||
"Did not have authority to send from email %s"
|
"Did not have authority to send from email %s"
|
||||||
% source_email_address
|
% source_email_address
|
||||||
|
@ -139,19 +139,7 @@ def test_send_html_email():
|
|||||||
def test_send_raw_email():
|
def test_send_raw_email():
|
||||||
conn = boto3.client("ses", region_name="us-east-1")
|
conn = boto3.client("ses", region_name="us-east-1")
|
||||||
|
|
||||||
message = MIMEMultipart()
|
message = get_raw_email()
|
||||||
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)
|
|
||||||
|
|
||||||
kwargs = dict(Source=message["From"], RawMessage={"Data": message.as_string()})
|
kwargs = dict(Source=message["From"], RawMessage={"Data": message.as_string()})
|
||||||
|
|
||||||
@ -165,6 +153,39 @@ def test_send_raw_email():
|
|||||||
sent_count.should.equal(2)
|
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
|
@mock_ses
|
||||||
def test_send_raw_email_without_source():
|
def test_send_raw_email_without_source():
|
||||||
conn = boto3.client("ses", region_name="us-east-1")
|
conn = boto3.client("ses", region_name="us-east-1")
|
||||||
|
Loading…
Reference in New Issue
Block a user