Email domain verification: the records to publish and the traps to avoid
Published Updated 11 min readBy the Rasket team
Written for small business owners, e-commerce teams and startup founders

To verify a domain for email, add it to your sending service, copy the DNS records it gives you to wherever your domain’s DNS is managed, and wait until each record shows as verified, normally within the hour. That proves you control the domain, and it is what lets you send to any address rather than only to your own team.
The work is two records, or three where the return path is split in two; the rest is waiting. The 72 hours you may have read about is not the wait to expect: it is when a record that is still missing gets marked failed. The usual situation looks like this. You add send.acme.example at 10:00 so order confirmations come from your own name, paste the records, and at 10:30 the domain page still says Not found yet. This article shows where each record goes, what each status on the page means, and what to check when one is stuck. The records and the traps are much the same at any sending service; the screens named here are Rasket’s.
Root domain or subdomain?
Decide this first, because the domain you add is the one after the @. If you add send.acme.example, customers see orders@send.acme.example in the From line, under the display name (“Acme”) that most inboxes show first. Set a Reply-To on an address you read, such as help@acme.example, and replies go there. If you need orders@acme.example itself, add the root. Both work.
For order confirmations, receipts and other mail your product sends, a subdomain is the better default. Its records cannot collide with the ones your mailbox provider publishes at the root, and a problem with product mail is less likely to reach your staff’s mail, though providers also weigh the parent domain. The subdomain guide covers campaigns.
Shopify and WooCommerce stores
Your store platform’s own emails and Rasket’s are verified separately. Shopify sends its order confirmations from the sender email in Settings → Notifications and authenticates your domain with CNAME records of its own. Rasket’s records use their own names (rasket._domainkey and the return-path label), so adding them replaces nothing of Shopify’s. Your Shopify order confirmations can stay on Shopify: verifying a domain here does not change them. Rasket sends what you build here, such as abandoned-cart and win-back emails, and anything your own code sends.
If you bought the domain through Shopify, the domain page says Add these at Shopify. In the Shopify admin, open Settings → Domains, choose the domain, press Manage under DNS settings, then Add custom record for each row. Rasket’s store flows send only from a domain verified here. On WooCommerce, the Rasket WordPress plugin sends the store’s order emails through Rasket from the domain you verify.
The records, and where each one goes
DNS is the public directory for your domain, and your DNS host is the company where you edit it, often the one you bought the domain from. Two records are required there.
- The DKIM key. We sign every message, and receivers use this public key to check the mail came from your domain and was not changed on the way.
- The return path. This is where bounces go. With it on your domain, the SPF check, which asks whether a server may send for a domain, passes for your domain instead of ours, so the pass counts for your name.
Adding send.acme.example generates this set. Copy the values from the domain page rather than typing them.
; Signing key (always)
rasket._domainkey.send.acme.example. TXT "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A..."
; Return path
rasket.send.acme.example. CNAME (the host the domain page shows)| Record | Name | What it does |
|---|---|---|
| DKIM key (TXT) | rasket._domainkey.send.acme.example | The public half of the key we sign your mail with. Receivers fetch it to check the signature. |
| Return path (CNAME, or MX + TXT) | rasket.send.acme.example | Bounces come back to us at your domain, and SPF passes for it. |
| Receiving MX (optional) | send.acme.example | Only if you turn receiving on. It sends the domain's incoming mail to us. On a root domain that replaces the MX your mailboxes use, so receive on a subdomain unless you mean to move your mail. |
| Tracking CNAME (optional) | links.send.acme.example | Only for open and click tracking on your own domain. |
The return path sits at a label of its own, rasket for new domains or the next free label if something else already uses that one, so it never touches the records already at send.acme.example. Some domains show the same job as an MX and a TXT record instead of the CNAME; either verifies. The return path article explains how the label is chosen.
Publishing them
- Add the name your mail will come from — Add the exact domain that will appear after the @ in your From address, such as send.acme.example, and open it on the domain page.
- See where the domain's DNS is managed — Open the domain in Rasket. It reads your nameservers and heads its instructions with your DNS host by name, as in Add these at GoDaddy, with where to click in that panel. If it only says your DNS provider, it is usually where you bought the domain.
- Publish the records — Use one-click connect if your DNS host offers it. Otherwise create each record from the domain page, typing the name exactly as the page's Name column shows it, such as rasket._domainkey.send: most panels add your domain to it themselves.
- Watch the rows on the domain page — Each row says what the last check saw, such as Not found yet or Found, confirming, and whether the next move is yours or ours. The status table in this article says what to do for each.
- Let verification run, or ask for a check — Checks repeat on their own, including after you close the page. Press Check now on the domain page when you want an immediate look.
- Send one test message to yourself — Send from the new domain to a mailbox you control. In Gmail, open it, choose More, then Show original, and look for SPF and DKIM reading PASS with your domain; once the DMARC record below is published, DMARC reads PASS too. The DKIM, SPF and DMARC article explains each result.
For step 3, on Cloudflare one button writes the records after you sign in there. Hosts that support the Domain Connect standard, such as GoDaddy and IONOS, can show a Connect card: you approve the change on their screen and never share a password or key with us. Everything else is copy and paste, one row at a time.
If someone else manages your DNS, press Copy all and send them the rows, or ask them to approve the Connect card with their own login.
Most panels add the domain for you
Many DNS panels append your domain to whatever you type in the Name field. Paste the full name and you publish a record with the domain in it twice, which resolves to nothing and looks fine in the panel.
Zone: acme.example
Name typed: rasket._domainkey.send.acme.example
Published: rasket._domainkey.send.acme.example.acme.example <- nobody looks here
Should type: rasket._domainkey.sendHow long does verification take?
Normally under an hour once the records are right. While the domain page is open it says “Checking every 30 seconds. DNS changes can take up to an hour to show up.”, and checks carry on in the background after you close it. When the domain verifies, your team’s admins get an email saying so.
Each record row says what the last check saw, and whose move it is:
| The row says | What it means | What to do |
|---|---|---|
| Not found yet (Action needed) | DNS has no record at that name. | If you saved it more than 15 minutes ago, compare the name your panel shows with the page's Name column, then press Check now. |
| Wrong value (Action needed) | A record is there, but its value differs. The row shows what we saw. | Replace the value with the page's. Look for extra quotes or a cut-off key. |
| In use elsewhere | Another email service already has a record at the return-path name. | Use Change return path, which moves ours to a free label. |
| Found, confirming (Waiting on us) | Your record is right; our mail servers are confirming it. | Nothing. If it lasts more than an hour, press Check now. |
| Checking again | Your DNS host timed out or answered with an error. | Nothing yet. If it lasts for hours, ask your DNS host. |
| Failed | Not verified 72 hours after the first check: still missing, or still wrong. | Fix the record, then press Check now. |
If you use a terminal
The panel shows what it saved; dig shows what the internet answers. Empty output means the record is missing, misnamed, or a “not found” answer from a lookup made before you published is still cached. That lasts at most the zone’s negative-caching time (RFC 2308), five minutes in this example: the smaller of the SOA record’s TTL and its last field. A record that replaces an old value can take as long as the old record’s TTL. DNS propagation has the detail.
$ dig +short TXT rasket._domainkey.send.acme.example
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A..."
$ dig +short CNAME rasket.send.acme.example
us1.rasket.net.
$ dig +noall +answer SOA acme.example
acme.example. 3600 IN SOA ns1.dns-host.example. hostmaster.acme.example. 2026101601 7200 3600 1209600 300What to check when a record stays pending
- The name is doubled. Read back the full name the panel displays and compare it with the domain page.
- The value is quoted twice or cut short. Some panels add quotes themselves; some silently truncate long TXT values. A truncated DKIM key never verifies. If the panel rejects the long key, paste the split form the domain page also shows: the same key as several quoted strings. Only if that fails too, ask the page for a 1024-bit key: weaker, but the smallest size RFC 8301 still allows.
- Something else lives at the return-path name. A CNAME cannot share its name with any other record (RFC 1034 §3.6.2). Delete the old record at that label, or pick another label.
- Cloudflare is proxying the CNAME. A proxied record answers with Cloudflare’s addresses, not a CNAME. Set it to DNS only (grey cloud); the domain page reports this case by name.
- Another team verified the name first. Adding it is refused. The domain page offers a claim instead: you publish one TXT record at the root of the domain, and when it resolves the domain moves to your team, unless the current owner verified or sent from it very recently. The domains guide has the rules.
DMARC is not checked, but you want one
Verification does not require DMARC. When your domain has no policy yet, the domain page offers a starter record at _dmarc.acme.example, which also covers send.acme.example: v=DMARC1; p=none; rua=mailto:dmarc-reports@acme.example. If a record already exists at that name, keep it; two DMARC records count as none.
p=none blocks nothing. The rua= address asks receivers to send you reports, so you can see who sends as your domain before you tell them to reject the rest. It is still worth having now: Gmail requires a DMARC record, p=none included, from bulk senders, which it defines as close to 5,000 or more messages a day to Gmail addresses, counted across your whole domain. The return path counts toward DMARC for send.acme.example because DMARC’s default alignment is relaxed: both names end in acme.example. The DMARC guide tightens it when the reports look clean.
Keeping a domain verified
A verified domain keeps being re-checked. A record that disappears, typically when someone moves DNS to a new host and rebuilds the zone without it, shows up on the domain page rather than in a customer’s complaint. Keep the records wherever the rest of your DNS is managed, so a move brings them along.
Verified means receivers can check the mail is yours; it does not put the mail in the inbox by itself. A new domain has no sending history, so start with the people most likely to open, such as order confirmations, and add volume over a few weeks. The warm-up guide has the schedule.
For developers
POST /domains/{id}/verify checks immediately, GET /domains/{id} reads status without a check, and every status change is sent as a domain.updated webhook. A domain’s status is pending, verified, failed, not_started, partially_verified or partially_failed; each record’s is pending, verified, failed, temporary_failure or not_started. The API labels the return-path record SPF, after the check it makes pass. The domains API reference has the requests, and the webhooks reference has the event payload.
{
"name": "send.acme.example",
"status": "pending",
"records": [
{ "record": "DKIM", "name": "rasket._domainkey.send", "type": "TXT", "status": "verified" },
{ "record": "SPF", "name": "rasket.send", "type": "CNAME", "status": "pending" }
]
}When you stop using it
Remove its records from your DNS first: the DKIM key, the return-path CNAME (or MX and TXT), and the tracking CNAME and receiving MX if you added them. Then delete the domain from Rasket. Removing DNS first means no CNAME is ever left pointing at a service you no longer use, which is how subdomain takeovers start.
When Rasket is not what you need
If you only want your staff mailboxes on your own domain, you need a mailbox provider, not a sending service: Google Workspace and Microsoft 365 have their own verification. Verify a domain here when your website, store or application sends mail.
Frequently asked questions
What do the DNS records for email look like in a typical DNS panel?
Each record is a row with a Type (TXT, CNAME or MX), a Name or Host, a Value or Target, and a TTL. For the signing key you would choose TXT, type rasket._domainkey.send as the name if your zone is acme.example, paste the value from the domain page, and leave the TTL on automatic.
Do I have to move my DNS or my mailboxes?
No. Your DNS stays where it is and you add records to it. Verifying a domain for sending changes nothing about where its mail is received, unless you also turn receiving on, which adds an MX record and is a separate decision.
Can a sending domain already used by another email service be verified here too?
Yes. Each service signs with its own DKIM selector, so the keys sit side by side, and our return path uses a label no other service is using. Your existing SPF record at the root is not touched, so mail from the other service keeps passing as before.
How do I know it worked without a terminal?
Every required row on the domain page reads verified, and the domain's status at the top says so too. To confirm it end to end, send yourself a message from the new domain and check that it arrives in the inbox with no warning beside the sender.
Can I send before the domain verifies?
Yes, to your own team. Every Rasket team has a managed address, the one marked Managed at the top of the Domains page, and it works from the start, sending to the verified addresses of the team's members. Anyone else is refused with Verify a domain to send to other addresses, which is what verification lifts.
Does verifying remove the via label in Gmail?
Yes, once your From address is on the domain you verified. Gmail shows via when the domain that sent the message does not match the From address. With the domain verified, mail is signed as your domain, so the two match and the label goes.
Will verifying my domain keep my emails out of spam?
Not by itself. Verification covers SPF and DKIM, which Gmail requires from every sender. Bulk senders also need the DMARC record (p=none is enough), one-click unsubscribe on marketing mail and a spam rate under 0.3%. Where your mail lands after that depends on whether people want it: complaints, engagement and a gradual start on a new domain. The guide to emails going to spam covers the causes.
Is it the same at other email services?
The kinds of records are. Other sending services also ask for a DKIM key under a selector of their own, and usually a return-path or SPF record. The names and values differ, so copy them from each service's own page, and expect the same wait for DNS to answer.
Sources
- RFC 1034: Domain Names — Concepts and Facilities, section 3.6.2 (aliases) — IETF, read 2026-10-17
- RFC 2308: Negative Caching of DNS Queries (DNS NCACHE), section 5 — IETF, read 2026-10-17
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures — IETF, read 2026-10-16
- Extra info next to sender's name (Gmail Help) — Google, read 2026-10-17
- Setting up your email (Shopify Help Center) — Shopify, read 2026-10-17
- Editing the DNS settings for your Shopify-managed domain — Shopify, read 2026-10-17
- RFC 8301: Cryptographic Algorithm and Key Usage Update to DKIM, section 3.2 — IETF, read 2026-10-17
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) — IETF, read 2026-10-17
- Email sender guidelines FAQ — Google, read 2026-10-17
- Rasket docs: Domains (guide) — Rasket, read 2026-10-17
- Rasket docs: Domains API reference — Rasket, read 2026-10-17
Related
- Domains — The records, where they go at each registrar, and what the page does while you wait.
- Domain verification — Domain verification is proving you control the domain you want to send from. You add the domain, publish the DNS records you are handed, and wait for them to…
- Custom return path: why your bounces need it — What the return path is, how it differs from the From header, why a return path on your own subdomain makes SPF count toward DMARC, and the records it needs.
- DKIM, SPF and DMARC explained: what to publish — What SPF, DKIM and DMARC each check, how to read the verdicts on a sent message, the records to publish, and what Gmail and Outlook.com require of senders.
- Should you use an email subdomain for marketing? — When a marketing subdomain like news.example.com is worth it, by volume: what it separates from your domain, what it shares, and the DMARC and DNS records.
- DNS propagation (TTL) — Propagation is the delay between publishing a DNS record and the rest of the internet seeing it. Nothing is actually pushed anywhere: resolvers cache the…
- Why are my emails going to spam? How to fix it — Why emails land in spam or junk: read the headers to see which problem you have, then the fixes Gmail, Outlook and Yahoo document, in order.