Thanks @IanLewis for the fix!
Add detox (just a config/test runner change, no new code)
If someone wants to take this on, go for it, but 2.7 is pretty much the standard at this point and the tests pass on TravisCI under 2.7 but have issues with mail server mocking in 2.6.
Exclude `example` from being installed into the site-package namespace
Fixed Django 1.5 DeprecationWarning
Added an AWS_SNS_BOUNCE_CERT_TRUSTED_DOMAINS setting which contains a list of domains which can be trusted when receiving the signing certificate for bounce messages.
The following has been implemented: 1. Decoding the signature 2. Downloading and extracting the public key for the signing certificate. 3. Generating the message to sign. 4. Verifying the message using the public key. Some issues remain: 1. Retrieving the signing certificate every time we recieve a bounce message is rather dumb. This is hard though because we can't just cache a certificate without raising security issues. 2. Retrieving the signing certificate is done from any domain. This could be probematic because anyone could craft a bounce message and sign it using their own certificate. Amazon's documentation doesn't mention anything about trusted domains. 3. We should do better error handling surrounding the verification process. We should be able to handle errors loading the certificate or verifying the signature.
Fixed a careless mistake encoding the complaint notification JSON.
Fixed the SESBackendTest so that the test_send_mail() test passes. The standard email module's message_from_string() function seems to parse unicode objects entirely as the message body so I converted the raw message unicode object to a string.
Removed python-dateutil from the requirements since it was only used by the provided signal handlers.
Updated the docstring for the handle_bounce view to add information about the signals called.
Removed the provided signal handlers to log to the DB since I'll add them to a separate branch.