Connecting Amazon SES Custom Domain Verification via DNS Aliases
Connecting Amazon SES custom domain verification via DNS aliases requires precise record setup to prove domain ownership and authenticate your outbound mail streams. When you configure Amazon Simple Email Service (SES) with a custom domain, you bypass the default sandbox limitations, improve email deliverability, and ensure that your emails display your brand in the sender address rather than an generic AWS subdomain. This guide walks you through the entire configuration lifecycle, from generating the required records in the AWS console to publishing them at your DNS provider.
Before you begin the implementation, you should verify your DNS propagation health. You can use the CNAME Lookup tool on XiaTools to instantly check whether your validation CNAME records are publicly accessible and resolving to the correct AWS endpoints across global DNS resolvers.
Understanding Amazon SES Domain Verification Requirements
Amazon SES requires two primary cryptographic and routing mechanisms when you set up a custom sending domain: DomainKeys Identified Mail (DKIM) and Domain-based Message Authentication, Reporting, and Conformance (DMARC), alongside the initial domain identity validation. AWS uses CNAME (Canonical Name) records for Easy DKIM verification. Instead of managing complex public-private key pairs manually, AWS generates three unique CNAME tokens that you must publish in your zone file.
When a receiving mail server gets an email sent from your domain, it queries your DNS records to fetch the public DKIM key corresponding to the token provided in the email header. It then cryptographically validates the digital signature attached to the message. If the CNAME alias is misconfigured, broken, or missing, the validation fails, leading to lowered inbox placement or outright rejection by strict email receivers like Google and Microsoft.
The Anatomy of SES CNAME Records
AWS generates records that look specific to your region and identity. The format generally follows this exact syntax structure:
- Name (Host):
[Unique-Token]._domainkey.example.com - Type:
CNAME - Value (Target):
[Unique-Token].dkim.amazonses.com
It is critical to copy these values directly from the AWS SES console without truncating the trailing dots or appending unnecessary domain roots if your DNS hosting provider automatically appends them.
Step-by-Step Implementation Guide
Follow these sequential steps to configure and verify your custom domain in Amazon SES using DNS aliases.
Step 1: Initiate Domain Verification in the AWS Console
- Log into your AWS Management Console and navigate to the Amazon SES dashboard.
- In the navigation menu under Configuration, click on Identities, then click the Create identity button.
- Select Domain as the identity type.
- Enter your root domain name (e.g.,
example.com). - Under Identity configuration, choose Custom for DKIM settings and select Easy DKIM with an RSA key length of 2048-bit (recommended for maximum security).
- Expand the Advanced DKIM settings if you need custom selectors, then click Create identity.
Once created, AWS will present you with a screen containing your domain verification status and a set of three CNAME records for DKIM, alongside a TXT record if you opted for standard domain verification.
Step 2: Publish DNS Records at Your DNS Provider
Log into your DNS hosting provider (such as Cloudflare, Route 53, GoDaddy, or Namecheap). Note that menu paths vary slightly by provider, but you will generally look for a section labeled DNS Management, DNS Records, or Zone Editor.
Create three new CNAME records using the exact strings provided by AWS. Here is a practical example of how your records should look in your zone file:
| Type | Host / Name | Value / Target | TTL |
|---|---|---|---|
| CNAME | abcdef123456._domainkey.example.com |
abcdef123456.dkim.amazonses.com |
Auto / 3600 |
| CNAME | ghijkl789012._domainkey.example.com |
ghijkl789012.dkim.amazonses.com |
Auto / 3600 |
| CNAME | mnopqr345678._domainkey.example.com |
mnopqr345678.dkim.amazonses.com |
Auto / 3600 |
Note: Do not include the root domain name in the Host field if your DNS provider automatically appends your zone name. For example, enter just abcdef123456._domainkey instead of abcdef123456._domainkey.example.com if your interface appends the domain automatically.
Step 3: Validate Propagation and Status
After publishing the records, DNS propagation can take anywhere from a few seconds to 24 hours depending on your TTL settings and global provider caches. You can use command-line utilities to check your records before returning to the AWS console.
Run the following command in your terminal to query your CNAME record using dig:
dig CNAME abcdef123456._domainkey.example.com +short
Expected Output:
abcdef123456.dkim.amazonses.com.
If you are using Windows PowerShell, you can check the record using Resolve-DnsName:
Resolve-DnsName -Name abcdef123456._domainkey.example.com -Type CNAME
Once the command returns the expected AWS target endpoint, return to the AWS SES console. The verification status for your domain identity will automatically transition from Pending to Verified.
Advanced Mail From Domain Configuration (MX & TXT)
To complete your email authentication setup and ensure your Return-Path address matches your custom domain, you should also configure a custom MAIL FROM domain.
- In your SES Identity details page, scroll down to the MAIL FROM domain section and click Configure MAIL FROM domain.
- Enter a subdomain, such as
mail.example.com. - AWS will generate an MX record and a TXT record for SPF validation.
Add these records to your DNS provider:
- MX Record: Host:
mail.example.com, Value:feedback-smtp.us-east-1.amazonses.com(use your specific AWS region), Priority:10 - TXT Record: Host:
mail.example.com, Value:v=spf1 include:amazonses.com ~all
Common Mistakes and How to Fix Them
Even experienced engineers occasionally run into configuration pitfalls when setting up SES domain aliases. Here are the most frequent issues and how to resolve them:
- Double Domain Appending: Many DNS management panels automatically append your root domain to the Host field. If you input
abcdef123456._domainkey.example.com, your DNS provider might actually publishabcdef123456._domainkey.example.com.example.com, causing validation to fail. Always check your provider's formatting rules. - Enabling Cloudflare Proxy (Orange Cloud): If you host your DNS on Cloudflare and leave the proxy status set to "Proxied" (orange cloud) for your CNAME aliases, AWS will not be able to resolve the DNS queries directly during validation. Ensure all SES CNAME records are set to DNS Only (gray cloud).
- Mismatched AWS Regions: Ensure you are checking the verification status in the exact same AWS region where you created the identity. SES domain identities are region-specific.
Configuration Checklist
Review this quick checklist before testing your email delivery:
- Created a custom domain identity in the correct AWS region.
- Published all three Easy DKIM CNAME records without syntax errors.
- Disabled proxy services (e.g., Cloudflare gray cloud) on all validation CNAMEs.
- Verified DNS propagation using command-line tools or online lookups.
- Configured the custom MAIL FROM domain with proper MX and SPF TXT records.
- Confirmed status displays as Verified in the AWS SES console.