@@ -20,7 +20,7 @@ def message_from_bytes(s):
2020from django .utils .timezone import get_fixed_timezone , override as override_current_timezone
2121
2222from anymail .exceptions import (
23- AnymailAPIError , AnymailInvalidAddress ,
23+ AnymailError , AnymailAPIError , AnymailInvalidAddress ,
2424 AnymailRequestsAPIError , AnymailUnsupportedFeature )
2525from anymail .message import attach_inline_image_file
2626
@@ -507,6 +507,23 @@ def test_sender_domain_setting(self):
507507 self .message .send ()
508508 self .assert_esp_called ('/mg.example.com/messages' ) # setting overrides from_email
509509
510+ def test_invalid_sender_domain (self ):
511+ # Make sure we won't construct an invalid API endpoint like
512+ # `https://api.mailgun.net/v3/example.com/INVALID/messages`
513+ # (which returns a cryptic 200-OK "Mailgun Magnificent API" response).
514+ self .
message .
from_email = "<[email protected] /invalid>" 515+ with self .assertRaisesMessage (AnymailError ,
516+ "Invalid sender domain 'example.com/invalid'" ):
517+ self .message .send ()
518+
519+ @override_settings (ANYMAIL_MAILGUN_SENDER_DOMAIN = 'example.com%2Finvalid' )
520+ def test_invalid_sender_domain_setting (self ):
521+ # See previous test. Also, note that Mailgun unquotes % encoding *before*
522+ # extracting the sender domain (so %2f is just as bad as '/')
523+ with self .assertRaisesMessage (AnymailError ,
524+ "Invalid sender domain 'example.com%2Finvalid'" ):
525+ self .message .send ()
526+
510527 def test_default_omits_options (self ):
511528 """Make sure by default we don't send any ESP-specific options.
512529
0 commit comments