Feature: Add envelope_sender

New EmailMessage attribute `envelope_sender` controls ESP's sender,
sending domain, or return path where supported:

* Mailgun: overrides SENDER_DOMAIN on individual message
  (domain portion only)
* Mailjet: becomes `Sender` API param
* Mandrill: becomes `return_path_domain` API param
  (domain portion only)
* SparkPost: becomes `return_path` API param
* Other ESPs: not believed to be supported

Also support undocumented Django SMTP backend behavior, where envelope
sender is given by `message.from_email` when
`message.extra_headers["From"]` is set. Fixes #91.
This commit is contained in:
medmunds
2018-02-26 18:42:19 -08:00
parent bd9d92f5a0
commit 07fbeac6bd
27 changed files with 246 additions and 28 deletions

View File

@@ -417,13 +417,19 @@ class MailgunBackendAnymailFeatureTests(MailgunBackendMockAPITestCase):
})
def test_sender_domain(self):
"""Mailgun send domain can come from from_email or esp_extra"""
"""Mailgun send domain can come from from_email, envelope_sender, or esp_extra"""
# You could also use MAILGUN_SENDER_DOMAIN in your ANYMAIL settings, as in the next test.
# (The mailgun_integration_tests also do that.)
self.message.from_email = "Test From <from@from-email.example.com>"
self.message.send()
self.assert_esp_called('/from-email.example.com/messages') # API url includes the sender-domain
self.message.from_email = "Test From <from@from-email.example.com>"
self.message.envelope_sender = "anything@bounces.example.com" # only the domain part is used
self.message.send()
self.assert_esp_called('/bounces.example.com/messages') # overrides from_email
self.message.from_email = "Test From <from@from-email.example.com>"
self.message.esp_extra = {'sender_domain': 'esp-extra.example.com'}
self.message.send()
self.assert_esp_called('/esp-extra.example.com/messages') # overrides from_email