Internal technical reference · Outward Bound USA

How Braze sends email on our behalf.

A working diagram of how Braze composes, signs, routes, and delivers email on behalf of outwardbound.org — and how dedicated sending subdomains (c., t., and the planned per-school subdomains) fit into the picture. Built to ground deliverability and authentication conversations in the actual mechanism, not the symptoms.

ESP
Braze (workspace · campaigns · Canvases)
Sub-processor (MTA)
SparkPost (confirmed via Braze)
Sending subdomains
c. (marketing) · t. (transactional) · per-school (planned)
Scope
Braze ↔ DNS ↔ recipient. CDP / CRM / Snowflake omitted.
00 — Confirmed config & illustrative values

What's verified vs. what's pattern-only

The sub-processor identity in this document is confirmed against our actual Braze configuration. Specific DNS record values shown later (record content, DKIM selectors, SPF includes) are illustrative patterns drawn from standard SparkPost setups — they communicate the structure correctly but should be replaced with verified values from our live DNS zone before this is treated as a definitive record of our published configuration.

Confirmed · sub-processor identity

SparkPost is the email sub-processor configured against our Braze workspace, confirmed via the Braze dashboard. This is what handles DKIM signing, IP selection, SMTP delivery, and bounce capture for all marketing email sent through Braze.

A note on SendGrid: SendGrid does appear elsewhere in the Outward Bound stack — it powers separate website-related sending work — but it is not the sub-processor for the Braze marketing send flow this document describes. The two should not be conflated.

For context: Braze customers can be on any of three sub-processors. The three options are Amazon SES (the platform default for new setups), SparkPost (our choice), or SendGrid. The high-level email flow is identical across all three; what differs is which IP ranges send the mail, which DNS records get published, and what appears in the Received: headers.

Quick re-verification anytime: Open Braze → Settings → Email Sending → Sending Domains and read the provider listed against c.outwardbound.org. The DKIM record format is also distinctive at a glance — SparkPost publishes DKIM as a TXT record at a selector like scph<date>._domainkey… with the public key inline. SendGrid uses CNAME records pointing to dkim.sendgrid.net; SES uses CNAMEs pointing to amazonses.com.
Illustrative · DNS records and DMARC policy

Specific DNS values shown in §3 (SPF includes, DKIM selectors, the DMARC policy string) are illustrative patterns based on standard Braze + SparkPost documentation. They have not been pulled from a live DNS lookup of outwardbound.org.

Each table that contains illustrative values is flagged with an illustrative badge so they aren't mistaken for verified records.

To confirm with certainty: Run dig TXT _dmarc.outwardbound.org, dig TXT c.outwardbound.org, and a DKIM lookup against the current selector — or use MXToolbox's DMARC / SPF / DKIM lookups against our domains. The actual published values are the source of truth; this document just shows the shape of what should be there.
The questions this guide answers

Five questions about Braze email behavior

These are the recurring conversations that come up whenever someone receives a Braze-sent email and notices something unusual in the From line, the Reply behavior, or a Gmail annotation. Each is answered in detail in §6; the diagram sections that come before exist to make those answers stand on a shared mechanical understanding.

TL;DR — the short version

Braze sends marketing email from a dedicated subdomain by design. That subdomain owns its own DKIM signature, SPF authorization, and bounce-handling — which is what makes the marketing reputation isolated from corporate mail on the root domain. Where things go wrong is when the visible From address (what recipients see) drifts onto the subdomain too — that's a workspace configuration setting, not a fix in DNS or authentication.

01
Why a subdomain exists
It's the dedicated sending identity Braze provisioned for IP and reputation isolation. DKIM, SPF, and bounce handling are configured on it — by design, recommended practice.
02
Why it surfaces in From
The workspace's default From address can be set on the subdomain. Without a campaign-level override, that's what recipients see — and what gets cached in their address books.
03
What the right setup does
Visible From on the root domain (e.g. giving@outwardbound.org); envelope, DKIM, and bounce path stay on the subdomain. DMARC's relaxed alignment makes this combination pass cleanly.
01 — Anatomy

An email is two messages stacked on top of each other

Every email actually carries two distinct "from" addresses, governed by two different RFCs. Recipients only see one of them; mail servers care mostly about the other. Misalignment between the two is the root cause of every concern this document addresses.

What recipients see (the "header" message)

The visible "from" name, address, subject, and body are RFC 5322 headers. Recipient mail clients render them. The via c.outwardbound.org annotation is Gmail's note that the envelope and header domains don't match exactly — discussed in §5.

What mail servers see (the "envelope")

Visible · RFC 5322
From: 5322.From / Header From
The friendly name and address rendered in the recipient's inbox.
Target value (root-domain From):
Outward Bound USA <giving@outwardbound.org>
Visible · RFC 5322
Reply-To: optional override
If present, clicking Reply uses this address instead of From. If absent, Reply uses From.
Typical setup:
(unset — replies fall back to From)
Envelope · RFC 5321
Return-Path: 5321.From / MAIL FROM / Bounce
Hidden from recipients. Where mail servers deliver bounces (NDRs). What SPF authenticates against.
Stays on subdomain:
bounces-XXXX@c.outwardbound.org
Sub-processor manages this mailbox; never read directly
Envelope · DKIM signature
d= signing domain in DKIM-Signature header
The domain whose private key signed this message. DKIM check confirms the signature is valid against the public key in DNS.
Signs as the subdomain:
d=c.outwardbound.org; s=<selector>
02 — Send flow

From "Send" to recipient inbox

Braze is a customer engagement platform; it does not directly hand packets to the recipient's mail server. The actual MTA work — DKIM signing, IP selection, SMTP delivery, bounce capture — is done by Braze's email sub-processor. For Outward Bound, that's SparkPost. The diagram below traces the handoffs; the cards below the diagram list what gets stamped onto each message and what the recipient checks.

OUR SIDE TRANSIT RECIPIENT SIDE STEP 1 · COMPOSE Braze Workspace Marketer builds campaign, picks segment, schedules send. From: workspace default STEP 2 · SIGN + ROUTE SparkPost DKIM sign, set Return-Path, choose IP, rewrite click links. Braze email sub-processor STEP 3 · DELIVER SparkPost IP pool SMTP handshake from a dedicated or shared IP. Warmed sending reputation IN TRANSIT · DNS LOOKUPS SMTP handshake + authentication queries The recipient mail server receives the message and pulls: SPF TXT on c.outwardbound.org · DKIM TXT at scph<date>._domainkey.c.outwardbound.org DMARC TXT on outwardbound.org (root — inherited by subdomain) STEP 4 · AUTHENTICATE Recipient MTA SPF + DKIM + DMARC checks STEP 5 · RENDER Recipient inbox Display, cache, "via" annotation
What gets stamped onto the message

SparkPost → SMTP delivery

Return-Path: bounces-XXXX@c.outwardbound.org
DKIM-Signature: d=c.outwardbound.org; s=scph<date>
Received: from SparkPost with IP from its pool
Click links: rewritten to a tracking subdomain
What the recipient mail server checks

Recipient MTA → authentication

SPF: is sending IP in c.outwardbound.org's TXT record?
DKIM: does the signature validate against published key?
DMARC: does From align with SPF or DKIM domain?
(under relaxed alignment, a root-domain match is enough)
Our infrastructure (Braze + SparkPost)
In transit · DNS lookups
Recipient MTA
Recipient inbox

Why dedicated sending subdomains exist

Braze (and every modern ESP) strongly recommends sending marketing email from a dedicated subdomain rather than the root domain. This isolates the sending reputation of marketing email from corporate mail (Outlook on outwardbound.org) and transactional mail. If a marketing campaign ever triggers spam complaints, blacklisting, or a deliverability incident, the impact stays on the subdomain — corporate inboxes on the root continue to function unaffected. The letter prefix itself (c. for campaigns, t. for transactional) is a convention; the meaningful work is that each is an isolated sending identity.

02a — Subdomain pattern

One pattern, multiple subdomains

The same architecture described in §2 applies to each Outward Bound sending subdomain. Each gets its own DKIM key pair, its own SPF authorization, and its own bounce-handling path — and each inherits DMARC policy from the root outwardbound.org zone. This is what allows the federation to share a domain while keeping reputations cleanly separated.

Current and planned subdomains

The visible From address for every campaign should sit on the root domain (e.g. giving@outwardbound.org, enroll@cobs.outwardbound.org) — never on the bare sending subdomain. The sending subdomain belongs in the envelope and DKIM, not in front of donors and recipients.

Live
c.outwardbound.org
National marketing & fundraising sends. Donor solicitations, newsletters, lifecycle campaigns. The subdomain at the center of recent deliverability work.
Live
t.outwardbound.org
Transactional & user-triggered email. Receipts, password resets, registration confirmations. Reputation-isolated from marketing — a bad marketing sender doesn't get registration confirmations sent to spam.
Planned
<school>.outwardbound.org
Per-school sending subdomains (e.g. cobs.outwardbound.org for Colorado Outward Bound School). Each school sends with its own DKIM, SPF, and bounce path — but visible From still resolves to a meaningful root-domain address.

DMARC policy inheritance: Because the DMARC record is published on the root outwardbound.org, all current and future subdomains inherit it automatically. No subdomain-level DMARC configuration is required to extend coverage to a new school. New subdomains do still need their own SPF and DKIM records published.

03 — DNS & authentication

What's published where

The recipient mail server's only source of truth about what we authorize is our DNS. The sub-processor provisions records on each sending subdomain (so the root zone's SPF doesn't have to enumerate every ESP), and our root-level DMARC policy governs how mismatches are handled. The DKIM check is what carries the alignment for the visible From address.

c.outwardbound.org illustrative values
Pattern of records on a dedicated sending subdomain · published by SparkPost setup · replace values with what's actually live
TypeHost (pattern)Value patternWhat it does
TXTc.outwardbound.orgv=spf1 include:sparkpostmail.com ~allAuthorizes SparkPost's sending IPs to use this subdomain in the envelope.
TXTscph<date>._domainkey.c.outwardbound.orgv=DKIM1; k=rsa; h=sha256; p=<public key>DKIM public key published directly as a TXT record. SparkPost's convention is to inline the key rather than use a CNAME pointing back to its infrastructure.
CNAME<bounce-host>.c.outwardbound.orgsparkpostmail.comCustom bounce domain — where Return-Path resolves. NDRs land at SparkPost, get classified, and the bounce status flows back to Braze for list hygiene.
outwardbound.org illustrative
Root domain · DMARC policy applies to all subdomains via inheritance
TypeHost (pattern)Value patternWhat it does
TXT_dmarc.outwardbound.orgv=DMARC1; p=<none | quarantine | reject>; adkim=r; aspf=r; rua=mailto:<reporting address>Tells recipients how to handle unauthenticated mail. Relaxed alignment (adkim=r) means a subdomain match counts as alignment for the root. Current policy strictness should be verified.
MXoutwardbound.org<M365 mail protection endpoint>Where replies and human inbound mail to the root domain are delivered. Replies routed to root-domain From addresses land here.
TXToutwardbound.orgv=spf1 include:spf.protection.outlook.com -allRoot SPF — for Outlook-sent corporate mail only. Does NOT need to include the marketing sub-processor (because the envelope from is on the subdomain, not the root).
SPF

Is this IP allowed to send for this domain?

Recipient checks the Return-Path domain's SPF record. If the sending IP appears in c.outwardbound.org's SPF, pass.

Checks against
Return-Path · c.outwardbound.org
DKIM

Was this message signed and unaltered?

Recipient fetches the public key from the TXT record at scph<date>._domainkey.c.outwardbound.org and validates the signature stamped by SparkPost.

Signing domain (d=)
d=c.outwardbound.org
DMARC

Does the From align with what's authenticated?

Recipient compares the visible From domain (outwardbound.org) to SPF and DKIM domains. Under relaxed alignment, subdomain → root match passes.

Outcome with root-domain From
✓ Passes via DKIM alignment (organizational domain match)
04 — Configuration impact

What the From-address change actually does

Only one header changes — the visible From — but it changes everything recipients see, the destination of replies, and what gets cached in their address books. Authentication still passes because DMARC's relaxed alignment treats c.outwardbound.org and outwardbound.org as the same organizational domain.

Misconfigured · From on subdomain

Visible From leaks to the sending subdomain

From: Outward Bound USA <noreply@c.outwardbound.org> Reply-To: (none) Return-Path: bounces-XXXX@c.outwardbound.org DKIM-Signature: d=c.outwardbound.org; s=scph<date> Received: from msg.sparkpostmail.com
Recipient experience: Sees noreply@c.outwardbound.org in the From field. Gmail also shows "via c.outwardbound.org", compounding the impression that something is off.

Reply behavior: Hitting Reply sends to noreply@c.outwardbound.org — an address with no real mailbox behind it.

Address book / autocomplete: Gmail caches the literal From address. Future typing-to-compose autocompletes to the subdomain version.

NDR risk: Replies to @c.outwardbound.org bounce because the subdomain has no inbound MX. Recipient sees an NDR; we never see the original reply.
Correct · From on root domain

Visible From on the root domain

From: Outward Bound USA <giving@outwardbound.org> Reply-To: (none — replies fall back to From) Return-Path: bounces-XXXX@c.outwardbound.org DKIM-Signature: d=c.outwardbound.org; s=scph<date> Received: from msg.sparkpostmail.com
Recipient experience: Sees giving@outwardbound.org — recognizable and brand-aligned. Gmail may still display "via c.outwardbound.org" because the envelope domain is unchanged; a seed send confirms.

Reply behavior: Hitting Reply sends to giving@outwardbound.org — a real M365 mailbox owned by us.

Address book / autocomplete: Gmail caches giving@outwardbound.org. Future autocomplete points to the right inbox.

Authentication: Still passes. DMARC relaxed alignment treats DKIM d=c.outwardbound.org as aligned with the new From at outwardbound.org.
05 — Reply & bounce paths

Where each kind of return mail goes

A recipient interacting with one of our emails can produce three different return paths — a human reply, a server-generated bounce, or an address-book-driven new email. The diagram below separates them so each can be reasoned about independently.

Path A
What we want to happen — replies route to a real inbox we own.
Path B
Invisible to recipients — server bounces are captured and processed automatically.
Path C
Only fails when the subdomain leaked into From in the first place — addressed by configuration.
RECIPIENT GMAIL / OUTLOOK USER Receives email From: giving@outwardbound.org via c.outwardbound.org PATH A · HITS REPLY Email client populates To: Uses Reply-To header if set, else uses From address. LANDS AT Root-domain inbox M365 mailbox we own. Real human reads and responds. PATH B · SERVER BOUNCES Recipient MTA can't deliver Mailbox full, address invalid, DMARC reject, etc. NDR LANDS AT Return-Path on subdomain bounces-XXXX@c.outwardbound.org Braze captures, marks user as bounced. PATH C · NEW EMAIL FROM CACHE Types "Outward Bound" Gmail autocomplete suggests whatever From was cached. IF SUBDOMAIN WAS CACHED · BAD No inbound MX on subdomain Mail bounces back to recipient as NDR. Erodes trust over time.
06 — Direct answers

Mapping current deliverability concerns

The questions below are the recurring ones raised whenever a Braze-sent email is examined for technical correctness. Each is answered against the architecture in sections 01–05.

01
Configuration-level fix
Why does email appear to send from the sending subdomain rather than the root domain?

When the visible From shows the subdomain, it's because the Braze workspace's default From address — or an individual campaign or Canvas override — was set on the subdomain. The sending infrastructure is working as designed; the configuration is just pointing the visible From at the wrong layer of the architecture.

The correct setup is visible From on a recognizable root-domain address (e.g. giving@outwardbound.org) while envelope, DKIM, and bounce path stay on the subdomain. This is set at both the workspace default level and pinned at each campaign / Canvas level so future workspace setting changes can't silently regress it.

02
Two distinct paths · only one is at risk
Is there a risk of non-delivery report (NDR) challenges from this setup?

Two distinct NDR paths exist in this architecture, and they behave very differently:

Server-generated bounces (Path B in §5) are sent to Return-Path, which points to the bounce mailbox on the subdomain. Braze captures these, marks the user as bounced, and the recipient never sees an NDR loop. This is correct and working — and it's the actual purpose of the subdomain Return-Path.

Recipient-initiated bounces (Path C) happen when a recipient sends new mail to a cached subdomain address. This is the failure mode worth taking seriously, because the sending subdomain has no inbound MX record — there is nowhere for that mail to land. When the visible From is set correctly on the root domain, no new emails leave with the subdomain in the From field, so no new entries get cached this way going forward.

03
Mostly fixed · some legacy cache decays naturally
What happens with recipient address book and autocomplete caching?

Gmail's "Other contacts" and Outlook's recipient cache both auto-populate from the visible From address. Any recipient who interacted with an email that had the subdomain in From may have @<subdomain>.outwardbound.org cached.

Going forward: No new emails populate the cache with the subdomain. Every future send caches the correct root-domain address instead, and that's what surfaces first in autocomplete on subsequent interactions.

Existing cached entries: These age out naturally as recipients receive newer emails from the correct address. Most clients down-rank stale entries fairly aggressively. No cleanup is possible from our side — we can't reach into anyone's address book — but the impact decays over weeks rather than years.

04
Verify with a seed send
Will the Gmail "via <subdomain>" annotation go away after the From change?

Not necessarily. Gmail displays the "via" annotation whenever the Return-Path domain (envelope From) differs from the visible From domain — even when DMARC passes. After the From change:

• Visible From: outwardbound.org
• Return-Path: c.outwardbound.org

The organizational domains match (so DMARC is happy), but the literal domains differ (so Gmail's annotation logic may still trigger). Per Google's documentation, the "via" annotation cannot be removed; it's an informational signal. A seed send confirms the actual rendered behavior before going live.

If the annotation does persist, it's far less alarming than the misconfigured state because the address itself now clearly reads as Outward Bound. The annotation just adds context about which infrastructure carried the mail.

05
Confirmed safe
Will deliverability or authentication suffer from moving From to the root domain?

No. DMARC's relaxed alignment mode treats subdomains and the root as the same organizational domain. With DKIM signing on d=c.outwardbound.org and the From on @outwardbound.org, alignment passes via DKIM. SPF on the Return-Path subdomain continues to authenticate normally. No DNS changes are required for the From change itself; it's a Braze workspace and campaign configuration change only.

07 — Verification

What to confirm before a live send

A short checklist to run before sending the next campaign on the corrected configuration — and to keep as a paper trail when the same questions resurface later.

Pre-send verification
Seed send to a Gmail account (and an Outlook account if possible). Inspect "Show original" / message source to confirm From, Return-Path, DKIM-Signature, and DMARC result.
Verify the visible From address and display name render as the intended root-domain address in the inbox preview, not the subdomain.
Click Reply on the seed and confirm the To field auto-fills with the root-domain address.
Check for the "via" annotation in Gmail. If present, document for stakeholders so the expectation is set; the annotation is informational and not a deliverability problem.
Verify DMARC result in headers — expect dmarc=pass with header.from on the root domain.
Confirm the workspace default has changed in Braze settings, not just the individual campaign/Canvas, so future campaigns inherit the correct From by default.
Document campaign/Canvas overrides — high-stakes sends (fundraising, donor stewardship) should pin From explicitly so a future workspace setting change can't silently regress this.
Re-verify the sub-processor periodically against Braze settings (see §0). If it ever changes, the DNS patterns in §3 need to be re-pulled from whichever provider is in use.