# What changed in postmarker

> 44 changes in postmarker 2 from its official release notes, upgrade guides and advisories: 3 breaking, 1 security, 27 new APIs and options. Each one cited. Sources checked 2026-11-12. HTML: https://unstale.sh/pypi/postmarker/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## postmarker 2

### Breaking changes

- Raises ClientError with Postmark's error_code instead of a plain PostmarkerException; batches use the first failure's error_code. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Attachment content from MIME parts is sent as single-line base64 without MIME line breaks. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Support for Python 3.6–3.9 has been removed. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)

### Security

- Spam check requests now use HTTPS instead of sending email content over plain HTTP. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)

### New APIs and options

- Adds a spam complaint webhook wrapper. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds ConfirmationPersonalNote to sender creation and editing. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds LayoutTemplate support to template creation, validation, listing and editing. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds a wrapper for link click webhooks. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds message stream listing. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds message stream archiving. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds message stream creation. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds message stream editing. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds message stream retrieval. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds message stream unarchiving. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds listing of outbound message clicks. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds retrieval of outbound message clicks. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Exports the on_exception signal from postmarker.django alongside pre_send and post_send. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds a clicks method to OutboundMessage. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds a PostmarkClient that uses only an account token. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds the py.typed marker. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds account server listing. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds account server creation. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds account server deletion. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds account server editing. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds account server retrieval. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds listing of suppressions per message stream. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds creation of suppressions per message stream. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds deletion of suppressions per message stream. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds a subscription change webhook wrapper. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Copies templates between servers. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Adds TemplateType for layout templates. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)

### Behavior and default changes

- Accepts the modern EmailMessage API wherever MIME messages are accepted. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)

### Tooling

- Adds type annotations. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)

### Fixes and other changes

- Stops pagination at Postmark's 10,000 limit for count plus offset. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- API manager calls now honor an explicitly supplied token_type and only default to the manager's token type when it is not explicit. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Django 5.2, 6.0 and 6.1 are supported. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Fixes a ValueError that caused the backend to fail on Django 6.0+. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Stops emitting RemovedInDjango2028Warning for fail_silently on Django 6.1+. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Preserves the MAILERS alias on Django 6.1+ so unknown OPTIONS are not hidden. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- String representations now show the sender and recipients instead of None. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Text attachments from MIME messages, including through the Django backend, are now base64 encoded as required by Postmark. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- On Python 3.11+, return_value is now a configurable mock rather than an internal sentinel. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- Python 3.11–3.15 are supported. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
- A list of emails now produces an explanatory ValueError directing callers to pass them as separate arguments. (2.0) — [release notes](https://github.com/Stranger6667/postmarker/releases/tag/v2.0)
