Skip to content

Email domain verification: the records to publish and the traps to avoid

Published Updated 7 min readBy the Rasket team

A shield outline resting over a single row of a DNS record table, drawn as white and violet outlines on black.

What verification proves

Email domain verification is proving to a sending service that you control a domain, by publishing DNS records only somebody with access to the zone could publish. It is the precondition for everything else: a send from a domain that has not passed verification is refused before anything leaves the building.

The proof is not a formality. Once a domain is verified, mail is signed as that domain, and a receiving server that checks the signature will conclude the message really is from you. That is exactly the claim that would be worth forging, which is why the mechanism is a record in a zone only you can write to rather than a checkbox or a confirmation email.

It also has nothing to do with where your mail is read. Verifying a domain for sending does not move your mailboxes, does not change your MX records unless you also turn receiving on, and does not require you to transfer DNS anywhere.

The records, and what each one is for

Adding a domain generates its set. These are the DNS records for email that a sending domain needs, with values truncated here the way the dashboard truncates them.

TXT   rasket._domainkey.send.acme.example   "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A..."MX    send.acme.example                       (the host the dashboard hands you)TXT   send.acme.example                       "v=spf1 include:... ~all"
What each record a sending domain needs is for
RecordWhat it does
The DKIM TXT recordPublishes the public half of a 2048-bit signing key under the rasket selector. A receiving server fetches it to check the signature on your mail.
The MX record at the sending subdomainGives the domain its own return path, so bounces and complaints come back to us and land on the message's timeline instead of arriving at your mail server.
The SPF TXT record at the same nameAuthorises the sending infrastructure for that return path, which is what makes a receiver's SPF check pass and align.
A tracking CNAME (optional)Only needed if you want open and click tracking on links rewritten to your own domain.

The private half of the signing key never leaves us and is encrypted at rest. The key is 2048-bit, so the value is long enough that some panels split it into two quoted strings — normal, and it resolves correctly.

DMARC is not one of them

DMARC is not required to verify a domain and nobody publishes one for you: it is a policy about your whole domain rather than about one sending service. Add it yourself at the monitoring policy and tighten from there — the article on the three records covers the order to do it in.

Publishing them

  1. Add the domainAdd the exact name you want mail to come from. A subdomain such as send.acme.example is the shape to prefer, because everything nests under it and nothing collides with your existing mail.
  2. Copy the generated recordsAdding the domain generates its record set: a signing key to publish as TXT, and the two records that give the domain its own return path. Copy each row exactly as it is shown.
  3. Publish them at your DNS hostCreate each record in the zone for that domain. Many panels append the zone to whatever you type, so pasting a fully qualified name produces a record with the domain in it twice.
  4. Wait for the change to resolvePublication is not instant. How long depends on your provider and on the TTL of anything being replaced, so give it minutes rather than seconds before deciding something is wrong.
  5. Let verification runChecks start as soon as the domain is added and repeat on a schedule, so nothing has to poll. Each record carries its own status, and you can ask for an immediate re-check up to once a minute.
  6. Send one real messageOnce every record reads verified, send a single message to an address you control and look at the headers it arrives with. A signature that verifies at the receiving end is the only proof that matters.

If your DNS is somewhere we can write to, you can connect that account and have the records published for you; the access is used for that one write and not kept. Otherwise it is a few rows pasted into a panel you already have open.

Propagation and TTLs

Publishing is not instant, and how long it takes has nothing to do with us. A new record usually resolves within minutes, because there is no cached answer to expire. A record that replaces an existing one can take as long as the old record’s TTL, because resolvers that already have the old value will keep serving it until then.

Two practical consequences. If you know a change is coming, lower the TTL on the record you are about to replace a day beforehand. And check what DNS is actually answering rather than what the panel shows you — the panel shows its own state, not the internet’s.

$ dig +short TXT rasket._domainkey.send.acme.example"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A..."
$ dig +short MX send.acme.example10 ...

Verification checks start as soon as you add the domain and repeat on a schedule, so nothing has to poll and a record verifies on its own once it resolves. You can also ask for an immediate re-check, up to once a minute per domain.

When a record will not verify

One cause accounts for most of them.

Name field:  send.acme.examplePanel scope: acme.exampleResult:      send.acme.example.acme.example   <- not a record anybody will find

Many DNS panels append the zone to whatever you type in the name field. Pasting a fully qualified name into a field that is already scoped to the zone produces a record with the domain in it twice, which resolves to nothing and looks, in the panel, entirely correct. Enter the short label, then read back the fully qualified name the panel displays.

  • Quotes in the value. Some panels want the TXT value quoted and some add the quotes themselves. A value with quotes inside quotes will not match.
  • A truncated DKIM value. The key is long. A field that silently cut it off leaves a record that parses and never verifies.
  • Flattening at the root. Providers that flatten records at the apex can interfere with a record you publish there, which is one more reason to use a subdomain.
  • A second provider’s SPF record. A domain publishes one SPF record. If the name already has one, merge the new include into it rather than adding a second.
  • Somebody else verified the name. A name can be verified on one team at a time, so adding it is refused rather than duplicated.

Claiming a name another team verified

Claiming is the only route, and there is no support ticket that shortcuts it. You publish a TXT record at the root of the domain; when it resolves, the domain moves to your team with fresh signing records of its own and the other copy is switched off. The transfer waits while the current owner is still active on the name, and a claim expires after seven days.

Use a subdomain, not the root

Adding send.acme.example rather than acme.example is the shape to prefer, for two reasons that both save you trouble later.

Every record nests under the subdomain, so nothing collides with what your mailbox provider already publishes at the root — no merging SPF records, no worrying about flattening at the apex. And reputation is scored per sending domain, so a problem on your product mail never reaches the mail your staff send from their own addresses.

Take it one step further if you send campaigns as well as receipts: a subdomain each means a campaign with a bad list cannot drag down the password resets. The deliverability guide covers why that separation matters more than almost anything else on this page.

Keeping a domain verified

Verification is not a one-off. The records are re-checked on a schedule, each with its own status, and one that verified and later stops resolving is reported as drifted rather than quietly ignored — which is the difference between noticing a DNS migration dropped a record and finding out from a customer.

Two habits are worth building. Subscribe a webhook to the domain events so a drift shows up where your team already looks, rather than on a page somebody remembers to open. And treat the records as infrastructure: whatever manages the rest of your DNS should manage these too, so a zone rebuilt from configuration comes back with them.

The domains page shows the record set beside what DNS answered on the last check, the reference documents every field and route, and the quickstart goes from an empty account to a sent message in about five minutes.

Frequently asked questions

Do I have to move my DNS?

No. Your DNS stays exactly where it is and you add records to it. If the domain is on a provider we can write to, you can connect that account and have the records published for you; otherwise it is a few rows pasted into a panel you already have open.

Why does my record show up twice as long as it should?

Because the panel appended the zone to a name that already had it. Typing send.acme.example into a host field that is already scoped to acme.example produces send.acme.example.acme.example. Enter the short label, then read back the fully qualified name the panel displays.

How long does verification take?

It depends on how quickly your DNS provider publishes the change, not on us. Checks begin the moment the domain is added and keep repeating, so a record verifies on its own once it resolves. Most domains finish within minutes; a record replacing one with a long TTL can take hours.

Do I need DMARC to verify?

No, and we do not publish one for you. It is worth adding at your own pace, starting at the monitoring-only policy. One warning: a domain that already publishes a strict policy can have mail rejected until the new records are in place, so publish and verify before you start sending from it.

What if another team already verified my domain?

Adding it is refused, and claiming it is the only route. You publish a TXT record at the root of the domain, and when it resolves the domain moves to your team with fresh signing records of its own. There is no support ticket that shortcuts this, and a claim expires after seven days.

Can I send from the root domain?

You can, but a subdomain is the better arrangement. Sending from send.acme.example keeps your product mail's reputation separate from everything else the root domain sends, and it means the records you publish cannot collide with the ones your mailbox provider already has there.

Sources

  1. RFC 1035: Domain Names — Implementation and SpecificationIETF, read 2026-09-16
  2. RFC 6376: DomainKeys Identified Mail (DKIM) SignaturesIETF, read 2026-09-16
  3. RFC 7208: Sender Policy Framework (SPF) for Authorizing Use of Domains in EmailIETF, read 2026-09-16
  • DomainsAdd a domain, publish the generated record set and send from it. A 2048-bit DKIM key per domain, a custom return path, and verification that runs on its own.
  • DomainsAdd a domain, publish its records, verify it.
  • QuickstartKey, domain, first send — in that order.
  • DKIM, SPF and DMARC explained for developersWhat SPF, DKIM and DMARC each prove, the records to publish, how alignment ties them together, and what the large mailbox providers now require of senders.
  • Email deliverability guide for developersDelivered is not the same as inboxed. Authentication, domain reputation, list hygiene, the headers bulk senders need, and the numbers worth watching every week.

Start sending this morning

Sign up, verify a domain and send your first email in minutes.