Sendonis

Blog

DKIM, SPF, DMARC and custom MAIL FROM: a practical guide for transactional email

18 October 2026Sendonis Team

What DKIM, SPF, DMARC and custom MAIL FROM check, how alignment works, and which DNS records to publish so your transactional email is authenticated.

DKIM, SPF, DMARC and custom MAIL FROM: a practical guide for transactional email

If your password-reset emails land in spam, or don't arrive at all, the cause is often not the content. It's authentication. Mailbox providers want proof that a message really comes from the domain it claims to come from, and they get that proof from DNS.

This guide covers the four pieces you'll set up when sending with Sendonis, which is launching soon: SPF, DKIM, DMARC and a custom MAIL FROM domain. They're open standards, so almost everything here applies to any sending service, and you can get your DNS ready now. We'll explain what each one checks, how they fit together, and what the records look like. From launch, the exact values for your domain will be shown in the Sendonis dashboard when you add it. The examples below only show the format.

Two "from" addresses

Every email has two sender addresses, and most confusion about authentication comes from mixing them up.

Many sending platforms use one of their own domains as the envelope sender by default. That works, but it means part of your authentication is done in the platform's name rather than yours. A custom MAIL FROM domain fixes that. More on this below.

SPF: which servers may send for this domain?

Sender Policy Framework (SPF) is a TXT record that lists the servers allowed to send mail for a domain. The receiving server looks up the SPF record of the envelope sender's domain, not the visible From, and checks whether the sending server's IP address is on the list.

An SPF record usually authorises a sending service through an include: mechanism and ends with a policy for everything else:

v=spf1 include:<your sending service's SPF domain> ~all

Things to know:

DKIM: was this message signed by the domain?

DomainKeys Identified Mail (DKIM) adds a cryptographic signature to each message. The sending service signs selected headers and the body with a private key. The receiver fetches the matching public key from DNS and checks the signature. If the message was changed in transit, or wasn't signed by someone with the key, the check fails.

The signature names a signing domain (the d= tag) and a selector (the s= tag). DMARC looks at the signing domain. The public key lives at <selector>._domainkey.<your domain>. Services publish it in one of two ways:

A CNAME-based setup looks like this:

sel1._domainkey.acme.example   CNAME   <value from your dashboard>
sel2._domainkey.acme.example   CNAME   <value from your dashboard>

Copy the names and values exactly from the dashboard. Prefer 2048-bit keys where you have the choice.

Custom MAIL FROM: make SPF count for your domain

If the envelope sender is the platform's domain, SPF will pass, but for the platform's domain, not yours. For DMARC purposes, that SPF pass doesn't help you.

A custom MAIL FROM domain is a subdomain of your sending domain, for example bounce.acme.example, used as the envelope sender instead. You publish two records on it:

bounce.acme.example   MX    10 <feedback host from your dashboard>
bounce.acme.example   TXT   "v=spf1 include:<SPF domain from your dashboard> ~all"

Use a subdomain that isn't used for anything else. In particular, don't use one that needs to receive normal email, because its MX record will point to the bounce-processing host.

With a custom MAIL FROM in place, SPF passes for a subdomain of your domain. That gives you a second aligned check alongside DKIM.

DMARC: tie it all to the visible From

DMARC (Domain-based Message Authentication, Reporting and Conformance) is the policy layer. It's a TXT record at _dmarc.yourdomain that tells receivers two things: how to treat mail that fails authentication, and where to send reports.

A message passes DMARC if at least one of the following is true:

"Aligns" by default means relaxed alignment: the two domains share the same organisational domain. So bounce.acme.example aligns with receipts@acme.example. That's why a custom MAIL FROM subdomain works.

A good starting record:

_dmarc.acme.example   TXT   "v=DMARC1; p=none; rua=mailto:dmarc-reports@acme.example"

Our Acceptable Use Policy asks every customer to publish at least a p=none DMARC record for each sending domain. Large mailbox providers have also tightened their requirements in recent years. Gmail and Yahoo, for example, now expect bulk senders to authenticate with SPF and DKIM and to publish DMARC.

Putting it together

For a sending domain acme.example with mail sent as receipts@acme.example, the complete setup is:

PurposeNameTypeValue
DKIM<selector>._domainkey.acme.exampleCNAME or TXTfrom your dashboard
MAIL FROM bouncesbounce.acme.exampleMX10 + feedback host from your dashboard
MAIL FROM SPFbounce.acme.exampleTXTv=spf1 include:… ~all
DMARC_dmarc.acme.exampleTXTv=DMARC1; p=none; rua=mailto:...

Because SPF is checked on the MAIL FROM subdomain, you usually don't need to change the SPF record on your root domain for Sendonis. Leave it for the other services that send as your domain.

Common mistakes

Checking your work

DNS changes can take time to propagate. Once the records resolve, the Sendonis dashboard will show when your domain is verified. To confirm end to end, send a test message to a mailbox you control and look at the authentication results in the message headers. You want spf=pass, dkim=pass and dmarc=pass, with your own domain shown for each.

Step-by-step instructions will be in our documentation at launch. Until then, join early access to hear as soon as Sendonis is live.

DKIM, SPF, DMARC & Custom MAIL FROM: A Practical Guide | Sendonis