diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6f5383c..26211b6 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -20,7 +20,7 @@ new features or breaking changes, it's always a good idea to propose the idea in the [discussions] forum before writing a lot of code. -[contributing]: https://anymail.readthedocs.io/en/stable/contributing/ +[contributing]: https://anymail.dev/en/stable/contributing/ [discussions]: https://github.com/anymail/django-anymail/discussions -[support]: https://anymail.readthedocs.io/en/stable/help/#support -[troubleshooting]: https://anymail.readthedocs.io/en/stable/help/#troubleshooting +[support]: https://anymail.dev/en/stable/help/#support +[troubleshooting]: https://anymail.dev/en/stable/help/#troubleshooting diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b15a9fc..749da06 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,7 +66,7 @@ jobs: TAG: ${{ steps.version.outputs.tag }} TITLE: ${{ steps.version.outputs.tag }} NOTES: | - [Changelog](https://anymail.readthedocs.io/en/stable/changelog/#${{ steps.version.outputs.anchor }}) + [Changelog](https://anymail.dev/en/stable/changelog/#${{ steps.version.outputs.anchor }}) run: | # gh release create-or-edit "$TAG" --target "$GITHUB_REF" --title "$TITLE" --notes "$NOTES" ./dist/* # (gh release doesn't support edit - 6/2021) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 04f4601..12e1b5a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,7 +12,7 @@ always increment the major version number (1.x to 2.0). .. This changelog is designed to be readable standalone on GitHub, as well as included in the Sphinx docs. Do *not* use Sphinx references; links into the docs must use absolute urls to - https://anymail.readthedocs.io/ (generally to en/stable/, though + https://anymail.dev/ (generally to en/stable/, though linking to a specific older version may be appropriate for features that have been retired). @@ -99,8 +99,8 @@ Fixes Anymail documentation now recommends using Mailgun's and SendGrid's "raw MIME" inbound options, which avoid the problem and preserve all attachments. - See `Mailgun inbound `__ - and `SendGrid inbound `__ + See `Mailgun inbound `__ + and `SendGrid inbound `__ for details. (Thanks to `@erikdrums`_ for reporting and helping investigate the problem.) Other @@ -151,9 +151,9 @@ Other * **Postmark:** Document limitation on `track_opens` overriding Postmark's server-level setting. (See - `docs `__.) + `docs `__.) -* Expand `testing documentation `__ +* Expand `testing documentation `__ to cover tracking events and inbound handling, and to clarify test EmailBackend behavior. * In Anymail's test EmailBackend, add `is_batch_send` boolean to `anymail_test_params` @@ -169,7 +169,7 @@ Features ~~~~~~~~ * **Postal:** Add support for this self-hosted ESP - (`docs `__). + (`docs `__). Thanks to `@tiltec`_ for researching, implementing, testing and documenting Postal support. @@ -221,7 +221,7 @@ Other * Test against Django 3.2 prerelease (including support for Python 3.9) * Document how to send AMP for Email with Django, and note which ESPs support it. - (See `docs `__.) + (See `docs `__.) * Move CI testing to GitHub Actions (and stop using Travis-CI). @@ -240,7 +240,7 @@ Features * **SparkPost:** Add option for event tracking webhooks to map SparkPost's "Initial Open" event to Anymail's normalized "opened" type. (By default, only SparkPost's "Open" is reported as Anymail "opened", and "Initial Open" maps to "unknown" to avoid duplicates. - See `docs `__. + See `docs `__. Thanks to `@slinkymanbyday`_.) * **SparkPost:** In event tracking webhooks, map AMP open and click events to the @@ -264,7 +264,7 @@ Breaking changes be affected by this change, with two exceptions: (1) Mailjet's v3.1 API does not allow multiple reply-to addresses, and (2) if you are using Anymail's `esp_extra`, you will need to update it for compatibility with the new API. (See - `docs `__.) + `docs `__.) * **SparkPost:** Call the SparkPost API directly, without using the (now unmaintained) Python SparkPost client library. The "sparkpost" package is no longer necessary and @@ -276,7 +276,7 @@ Breaking changes As part of this change esp_extra now allows use of several SparkPost features, such as A/B testing, that were unavailable through the Python SparkPost library. (See - `docs `__.) + `docs `__.) * Remove Anymail internal code related to supporting Python 2 and older Django versions. This does not change the documented API, but may affect you if your @@ -295,7 +295,7 @@ Features * **SparkPost:** Add support for subaccounts (new ``"SPARKPOST_SUBACCOUNT"`` Anymail setting), AMP for Email (via ``message.attach_alternative(..., "text/x-amp-html")``), and A/B testing and other SparkPost sending features (via ``esp_extra``). (See - `docs `__.) + `docs `__.) v7.2.1 @@ -368,7 +368,7 @@ Features * Add `DEBUG_API_REQUESTS` setting to dump raw ESP API requests, which can assist in debugging or reporting problems to ESPs. - (See `docs `__. + (See `docs `__. This setting has was quietly added in Anymail v4.3, and is now officially documented.) * **Sendinblue:** Now supports file attachments on template sends, when using their @@ -383,7 +383,7 @@ Other * **SendGrid:** Document unpredictable behavior in the SendGrid API that can cause text attachments to be sent with the wrong character set. - (See `docs `__ + (See `docs `__ under "Wrong character set on text attachments." Thanks to `@nuschk`_ and `@swrobel`_ for helping track down the issue and reporting it to SendGrid.) @@ -412,14 +412,14 @@ Breaking changes [Note: Sendinblue removed this API limitation on 2020-02-18.] Ordinary, non-template sending is not affected by these changes. See - `docs `__ + `docs `__ for more info and alternatives. (Thanks `@Thorbenl`_.) Features ~~~~~~~~ * **Mailgun:** Support Mailgun's new (ESP stored) handlebars templates via `template_id`. - See `docs `__. + See `docs `__. (Thanks `@anstosa`_.) * **Sendinblue:** Support multiple `tags`. (Thanks `@Thorbenl`_.) @@ -444,7 +444,7 @@ Features * **Mailgun:** Add new `MAILGUN_WEBHOOK_SIGNING_KEY` setting for verifying tracking and inbound webhook calls. Mailgun's webhook signing key can become different from your `MAILGUN_API_KEY` if you have ever rotated either key. - See `docs `__. + See `docs `__. (More in `#153`_. Thanks to `@dominik-lekse`_ for reporting the problem and Mailgun's `@mbk-ok`_ for identifying the cause.) @@ -487,14 +487,14 @@ Breaking changes `message.anymail_status.message_id` after sending, that value will now be a *set* of ids. You can obtain each recipient's individual message_id with `message.anymail_status.recipients[to_email].message_id`. - See `docs `__. + See `docs `__. Features ~~~~~~~~ * Add new `merge_metadata` option for providing per-recipient metadata in batch sends. Available for all supported ESPs *except* Amazon SES and SendinBlue. - See `docs `__. + See `docs `__. (Thanks `@janneThoft`_ for the idea and SendGrid implementation.) * **Mailjet:** Remove limitation on using `cc` or `bcc` together with `merge_data`. @@ -561,7 +561,7 @@ Fixes * **Mailgun:** Raise `AnymailUnsupportedFeature` error when attempting to send an attachment without a filename (or inline attachment without a *Content-ID*), because Mailgun silently drops these attachments from the sent message. (See - `docs `__. + `docs `__. Thanks `@costela`_ for identifying this undocumented Mailgun API limitation.) * **Mailgun:** Fix problem where attachments with non-ASCII filenames would be lost. (Works around Requests/urllib3 issue encoding multipart/form-data filenames in a way @@ -585,7 +585,7 @@ Features * **Postmark:** Support per-recipient template `merge_data` and batch sending. (Batch sending can be used with or without a template. See - `docs `__.) + `docs `__.) Fixes ~~~~~ @@ -604,10 +604,10 @@ Features * **SendGrid:** Support both new "dynamic" and original "legacy" transactional templates. (See - `docs `__.) + `docs `__.) * **SendGrid:** Allow merging `esp_extra["personalizations"]` dict into other message-derived personalizations. (See - `docs `__.) + `docs `__.) v4.0 @@ -624,14 +624,14 @@ Breaking changes * **SendGrid:** Remove the legacy SendGrid *v2* EmailBackend. (Anymail's default since v0.8 has been SendGrid's newer v3 API.) If your settings.py `EMAIL_BACKEND` still references "sendgrid_v2," you must - `upgrade to v3 `__. + `upgrade to v3 `__. Features ~~~~~~~~ * **Mailgun:** Add support for new Mailgun webhooks. (Mailgun's original "legacy webhook" format is also still supported. See - `docs `__.) + `docs `__.) * **Mailgun:** Document how to use new European region. (This works in earlier Anymail versions, too.) * **Postmark:** Add support for Anymail's normalized `metadata` in sending @@ -678,7 +678,7 @@ Breaking changes users, this change should be transparent. But it could be a breaking change if you are relying on a specific message_id format, or relying on message_id matching the *Message-ID* mail header or SendGrid's "smtp-id" event field. (More details in the - `docs `__; + `docs `__; also see `#108`_.) Thanks to `@joshkersey`_ for the report and the fix. Features @@ -729,10 +729,10 @@ Features ~~~~~~~~ * **Amazon SES:** Add support for this ESP - (`docs `__). + (`docs `__). * **SparkPost:** Add SPARKPOST_API_URL setting to support SparkPost EU and SparkPost Enterprise - (`docs `__). + (`docs `__). * **Postmark:** Update for Postmark "modular webhooks." This should not impact client code. (Also, older versions of Anymail will still work correctly with Postmark's webhook changes.) @@ -748,7 +748,7 @@ Other ~~~~~ * Use tox to manage Anymail test environments (see contributor - `docs `__). + `docs `__). Deprecations ~~~~~~~~~~~~ @@ -774,22 +774,22 @@ Breaking changes both `headers["Reply-To"]` and `reply_to` are set on the same message. If you are setting a message's `headers["From"]` or `headers["To"]` (neither is common), the new behavior is likely a breaking change. See - `docs `__ + `docs `__ and `#91`_. * Treat EmailMessage `extra_headers` keys as case-\ *insensitive* in all backends, for consistency with each other (and email specs). If you are specifying duplicate headers whose names differ only in case, this may be a breaking change. See - `docs `__. + `docs `__. Features ~~~~~~~~ * **SendinBlue:** Add support for this ESP - (`docs `__). + (`docs `__). Thanks to `@RignonNoel`_ for the implementation. * Add EmailMessage `envelope_sender` attribute, which can adjust the message's *Return-Path* if supported by your ESP - (`docs `__). + (`docs `__). * Add universal wheel to PyPI releases for faster installation. Other @@ -830,7 +830,7 @@ reporting mechanism will If you are using Anymail's event tracking and/or inbound webhooks, you should upgrade to this release and change "WEBHOOK_AUTHORIZATION" to "WEBHOOK_SECRET" in the ANYMAIL section of your settings.py. You may also want to -`rotate the shared secret `__ +`rotate the shared secret `__ value, particularly if you have ever exposed your Django error reports to untrusted individuals. @@ -861,14 +861,14 @@ Features * **Inbound handling:** Add normalized inbound message event, signal, and webhooks for all supported ESPs. (See new - `Receiving mail `__ docs.) + `Receiving mail `__ docs.) This hasn't been through much real-world testing yet; bug reports and feedback are very welcome. * **API network timeouts:** For Requests-based backends (all but SparkPost), use a default timeout of 30 seconds for all ESP API calls, to avoid stalling forever on a bad connection. Add a REQUESTS_TIMEOUT Anymail setting to override. (See `#80`_.) * **Test backend improvements:** Generate unique tracking `message_id` when using the - `test backend `__; + `test backend `__; add console backend for use in development. (See `#85`_.) @@ -890,7 +890,7 @@ Security 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 `__). +`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 @@ -962,11 +962,11 @@ Features ~~~~~~~~ * Clean up and document Anymail's - `Test EmailBackend `__ + `Test EmailBackend `__ * Add notes on - `handling transient ESP errors `__ + `handling transient ESP errors `__ and improving - `batch send performance `__ + `batch send performance `__ * **SendGrid:** handle Python 2 `long` integers in metadata and extra headers @@ -986,7 +986,7 @@ Features ~~~~~~~~ * Anymail's Test EmailBackend is now - `documented `__ + `documented `__ (and cleaned up) @@ -1010,7 +1010,7 @@ Features ~~~~~~~~ * **Mailjet:** Add support for this ESP. Thanks to `@Lekensteyn`_ and `@calvin`_. - (`Docs `__) + (`Docs `__) * 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`_.) @@ -1082,10 +1082,10 @@ Breaking changes 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 `__. + `porting notes `__. The SendGrid v2 EmailBackend - `remains available `__ + `remains available `__ if you prefer it, but is no longer the default. .. SendGrid v2 backend removed after Anymail v3.0; links frozen to that doc version @@ -1125,13 +1125,13 @@ Features * **Postmark:** Support Postmark's new message delivery event in Anymail normalized tracking webhook. (Update your Postmark config to enable the new event. See - `docs `__.) + `docs `__.) * Handle virtually all uses of Django lazy translation strings as EmailMessage properties. (In earlier releases, these could sometimes lead to obscure exceptions or unexpected behavior with some ESPs. See `#34`_.) * **Mandrill:** Simplify and document two-phase process for setting up Mandrill webhooks - (`docs `__). + (`docs `__). v0.6.1 @@ -1159,17 +1159,17 @@ Breaking changes an empty Django EmailMessage body. In the (extremely-unlikely) case you were relying on the earlier quirky behavior to *not* send your saved html or text template, you may want to verify that your SendGrid templates have matching html and text. - (`docs `__ + (`docs `__ -- also see `#32`_.) Features ~~~~~~~~ * **Postmark:** Add support for `track_clicks` - (`docs `__) + (`docs `__) * Initialize AnymailMessage.anymail_status to empty status, rather than None; clarify docs around `anymail_status` availability - (`docs `__) + (`docs `__) v0.5 @@ -1181,7 +1181,7 @@ Features ~~~~~~~~ * **Mailgun:** Add MAILGUN_SENDER_DOMAIN setting. - (`docs `__) + (`docs `__) v0.4.2 @@ -1205,7 +1205,7 @@ Features ~~~~~~~~ * **SparkPost:** Add support for this ESP. - (`docs `__) + (`docs `__) * Test with Django 1.10 beta * Requests-based backends (all but SparkPost) now raise AnymailRequestsAPIError for any requests.RequestException, for consistency and proper fail_silently behavior. @@ -1241,12 +1241,12 @@ Features * Add support for ESP stored templates and batch sending/merge. Exact capabilities vary widely by ESP -- be sure to read the notes for your ESP. - (`docs `__) + (`docs `__) * Add pre_send and post_send signals. - `docs `__ + `docs `__ * **Mandrill:** add support for esp_extra; deprecate Mandrill-specific message attributes left over from Djrill. See - `migrating from Djrill `__. + `migrating from Djrill `__. v0.2 @@ -1261,7 +1261,7 @@ Breaking changes and dicts. (Was based on misreading of Mailgun docs; behavior now matches metadata handling for all other ESPs.) * **Mandrill:** remove obsolete wehook views and signal inherited from Djrill. See - `Djrill migration notes `__ + `Djrill migration notes `__ if you were relying on that code. Features @@ -1269,13 +1269,13 @@ Features * Add support for ESP event-tracking webhooks, including normalized AnymailTrackingEvent. - (`docs `__) + (`docs `__) * Allow get_connection kwargs overrides of most settings for individual backend instances. Can be useful for, e.g., working with multiple SendGrid subusers. - (`docs `__) + (`docs `__) * **SendGrid:** Add SENDGRID_GENERATE_MESSAGE_ID setting to control workarounds for ensuring unique tracking ID on SendGrid messages/events (default enabled). - `docs `__ + `docs `__ * **SendGrid:** improve handling of 'filters' in esp_extra, making it easier to mix custom SendGrid app filter settings with Anymail normalized message options. diff --git a/docs/docs_privacy.rst b/docs/docs_privacy.rst index bb9fc86..07cbb3f 100644 --- a/docs/docs_privacy.rst +++ b/docs/docs_privacy.rst @@ -1,7 +1,7 @@ Anymail documentation privacy ============================= -Anymail's documentation site at `anymail.readthedocs.io`_ is hosted by +Anymail's documentation site at `anymail.dev`_ is hosted by **Read the Docs**. Please see the `Read the Docs Privacy Policy`_ for more about what information Read the Docs collects and how they use it. @@ -42,8 +42,8 @@ documentation site can be emailed to *privacy\anymail\dev*. see :ref:`help` if you need assistance with your code.) -.. _anymail.readthedocs.io: - https://anymail.readthedocs.io/ +.. _anymail.dev: + https://anymail.dev/ .. _Read the Docs Privacy Policy: https://docs.readthedocs.io/en/latest/privacy-policy.html .. _Safeguarding your data: diff --git a/setup.py b/setup.py index ba743b2..a0dcc88 100644 --- a/setup.py +++ b/setup.py @@ -121,12 +121,9 @@ setup( long_description_content_type="text/x-rst", project_urls=OrderedDict( [ - ("Documentation", "https://anymail.readthedocs.io/en/%s/" % release_tag), + ("Documentation", "https://anymail.dev/en/%s/" % release_tag), ("Source", "https://github.com/anymail/django-anymail"), - ( - "Changelog", - "https://anymail.readthedocs.io/en/%s/changelog/" % release_tag, - ), + ("Changelog", "https://anymail.dev/en/%s/changelog/" % release_tag), ("Tracker", "https://github.com/anymail/django-anymail/issues"), ] ),