Changelog
Unreleased
3.0 - 2026-11-15
Added
- Async client:
AsyncPostmarkClientwith the same API asPostmarkClient, via theasyncextra, and thepostmark_async_requestandpostmark_async_clientpytest fixtures.
Removed
- Support for Python 3.10.
2.1 - 2026-11-13
Added
- CSS inlining for HTML emails via the optional
css-inlineextra:PostmarkClient(inline_css=True)and theINLINE_CSSDjango setting.
Fixed
message/rfc822attachments with a parsed message sent only its body, without headers, and crashed withTypeErrorfor multipart messages (they should send the whole message).
2.0 - 2026-11-12
Added
- Support for Python 3.11–3.15.
- Layout templates:
TemplateTypeandLayoutTemplateontemplates.create,validateandall,LayoutTemplateontemplates.edit, andtemplates.pushto copy templates between servers. on_exceptionsignal exported frompostmarker.django, next topre_sendandpost_send. #213- Servers API for the account:
servers.all,get,create,editanddelete, andPostmarkClientwith only an account token. ConfirmationPersonalNoteonsenders.createandsenders.edit.- Support for Django 5.2, 6.0 and 6.1.
- Message Streams API:
message_streams.all,get,create,edit,archiveandunarchive. - Message clicks:
messages.outbound.clicks.allandget,OutboundMessage.clicks(), and a link click webhook wrapper. #169 - Support for
email.message.EmailMessage(the modernemailAPI) wherever MIME messages are accepted. - Suppressions API:
suppressions.all,createanddeleteper message stream. #197 - Spam complaint and subscription change webhook wrappers:
bounces.SpamComplaintandsuppressions.SubscriptionChange. #215 - Type annotations and
py.typedmarker.
Changed
- Attachment content from MIME parts sent as single-line base64, without MIME line breaks.
- Django email backend raising
ClientErrorwith Postmark'serror_code(the first failure's for batches) instead of a plainPostmarkerException. #177
Removed
- Support for Python 3.6–3.9.
Fixed
postmark_request.return_valueincorrectly being an internal sentinel on Python 3.11+ (it should be a configurable mock).send_batchandsend_template_batchincorrectly raising an emptyValueErrorfor a list of emails (it should explain to pass them as separate arguments). #212- Django email backend incorrectly failing with
ValueErroron Django 6.0+. #221 - Text attachments from MIME messages, including the Django backend, incorrectly sent without base64 encoding, which Postmark rejects. #189
all()for bounces, messages and opens incorrectly requesting past Postmark's limit of 10,000 for count + offset, which Postmark rejects (it should stop at the limit). #194- Django email backend incorrectly emitting
RemovedInDjango2028Warningforfail_silentlyon Django 6.1+. - Django email backend incorrectly dropping the
MAILERSalias on Django 6.1+, which hid unknownOPTIONS. EmailandEmailTemplatestring representation incorrectly showingNone(it should show the sender and recipients). #211callon API managers incorrectly ignoring an explicittoken_type(it should only default to the manager's token type).
Security
- Spam check requests incorrectly sending email content over plain HTTP (they should use HTTPS).
1.0 - 2022-01-15
Added
- Python 3.10 support.
- Django 4.0 support. #200
Removed
- Deprecated
yield_fixtureusage in postmarker's pytest plugin.
0.18.2 - 2021-06-03
Added
- Support subject search on outbound messages.
0.18.1 - 2021-05-13
Fixed
- Fix documentation config to update docs on ReadTheDocs. #195
0.18.0 - 2021-05-11
Added
- Support for
batchWithTemplates.
0.17.1 - 2021-03-02
Added
root_api_urlargument forPostmarkClient. It allows you to change the address used bypostmarkerfor sending API calls.
Important: Use
https://api-ssl-temp.postmarkapp.com/if you'd like to test your application against the upcoming TLSv1 deprecation by Postmark. Example:postmark = PostmarkClient( server_token="SERVER_TOKEN", account_token="ACCOUNT_TOKEN", root_api_url="https://api-ssl-temp.postmarkapp.com/" ) # Use the client as usual
0.17.0 - 2020-12-22
Fixed
- Make
TemplateIDnot required ifTemplateAliasis specified. #179
Removed
- Support for Python 3.5.
0.16.0 - 2020-11-10
Added
MessageStreamsupport when sending emails. #190
0.15.0 - 2020-08-30
Removed
- Support for Python 2.7, 3.3, 3.4, PyPy2 and Jython.
0.14.1 - 2020-03-31
Added
- Support for
Metadataoption inEmailTemplate. #184
0.14.0 - 2020-02-10
Added
verifydkimandverifyreturnpathfor domains API. #183
0.13.1 - 2019-11-15
Added
- Support for metadata in Django email backend. #181
0.13.0 - 2018-11-25
Added
Changed
- Stream logs to
sys.stdoutby default. #159
Removed
- Support for Python 2.6, 3.2 and 3.3.
0.12.2 - 2018-11-05
Changed
0.12.1 - 2018-11-05
Changed
- Better handling of exceptions that happen during response parsing. #163
0.12.0 - 2018-06-12
Added
- Support for
TemplateAlias. #150
Fixed
- Processing of alternatives together with attachments. #148
- Processing of
message/rfc822attachments.
0.11.3 - 2017-11-08
Added
- Ability to convert inbound messages to MIME instances. #90
Fixed
- Fix missed
mockdependency for Python 2. #145
0.11.2 - 2017-05-14
Added
- Alternative instantiation method -
from_config.
0.11.1 - 2017-05-10
Added
- Test helpers. #112
0.11.0 - 2017-05-02
Added
messageproperty forBounce,DeliveryandOpenclasses to access correspondingOutboundMessageinstance. #119- An ability to control timeout and retries behaviour. #82
- Signal for exceptions in Django backend. #126
- Tornado helper. #85
0.10.1 - 2017-04-03
Fixed
- Fix Bcc ignoring in Django backend. #135
0.10.0 - 2017-03-30
Added
- Short-circuit send of empty batches in Django backend. #123
Changed
OutboundMessageManager.get_detailsandInboundMessageManager.get_detailswere methods were renamed toget. Now they returnsOutboundMessageandInboundMessageinstances respectively. #125- Renamed
tokenkwarg inPostmarkClienttoserver_token. #130
Fixed
- Fix counting of successfully sent messages in Django backend. #122
- Propagate API exceptions in Django backend. #128
0.9.2 - 2017-03-29
Fixed
- Remove stale files from the package.
0.9.1 - 2017-03-29
Fixed
- Fix packaging issue.
0.9.0 - 2017-03-28
Added
- Ability to load all items without specifying exact
countvalue. #106 - Delivery webhook wrapper. #95
- Open webhook wrapper. #96
- Bounce webhook wrapper. #97
Changed
postmarker.webhooks.InboundWebhookclass was superseded bypostmark.messages.inbound.InboundMessageconstructor, which works in the same way.
Fixed
- Fix PyPI package display. #116
0.8.1 - 2017-03-15
Fixed
- Fix needless requests when
countis more than number of available items. #107
0.8.0 - 2017-03-13
Added
- Ability to download more than 500 items. #70
pre_sendandpost_sendDjango signals. #83- Inbound rules triggers API. #75
- Tags triggers API. #74
Changed
- Output logs stream to default
sys.stderr. #102
0.7.2 - 2017-03-11
Fixed
- Fix Django backend crash with attachments. #98
0.7.1 - 2017-03-10
Added
VERBOSITYoption to the Django backend. #92
0.7.0 - 2017-03-02
Added
0.6.2 - 2017-01-02
Fixed
- Fix Unicode string handling on Python 2. #78
0.6.1 - 2017-01-01
Fixed
- Fix handling of
quoted-printablepayload. #76
0.6.0 - 2016-12-05
Added
Changed
- Better exceptions handling. #50
0.5.3 - 2016-10-27
Added
- Tags for Django messages. #59
0.5.2 - 2016-10-27
Fixed
- Fix headers decoding. #60
0.5.1 - 2016-10-18
Fixed
- Fix invalid messages count in email batches. #55
Changed
- Better Django support. #51
0.5.0 - 2016-10-15
Added
- Status API. #39
- Custom user agent. #43
- Jython support. #13
- Handling more than 500 emails in batches. #46
- Templates API. #15
0.4.0 - 2016-10-09
Added
- Python 3.2 support. #38
Removed
ServerClient&AccountClientwere removed. #41
0.3.1 - 2016-10-08
Changed
- Move repo.
0.3.0 - 2016-10-07
Added
- Pass extra settings to Django backend. #29
- Testing feature for
Djangobackend. #27 - Logging. #19
- Server API. #14
- Improved attachments support. #23
- Improved MIME messages support. #28
0.2.0 - 2016-10-07
Added
- Django email backend. #16
- Support for
MIMETextsending. #25 - Batch emailing implementation. #12
- Ability to remove headers from email message. #24
- Improved attachments interface. #18
- Support for sending single email. #11
0.1.1 - 2016-10-05
Fixed
- Fix packaging issue
0.1.0 - 2016-10-05
- Initial release.