Outbound Service
Outbound Service
Use Postscale outbound when you want to send transactional email from your own domain while another provider, such as Google Workspace or Microsoft 365, continues to handle incoming mailbox traffic.
If a domain is configured as outbound, do not move its root MX records to
Postscale. Keep your existing mailbox provider's MX records in place.
Domain Types and MX Requirements
| Domain type | Use case | Required records | MX to Postscale? |
|---|---|---|---|
outbound | Send only | Ownership TXT, SPF, DKIM | No |
inbound | Receive and parse mail only | Ownership TXT, MX | Yes, for the host receiving mail |
both | Send and receive on the same domain | Ownership TXT, MX, SPF, DKIM | Yes |
alias | Masked or forwarding aliases | Ownership TXT, MX | Yes |
DMARC is recommended for every sending domain. A return-path CNAME is recommended for production outbound traffic so Postscale can correlate delayed bounces.
Outbound DNS Records
For example.com configured as outbound, add the records shown in your
dashboard. They follow this shape:
| Purpose | Type | Name | Value |
|---|---|---|---|
| Ownership | TXT | _postscale.example.com | Dashboard verification token |
| SPF | TXT | example.com | v=spf1 include:_spf.postscale.io ~all |
| DKIM | TXT | postscale._domainkey.example.com | Dashboard DKIM value |
| DMARC | TXT | _dmarc.example.com | v=DMARC1; p=quarantine; rua=mailto:... |
| Delayed bounces | CNAME | ps-bounces.example.com | bounces.postscale.io |
The return-path CNAME is a subdomain. It does not replace your root MX records
and does not cause Postscale to receive normal mail for example.com.
Sending with the API
After the domain is verified and DKIM is valid, send through the REST API:
curl -X POST https://api.postscale.io/v1/send \
-H "Authorization: Bearer ps_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "no-reply@example.com",
"to": ["customer@example.net"],
"subject": "Your receipt",
"text_body": "Thanks for your order."
}'
The from domain must be an active outbound or both domain in your
account. Sending is blocked until the domain is verified, SPF is verified, and
an active DKIM key is verified.
Sending with SMTP
SMTP relay uses the same outbound pipeline as the API: authentication, domain verification, suppression checks, warming limits, DKIM signing, delivery tracking, and webhooks are shared.
swaks --server smtp.postscale.io:587 --tls \
--auth PLAIN --auth-user postscale --auth-password "YOUR_API_KEY" \
--from no-reply@example.com \
--to customer@example.net \
--header "Subject: Your receipt" \
--body "Thanks for your order."
See SMTP Relay for client examples.
How Bounces Work
Postscale tracks outbound failures in two ways:
- Immediate SMTP results: if the recipient MX rejects or defers the message during delivery, Postscale records the result from the delivery log.
- Delayed DSNs: if the recipient MX first accepts the message and later sends a delivery status notification, Postscale receives it through the verified return-path subdomain.
With the return-path CNAME verified, Postscale sends with an envelope sender like this:
Header From: no-reply@example.com
SMTP MAIL FROM: b-<token>@ps-bounces.example.com
If a delayed DSN arrives, it is delivered to the Postscale bounce pipeline,
parsed, correlated by <token>, and recorded as an outbound delivery event.
Hard bounces update the message status, suppression handling, stats, and
email.bounced webhooks.
For a protocol-level walkthrough, see How delayed email bounces work.
Without the Return-Path CNAME
Outbound sending can still work without the return-path CNAME as long as the domain's required sending records are verified. Immediate SMTP bounces and deferrals are still tracked from delivery logs.
The missing piece is reliable delayed DSN correlation. For production outbound traffic, publish and verify:
ps-bounces.example.com. CNAME bounces.postscale.io.
Postscale owns bounces.postscale.io and routes that host to the bounce MX.
You do not need to create an MX record for ps-bounces.example.com, and you
should not point the root domain's MX records at the bounce host.
Common Setups
| Scenario | Domain type | DNS pattern |
|---|---|---|
Send from no-reply@example.com, receive mail in Google Workspace | outbound | Keep Google MX, add SPF/DKIM/DMARC and return-path CNAME |
Receive support mail at support@example.com in Postscale | inbound or both | Point root MX to mx.postscale.io |
Receive only at inbound.example.com | inbound | Add MX for inbound.example.com, leave root MX unchanged |
| Send and receive all mail through Postscale | both | Add MX, SPF, DKIM, DMARC, and return-path CNAME |