| Postmark | |
|---|---|
| Their stated threshold | Postmark reviews accounts whose bounce rates suggest list quality problems and is explicit that transactional streams are for mail a user requested, not for bulk sending. |
| What happens if you cross it | Postmark will contact you and can move or suspend a stream. They are known for rejecting customers whose traffic does not fit, which is unusual and is why their delivery times are what they are. |
| Where the bounce data lives | Activity, filtered by bounce type, per message stream. Each bounce carries the full SMTP response, and the API exposes the same data with a webhook option. |
| How bounces are classified | Postmark uses detailed bounce types including HardBounce, Transient, Blocked, SpamNotification and SoftBounce, each with its own code, which makes automated handling in your application straightforward. |
Bringing the rate down
Each step is an action inside Postmark, in the order worth taking them.
Check which message stream the bounces are on
Transactional and broadcast streams are separated for a reason. Bounces on a transactional stream mean your application is sending to addresses that do not exist, which is a data problem.
Read the bounce type rather than the count
Postmark's typed bounces let you branch in code: a HardBounce marks the user's address invalid, a Transient triggers a retry, a Blocked raises an alert about reputation.
Wire the bounce webhook into your user model
A hard bounce on a transactional stream should flag the user's address in your own database immediately. Otherwise every password reset repeats the failure.
Move anything bulk onto a broadcast stream
Sending marketing mail down a transactional stream is against Postmark's model and will get the account reviewed. The separation exists to protect the transactional reputation.
Validate at registration
For transactional sending the only real fix is not storing an address that does not exist. That check belongs in your signup flow.
The mistake people make here
A bounce report mixes two causes that need opposite responses: addresses that do not exist, and receivers refusing mail they could have delivered. The first is fixed by checking the list. The second is a sending problem and no amount of cleaning will move it.
Questions people ask
Why does Postmark separate message streams?
To keep transactional delivery fast. Bulk mail carries complaint and bounce risk that would slow down the reputation their transactional customers pay for, so the streams are kept apart.
What does a Blocked bounce mean in Postmark?
The receiving server refused your message, usually over reputation or policy. It is about your sending rather than the recipient's address, and removing the user will not help.
Should transactional bounces be handled in code?
Yes. A hard bounce on a transactional stream means the address in your database is wrong. Flag it on the user record so the application stops retrying.