Separate sending identities per purpose

Billing, updates and marketing mail can each ride their own sending domain, so a marketing reputation hit never drags invoices into spam.

What it is

A message can declare a stream. The Mailgun binding can map streams to dedicated domains; the stream domain wins when both the message declares one and the map has it, otherwise the binding's default domain, otherwise the platform env fallback. The display name is preserved and only the address is re-homed onto the stream's domain.

Also called: billing emails vs marketing emails · sending reputation · dedicated domain per stream

See it
Separate sending identities per purpose
Prepared for
Sutter Kline
1140 Ridge Line Rd · Fair Play
Shell package$29,537
Concrete & site$8,575
Doors & windows$5,717
Trim & finish$3,811
Total
$47,640
Signature
Three lanes labelled billing / updates / marketing, each with its own domain chip and its own reputation meter. Sample data — no customer information appears here.
How it works
  1. 1Caller passes stream: 'billing' | 'updates' | 'marketing'.
  2. 2The adapter looks up config.streams[stream].
  3. 3The From address is rewritten onto that domain, keeping the display name.
  4. 4If no stream domain exists, the binding's domain is used.
Why we built it

The port's type comment states the rule: 'separate sending identities so one stream's reputation damage never degrades another's (marketing burns must never touch billing/invoice deliverability).'

The problem
  • A single sending domain meant marketing complaints degraded transactional delivery.
Sound familiar?
What you get
Invoice and estimate mail keeps its own reputation.
Adding a stream domain is a binding config change, not a deploy.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →