Domain verification proves you own the domain you want to send emails from. This guide walks you through the complete process.

Table of Contents

Overview

When you add a domain to TrackPost, AWS SES requires proof of ownership. This is done by adding TXT records to your domain’s DNS.

What Gets Verified

  • Domain ownership - You control the domain
  • Email authentication - SPF, DKIM, and DMARC records
  • Sending authorization - You’re authorized to send from this domain

DNS Records You’ll Add

RecordPurposeRequired?
Domain verification TXTProve domain ownershipYes
SPF TXTAuthorize AWS to sendYes
DKIM TXTCryptographic signatureYes
DMARC TXTDomain policyRecommended

Step-by-Step Guide

Step 1: Add Domain in TrackPost

  1. Log in to your TrackPost Dashboard
  2. Navigate to Domains in the sidebar
  3. Click Add Domain
  4. Enter your domain name (e.g., yourcompany.com)
  5. Click Add Domain

You’ll see a modal with DNS records to add:

Domain: yourcompany.com
Status: Pending verification

DNS Records to Add:

TXT @ "v=spf1 include:amazonses.com ~all"
TXT _amazonses "verification_token_here"
TXT selector1._domainkey "dkim_key_1"
TXT selector2._domainkey "dkim_key_2"

Step 2: Add DNS Records

Choose your DNS provider below for specific instructions:

  • Cloudflare
  • GoDaddy
  • Route53 (AWS)
  • Namecheap
  • Google Domains
  • Other Provider

Cloudflare DNS Setup

  1. Log in to Cloudflare Dashboard
  2. Select your domain
  3. Go to DNSRecords
  4. Click Add Record for each TXT record

Example Configuration:

TypeNameContentTTL
TXTyourcompany.comv=spf1 include:amazonses.com ~allAuto
TXT_amazonsesverification_token_hereAuto
TXTselector1._domainkeydkim_key_1Auto
TXTselector2._domainkeydkim_key_2Auto
TXT_dmarcv=DMARC1; p=none; rua=mailto:[email protected]Auto

Tip

Important: In Cloudflare, the “Name” field should be the full subdomain or @ for root domain. Don’t include the main domain in the name field.

GoDaddy DNS Setup

  1. Log in to GoDaddy
  2. Go to My ProductsDNS (next to your domain)
  3. Click Manage
  4. Scroll to DNS Records section
  5. Click Add for each record

Example Configuration:

TypeNameValueTTL
TXT@v=spf1 include:amazonses.com ~all1 Hour
TXT_amazonsesverification_token_here1 Hour
TXTselector1._domainkeydkim_key_11 Hour
TXTselector2._domainkeydkim_key_21 Hour
TXT_dmarcv=DMARC1; p=none; rua=mailto:[email protected]1 Hour

Warning

GoDaddy Quirk: GoDaddy automatically adds your domain to TXT record names. If TrackPost says to add selector1._domainkey.yourcompany.com, just enter selector1._domainkey as the Name.

Route53 DNS Setup

  1. Log in to AWS Console
  2. Go to Route53Hosted zones
  3. Click on your domain name
  4. Click Create record

Example Configuration:

Record NameTypeValue
yourcompany.comTXT“v=spf1 include:amazonses.com ~all”
_amazonses.yourcompany.comTXT“verification_token_here”
selector1._domainkey.yourcompany.comTXT“dkim_key_1”
selector2._domainkey.yourcompany.comTXT“dkim_key_2”
_dmarc.yourcompany.comTXT“v=DMARC1; p=none; rua=mailto:[email protected]

Tip

Route53 Note: Route53 uses full domain names. Enter the complete subdomain (e.g., _amazonses.yourcompany.com) as the record name.

Namecheap DNS Setup

  1. Log in to Namecheap
  2. Go to Domain List → Click Manage next to your domain
  3. Go to Advanced DNS tab
  4. In Host Records section, click Add New Record

Example Configuration:

TypeHostValueTTL
TXT Record@v=spf1 include:amazonses.com ~allAutomatic
TXT Record_amazonsesverification_token_hereAutomatic
TXT Recordselector1._domainkeydkim_key_1Automatic
TXT Recordselector2._domainkeydkim_key_2Automatic
TXT Record_dmarcv=DMARC1; p=none; rua=mailto:[email protected]Automatic

Google Domains DNS Setup

  1. Log in to Google Domains
  2. Select your domain
  3. Click DNS in the left menu
  4. Scroll to Custom resource records
  5. Click Manage custom records

Example Configuration:

NameTypeTTLData
@TXT1hv=spf1 include:amazonses.com ~all
_amazonsesTXT1hverification_token_here
selector1._domainkeyTXT1hdkim_key_1
selector2._domainkeyTXT1hdkim_key_2
_dmarcTXT1hv=DMARC1; p=none; rua=mailto:[email protected]

Generic DNS Setup

For any DNS provider, add these TXT records:

SPF Record (Required):

  • Type: TXT
  • Name/Host: @ (or your domain name)
  • Value: v=spf1 include:amazonses.com ~all

Domain Verification (Required):

  • Type: TXT
  • Name/Host: _amazonses (or _amazonses.yourdomain.com)
  • Value: your_verification_token_here

DKIM Records (Required):

  • Type: TXT (2 records)
  • Name/Host: selector1._domainkey and selector2._domainkey
  • Value: DKIM public keys from TrackPost

DMARC Record (Recommended):

  • Type: TXT
  • Name/Host: _dmarc (or _dmarc.yourdomain.com)
  • Value: v=DMARC1; p=none; rua=mailto:[email protected]

Info

DNS Provider Variations: Different providers handle the “Name” field differently. Some require @ for root domain, some require the full domain, and some automatically append the domain. Check your provider’s documentation.

Step 3: Wait for Verification

DNS changes can take 5 minutes to 48 hours to propagate globally.

Check Propagation Status

Option 1: TrackPost Dashboard

  • Go to Domains
  • Check the status column
  • Changes from “Pending” → “Verified”

Option 2: Command Line

# Check TXT records
dig TXT yourcompany.com
dig TXT _amazonses.yourcompany.com
dig TXT selector1._domainkey.yourcompany.com

Option 3: Online Tools

Typical Timeline

PhaseDurationStatus
DNS UpdateInstantChanges in your DNS provider
Propagation5 min - 48 hrsSpreading across global DNS
AWS Detection5-15 minAWS SES sees the records
Verification1-5 minAWS confirms domain ownership

Step 4: Verify in TrackPost

Once DNS propagation is complete:

  1. Go to Domains in TrackPost dashboard
  2. Click on your domain
  3. You should see:
    • Domain Status: Verified
    • DKIM: Verified
    • SPF: Verified
    • DMARC: Verified (if added)

Understanding DNS Records

SPF (Sender Policy Framework)

Purpose: Tells email providers which servers can send email for your domain.

v=spf1 include:amazonses.com ~all

Breakdown:

  • v=spf1 - SPF version 1
  • include:amazonses.com - Allow AWS SES servers
  • ~all - Soft fail for other servers (mark as suspicious but don’t reject)

DKIM (DomainKeys Identified Mail)

Purpose: Cryptographically signs emails to prove they came from your domain.

How it works:

  1. AWS SES signs outgoing emails with a private key
  2. Email providers check the signature using your public key (in DNS)
  3. If valid, email is authenticated

DMARC (Domain-based Message Authentication)

Purpose: Tells email providers what to do with failed authentication checks.

Policies:

PolicyEffect
p=noneMonitor only (recommended to start)
p=quarantineSend to spam
p=rejectBlock the email

Example with monitoring:

v=DMARC1; p=none; rua=mailto:[email protected]

Example for production:

v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=50

Warning

DMARC Warning: Start with p=none for 2-4 weeks to monitor. Only change to p=quarantine or p=reject after confirming SPF and DKIM are working correctly.

Troubleshooting

“Pending” Status for Hours

Check DNS Propagation:

dig +short TXT _amazonses.yourcompany.com

If empty: DNS hasn’t propagated yet. Wait longer (up to 48 hours).

If shows value: TrackPost should detect it soon. Try clicking “Verify” button in dashboard.

Wrong Record Errors

Common Mistakes:

  1. Including domain in name field

    • ❌ Wrong: _amazonses.yourcompany.com in GoDaddy
    • ✅ Right: _amazonses (GoDaddy adds domain automatically)
  2. Quotes in value

    • ❌ Wrong: "v=spf1 include:amazonses.com ~all"
    • ✅ Right: v=spf1 include:amazonses.com ~all
  3. Wrong record type

    • ❌ Wrong: Adding as CNAME
    • ✅ Right: Must be TXT record
  4. Typo in verification token

    • Double-check every character matches exactly

Multiple SPF Records

If you already have an SPF record, merge them:

Before:

TXT @ "v=spf1 include:sendgrid.net ~all"
TXT @ "v=spf1 include:amazonses.com ~all"

After:

TXT @ "v=spf1 include:sendgrid.net include:amazonses.com ~all"

DKIM Keys Too Long

DKIM keys can be very long (200+ characters). Some DNS providers have limits:

Solution: Split into multiple strings:

"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1TaNgLlSyQMNWVLNLvyY/neDgaL2oqQE8T5illKqCgDtFHc8eHVAU+nlcaGmrKmDMw9dbgiGk1ocgZ56NR4ycfUHwQhvQPMUZw0cveel/8EAGoi/UyPmqfcPuJYSS9X" "8XnIloQb+hV/Bc/16Nw5c2iEsBbvXnmZqBTS+5IWUhrDzQIDAQAB"

Advanced: Multiple Domains

You can verify multiple domains for different purposes:

DomainUse Case
yourcompany.comMain transactional emails
support.yourcompany.comSupport tickets
marketing.yourcompany.comMarketing emails
notifications.yourcompany.comSystem notifications

Each domain follows the same verification process.

Next Steps

Once your domain is verified:

  1. Send Test Email - Verify everything works
  2. Check Authentication - Verify SPF/DKIM/DMARC
  3. Setup Webhooks - Configure event notifications
  4. Create Templates - Build reusable emails

Support

Still having trouble? Check these resources: