How to test bounces
Along with our Sandbox mode feature, Postmark offers a black hole domain (bounce-testing.postmarkapp.com) to test bounces. This can be useful to test your integrations, allowing you to generate fake bounces in a safe manner, so it won’t affect your sending domain or reputation.
Sending an email to our
bounce-testing.postmarkapp.com domain will immediately bounce the message—this will appear as a real bounce in your activity and statistics, as well as post a
webhook (if you have this enabled). By default, we classify messages as a hard bounce, but you can test other bounce types too as defined in our
Bounce API documentation, and listed below. We have set up a dedicated address for each bounce type, to help you generate a fake bounce for it.
An example recipient address that will generate a soft bounce:
SoftBounce@bounce-testing.postmarkapp.com
All bounce types listed below are supported:
Type |
Email address |
Name & Description |
HardBounce |
HardBounce@bounce-testing.postmarkapp.com |
Hard bounce — The server was unable to deliver your message (ex: unknown user, mailbox not found). |
Transient |
Transient@bounce-testing.postmarkapp.com |
Message delayed or Undeliverable — The server could not temporarily deliver your message (ex: Message is delayed due to network troubles). |
Unsubscribe |
Unsubscribe@bounce-testing.postmarkapp.com |
Unsubscribe request — Unsubscribe or Remove request. |
Subscribe |
Subscribe@bounce-testing.postmarkapp.com |
Subscribe request — Subscribe request from someone wanting to get added to the mailing list. |
AutoResponder | AutoResponder@bounce-testing.postmarkapp.com | Auto responder — Automatic email responder(ex:"Out of Office" or"On Vacation"). |
AddressChange | AddressChange@bounce-testing.postmarkapp.com | Address change — The recipient has requested an address change. |
DnsError | DnsError@bounce-testing.postmarkapp.com | DNS error — A temporary DNS error. |
SpamNotification | SpamNotification@bounce-testing.postmarkapp.com | Spam notification — The message was delivered, but was either blocked by the user, or classified as spam, bulk mail, or had rejected content. |
OpenRelayTest |
OpenRelayTest@bounce-testing.postmarkapp.com |
Open relay test — The NDR is actually a test email message to see if the mail server is an open relay. |
Unknown |
Unknown@bounce-testing.postmarkapp.com |
Unknown — Unable to classify the NDR. |
SoftBounce | SoftBounce@bounce-testing.postmarkapp.com | Soft bounce — Unable to temporarily deliver message(i.e. mailbox full, account disabled, exceeds quota, out of disk space). |
VirusNotification | VirusNotification@bounce-testing.postmarkapp.com | Virus notification — The bounce is actually a virus notification warning about a virus/code infected message. |
ChallengeVerification | ChallengeVerification@bounce-testing.postmarkapp.com | Spam challenge verification — The bounce is a challenge asking for verification you actually sent the email. Typcial challenges are made by Spam Arrest, or MailFrontier Matador. |
BadEmailAddress |
BadEmailAddress@bounce-testing.postmarkapp.com |
Invalid email address — The address is not a valid email address. |
ManuallyDeactivated | ManuallyDeactivated@bounce-testing.postmarkapp.com | Manually deactivated — The email was manually deactivated. |
Unconfirmed | Unconfirmed@bounce-testing.postmarkapp.com | Registration not confirmed — The subscriber has not clicked on the confirmation link upon registration or import. |
Blocked |
Blocked@bounce-testing.postmarkapp.com |
ISP block — Blocked from this ISP due to content or blacklisting. |
SMTPApiError | SMTPApiError@bounce-testing.postmarkapp.com | SMTP API error — An error occurred while accepting an email through the SMTP API. |
InboundError |
InboundError@bounce-testing.postmarkapp.com |
Processing failed — Unable to deliver inbound message to destination inbound hook. |
DMARCPolicy | DMARCPolicy@bounce-testing.postmarkapp.com | DMARC Policy — Email rejected due DMARC Policy. |
TemplateRenderingFailed | TemplateRenderingFailed@bounce-testing.postmarkapp.com |
Template rendering failed — An error occurred while attempting to render your template. |
Custom message headers
Rather than sending to the dedicated addresses above, another way to generate fake this is using our "
X-PM-Bounce-Type" custom header e.g. X-PM-Bounce-Type: SoftBounce. This works for sending via SMTP and our API.
Example body format:
{
"From": "sender@example.com",
"To": "test@bounce-testing.postmarkapp.com",
"Subject": "Bounce",
"TextBody": "This will bounce",
"ReplyTo": "reply@example.com",
"TrackOpens": true,
"TrackLinks": "None",
"MessageStream": "outbound",
"Headers": [{
"Name": "X-PM-Bounce-Type",
"Value": "SoftBounce"
}]
}
Example request with CURL:
curl "https://api.postmarkapp.com/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: server token" \
-d '{
"From": "sender@example.com",
"To": "test@bounce-testing.postmarkapp.com",
"Subject": "Bounce",
"TextBody": "This will bounce",
"ReplyTo": "reply@example.com",
"TrackOpens": true,
"TrackLinks": "None",
"MessageStream": "outbound",
"Headers": [{
"Name": "X-PM-Bounce-Type",
"Value": "SoftBounce"
}]
}'
Things to note
- These testing options will only work with our black hole domain (bounce-testing.postmarkapp.com).
- They support camel case and are case insensitive, so soft_bounce@bounce-testing.postmarkapp.com or X-PM-Bounce-Type: soft_bounce will also work.
- Hard Bounces will act like normal Hard Bounces, and will be added to your suppression list. If you need to test an inactive recipient again, it will need to be reactivated.
- Spam Complaints are currently not supported (they will default to a Hard Bounce).
- Bounces via our black hole domain will not be counted towards bounce limits.
- Each sent message will count as 1 email and will be deducted from your monthly plan.