Skip to content

Releases: anymail/django-anymail

v1.2.1

02 Feb 20:17
Compare
Choose a tag to compare

Security fix

This release fixes a moderate severity security issue affecting Anymail v0.2–v1.2:
Prevent timing attack on WEBHOOK_AUTHORIZATION secret (CVE-2018-6596)

If you are using Anymail's tracking webhooks, you should upgrade to this release, and you may want to rotate to a new WEBHOOK_AUTHORIZATION shared secret (see docs). You should definitely change your webhook auth if your logs indicate attempted exploit.

(If you are only sending email using an Anymail EmailBackend, and have not set up Anymail's event tracking webhooks, this issue does not affect you.)

More information

Anymail's webhook validation was vulnerable to a timing attack. A remote attacker could use this to obtain your WEBHOOK_AUTHORIZATION shared secret, potentially allowing them to post fabricated or malicious email tracking events to your app.

There have not been any reports of attempted exploit. (The vulnerability was discovered through code review.) Attempts would be visible in HTTP logs as a very large number of 400 responses on Anymail's webhook urls (by default "/anymail/esp_name/tracking/"), and in Python error monitoring as a very large number of AnymailWebhookValidationFailure exceptions.

v1.2

02 Nov 21:26
Compare
Choose a tag to compare

New features

  • Postmark: Support new click webhook in normalized tracking events

v1.1

28 Oct 19:07
Compare
Choose a tag to compare

Bug fixes

  • Mailgun: Support metadata in opened/clicked/unsubscribed tracking webhooks, and fix potential problems if metadata keys collided with Mailgun event parameter names. (See #76, #77)

Other changes

  • Internal: Rework Anymail's ParsedEmail class and rename to EmailAddress to align it with similar functionality in the Python 3.6 email package, in preparation for future inbound support. ParsedEmail was not documented for use outside Anymail's internals (so this change does not bump the semver major version), but if you were using it in an undocumented way you will need to update your code.

v1.0

18 Sep 00:35
Compare
Choose a tag to compare

It's official: Anymail is no longer "pre-1.0." The API has been stable for many months, and there's no reason not to use Anymail in production.

Breaking changes

  • There are no new breaking changes in the 1.0 release, but a breaking change introduced several months ago in v0.8 is now strictly enforced. If you still have an EMAIL_BACKEND setting that looks like "anymail.backends.espname.EspNameBackend", you'll need to change it to just "anymail.backends.espname.EmailBackend". (Earlier versions had issued a DeprecationWarning. See the v0.8 release notes.)

New features and other changes

v1.0.rc0

09 Sep 00:40
Compare
Choose a tag to compare
v1.0.rc0 Pre-release
Pre-release

Breaking changes

  • All backends: The old EspNameBackend names that were deprecated in v0.8 have been removed. Attempting to use the old names will now fail, rather than issue a DeprecationWarning. See the v0.8 release notes.

New features

  • Anymail's Test EmailBackend is now documented (and cleaned up)

v0.11.1

24 Jul 18:27
Compare
Choose a tag to compare
  • Mailjet: Correct settings docs.

v0.11

13 Jul 23:39
Compare
Choose a tag to compare

New features

Other changes

  • In webhook handlers, AnymailTrackingEvent.metadata now defaults to {}, and .tags defaults to [], if the ESP does not supply these fields with the event. (See #67.)

v0.10

22 May 19:06
Compare
Choose a tag to compare

New features

  • Mailgun, SparkPost: Support multiple from addresses, as a comma-separated from_email string. (Not a list of strings, like the recipient fields.) RFC-5322 allows multiple from email addresses, and these two ESPs support it. Though as a practical matter, multiple from emails are either ignored or treated as a spam signal by receiving mail handlers. (See #60.)

Other changes

  • Fix crash sending forwarded email messages as attachments. (See #59.)
  • Mailgun: Fix webhook crash on bounces from some receiving mail handlers. (See #62.)
  • Improve recipient-parsing error messages and consistency with Django's SMTP backend. In particular, Django (and now Anymail) allows multiple, comma-separated email addresses in a single recipient string.

v0.9

04 Apr 19:16
Compare
Choose a tag to compare

Breaking changes

  • Mandrill, Postmark: Normalize soft-bounce webhook events to event_type 'bounced' (rather than 'deferred').

Other changes

  • Officially support released Django 1.11, including under Python 3.6.

v0.8

02 Feb 00:04
Compare
Choose a tag to compare

Breaking changes

  • All backends: Rename all Anymail backends to just EmailBackend, matching Django's naming convention. E.g., you should update:
    EMAIL_BACKEND = "anymail.backends.mailgun.MailgunBackend" # old
    to:
    EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend" # new

    The old names still work, but will issue a DeprecationWarning and will be removed in some future release (Apologies for this change; the old naming was a holdover from Djrill, and I wanted to establish consistency with other Django EmailBackends before Anymail 1.0. See #49.)

  • SendGrid: Update SendGrid backend to their newer Web API v3. This should be a transparent change for most projects. Exceptions: if you use SendGrid username/password auth, Anymail's esp_extra with "x-smtpapi", or multiple Reply-To addresses, please review the porting notes.

    The SendGrid v2 EmailBackend remains available if you prefer it, but is no longer the default.

Other changes

  • Mandrill: Fix bug in webhook signature validation when using basic auth via the WEBHOOK_AUTHORIZATION setting. (If you were using the MANDRILL_WEBHOOK_URL setting to work around this problem, you should be able to remove it. See #48.)
  • Test on Django 1.11 prerelease, including under Python 3.6.