Sometime earlier today, Resend started issuing API errors when sending attachments
with batch send. (Apparently the feature has never been supported, and attachments
were just ignored in the batch endpoint.)
Add a note to the docs, and update the Resend integration test.
- Fix signature checking to avoid false validation errors
on webhook payloads including `/` (including all "clicked"
and most "opened" events). And in general, avoid depending
on specific details of Unisender Go's JSON serialization.
(Fixes #398.)
- Handle "use single event" webhook option (which has a different
payload format).
- Verify basic auth when Anymail's WEBHOOK_SECRET is used.
(This is optional for Unisender Go, since payloads are signed,
but it needs to be checked when enabled.)
- Treat "soft_bounced" events as "deferred" rather than "bounced",
since they will be retried later.
- Update validation error to reference Project ID if the webhook
is configured for a specific project.
- Expose Unisender Go's delivery_status code and unsubscribe form
comment as Anymail's normalized event.description.
- Update webhook tests based on actual payloads and add several
missing tests.
- Update docs to clarify webhook use with Unisender Go projects.
Read the Docs is changing their build process. Some docs/conf.py
manipulation they used to do automatically now must be manually
included.
https://about.readthedocs.com/blog/2024/07/addons-by-default/
Related changes:
* Drop our version-alert.js. RTD's new "addons" includes
equivalent warning on unreleased versions.
* Integrate Google Analytics via sphinxcontrib-googleanalytics
when GOOGLE_ANALYTICS_ID is set in docs build environment.
Add support for Brevo's new "Complained," "Error" and
"Loaded by proxy" events in Brevo tracking webhook.
Closes#385.
---------
Co-authored-by: Mike Edmunds <medmunds@gmail.com>
Raise an `AnymailUnsupportedFeature` error
when trying to use a `template_id` along with
other content payload fields that SparkPost
silently ignores when template_id is present.
For ESPs that have incorporated new owners
in their branding, identify the new owner
in the docs:
- Mailgun -> Sinch Mailgun
- Postmark -> ActiveCampaign Postmark
- SendGrid -> Twilio SendGrid
- SparkPost -> Bird ???
(Bird's rebranding of SparkPost seems to still
be a work in progress at this point. In fact,
Bird's rebranding of itself from MessageBird
seems incomplete.)
There are no current plans to rename ESP
backends, as the new owners seem to be mostly
keeping the original ESP names and domains for
API endpoints, docs, etc.
(Similarly, I'm not updating project keywords.)
Use new SES v2 SendBulkEmail ReplacementHeaders param
to support features that require custom headers,
including `extra_headers`, `metadata`,
`merge_metadata` and `tags`.
Update integration tests and docs
Closes#375
- Replace "SendinBlue" with "Brevo"
throughout the code.
- Maintain deprecated compatibility
versions on the old names/URLs.
(Split into separate commit
to make renamed files more
obvious.)
- Update docs to reflect change,
provide migration advice.
- Update integration workflow.
Move the big ESP feature matrix table
into a CSV file for easier maintenance.
Remove the doc8 line-length exception
the old table needed.
Docutils csv-table directive doesn't
support colspan on the subheadings
like the old table did. Add some JS
that replicates the old behavior.
(The new table is still readable even
with JS disabled.)
* refactor: derive `AnymailInboundMessage` from `email.message.EmailMessage`
rather than legacy Python 2.7 `email.message.Message`
* feat(inbound): replace confusing `inline_attachments` with `content_id_map`
and `inlines`; rename `is_inline_attachment` to `is_inline`; deprecate old names
Closes#328
---------
Co-authored-by: Mike Edmunds <medmunds@gmail.com>
* Update docs to (usually) refer to Brevo rather than Sendinblue
* Change SENDINBLUE_API_URL to api.brevo.com
(same API is available on both domains)
* Leave code references (settings, backend name, webhook urls)
unchanged as `sendinblue`, to avoid unnecessary client changes
- Support Postmark's RawEmail option;
recommend it in docs
- Handle Bcc when provided by Postmark
- Obtain `envelope_sender` from Return-Path info
Postmark now adds, rather than parsing Received-SPF
Related:
- Add `AnymailInboundMessage.bcc` convenience prop
- Test against full Postmark "check" inbound payloads
(which don't match their docs or real inbound payloads)
- Don't warn about receiving "check" payload
- Rename `anymail.backends.amazon_sesv2.EmailBackend`
to `amazon_ses`, making SES v2 the default.
- Rename the old `amazon_ses` backend to `amazon_sesv1`,
keeping it available. Add a deprecation warning.
- Alias `amazon_sesv2` to `amazon_ses`, with a
deprecation warning (for projects that opted
into v2 early under Anymail 9.1 or 9.2).
- Similar renaming on the test files.
- Update docs to assume v2 in most places
(other than migration-specific sections)
Switch to pyproject.toml packaging, using hatchling.
- Replace all uses of setup.py with updated equivalent
- BREAKING: Change extra name `amazon_ses` to
`amazon-ses`, to comply with Python packaging
name normalization
- Use hatch custom build hook to freeze version number
in readme (previously custom setup.py code)
- Move separate requirements for dev, docs, tests
into their own requirements.txt files
- Fix AnymailImproperlyInstalled to correctly refer
to package extra name
- Update testing documentation
- Update docs readme rendering to match PyPI
(and avoid setup.py)
- In tox tests, use isolated builds and update pip
- Remove AUTHORS.txt (it just referred to GitHub)
- Add black and isort for Python styling
- Add doc8 for reStructuredText styling
- Add prettier for css/html/js/md/yaml styling
- Run all styling tools from pre-commit hooks
- Adjust flake8 config for compatibility with black
(and current Django style)
- Add some other helpful pre-commit hooks
- Update editorconfig to match Django
(with a few necessary adjustments for Anymail)
- Update `tox -e lint` to run all pre-commit hooks
- Update contributing docs