← Back to docs

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.

Outbound-only does not need root MX

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 typeUse caseRequired recordsMX to Postscale?
outboundSend onlyOwnership TXT, SPF, DKIMNo
inboundReceive and parse mail onlyOwnership TXT, MXYes, for the host receiving mail
bothSend and receive on the same domainOwnership TXT, MX, SPF, DKIMYes
aliasMasked or forwarding aliasesOwnership TXT, MXYes

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:

PurposeTypeNameValue
OwnershipTXT_postscale.example.comDashboard verification token
SPFTXTexample.comv=spf1 include:_spf.postscale.io ~all
DKIMTXTpostscale._domainkey.example.comDashboard DKIM value
DMARCTXT_dmarc.example.comv=DMARC1; p=quarantine; rua=mailto:...
Delayed bouncesCNAMEps-bounces.example.combounces.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:

  1. Immediate SMTP results: if the recipient MX rejects or defers the message during delivery, Postscale records the result from the delivery log.
  2. 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

ScenarioDomain typeDNS pattern
Send from no-reply@example.com, receive mail in Google WorkspaceoutboundKeep Google MX, add SPF/DKIM/DMARC and return-path CNAME
Receive support mail at support@example.com in Postscaleinbound or bothPoint root MX to mx.postscale.io
Receive only at inbound.example.cominboundAdd MX for inbound.example.com, leave root MX unchanged
Send and receive all mail through PostscalebothAdd MX, SPF, DKIM, DMARC, and return-path CNAME