The exact error
DKIM checkers and mail gateways use several versions of this warning:
Multiple DKIM records found
Selector returned multiple DKIM records
Duplicate DKIM TXT records
DKIM record has both CNAME and TXT data
The fix depends on the selector. DKIM does not look up a single record for the whole domain. It looks up a selector-specific DNS name.
DKIM selectors: what is allowed
A DKIM signature contains two tags that identify the public key:
DKIM-Signature: v=1; d=example.com; s=selector1; ...
The receiver combines them into this DNS lookup:
selector1._domainkey.example.com
A domain can have many selectors:
google._domainkey.example.com
selector1._domainkey.example.com
mailchimp._domainkey.example.com
s2026._domainkey.example.com
That is normal. It lets different providers sign mail independently and lets you rotate keys without downtime. The problem is multiple conflicting records at the same selector name.
Step 1: identify the failing selector
If you have a failed message, open the full headers and find DKIM-Signature. Extract:
-
s=- selector -
d=- signing domain
Then query the DNS name:
dig TXT selector1._domainkey.example.com +short
dig CNAME selector1._domainkey.example.com +short
On Windows:
nslookup -type=TXT selector1._domainkey.example.com
nslookup -type=CNAME selector1._domainkey.example.com
Case 1: two TXT records at the same selector
Bad result:
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhki...old"
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhki...new"
Receivers do not know which public key to use, so DKIM verification can fail. This often happens when a provider asks you to "add this DKIM record" and you add a new TXT record instead of replacing the existing value for the same selector.
Fix:
- Confirm which provider currently signs with this selector.
- Keep the public key that matches the active signing configuration.
- Delete the stale TXT record at the same selector.
- Send a new test message and confirm
dkim=pass.
Do not merge the p= values. DKIM public keys are not SPF includes; they cannot be combined.
Case 2: CNAME and TXT at the same selector
Some providers ask for a CNAME selector:
selector1._domainkey.example.com CNAME selector1-example-com._domainkey.provider.example
Others ask for a TXT selector:
selector1._domainkey.example.com TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..."
A DNS name with a CNAME must not have other record data at that same name. If a selector has both CNAME and TXT records, remove one. Follow the provider's current DKIM setup instructions and keep only the record type it expects.
Case 3: a long key split incorrectly
Long 2048-bit DKIM keys are often shown as multiple quoted strings:
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC..."
"...restOfTheSamePublicKey"
That can be valid if it is one TXT record containing multiple strings. With dig, a valid split usually appears as one answer line with multiple quoted chunks:
"v=DKIM1; k=rsa; p=MIIBIjAN..." "...continued..."
It is a duplicate problem when your DNS provider created two separate TXT records at the same selector. In that case, delete both and recreate the key as a single TXT record, letting the DNS provider split the value internally if needed.
Case 4: two providers using the same default selector
Many services default to selectors like selector1, selector2, google, or default. If two providers try to use the same selector for the same domain, they conflict.
Fix it by changing one provider to a unique selector, if supported. Good selector names include the provider and year:
sendgrid2026._domainkey.example.com
zendesk2026._domainkey.example.com
mailchimp2026._domainkey.example.com
If the provider does not allow custom selectors, use a delegated sending subdomain such as news.example.com or support.example.com so each service has its own DKIM namespace.
Case 5: key rotation confusion
DKIM key rotation should use a new selector. This is safe:
s2025._domainkey.example.com TXT "v=DKIM1; k=rsa; p=old..."
s2026._domainkey.example.com TXT "v=DKIM1; k=rsa; p=new..."
This is unsafe:
s1._domainkey.example.com TXT "v=DKIM1; k=rsa; p=old..."
s1._domainkey.example.com TXT "v=DKIM1; k=rsa; p=new..."
During rotation, publish the new selector, switch signing to it, keep the old selector for at least several days so in-flight mail can still verify, then remove the old selector. Do not publish two keys at one selector.
Safe fix procedure
- Find the selector from a real
DKIM-Signatureheader. - Query both TXT and CNAME for
selector._domainkey.domain. - Identify which provider owns that selector.
- Back up the current DNS values before deleting anything.
- Keep one valid TXT record or one valid CNAME record, not both.
- Wait for DNS TTL to expire.
- Send a new test message from the affected provider.
- Confirm
dkim=passin the received message headers.
Validate the fix
Query the selector directly:
dig TXT selector1._domainkey.example.com @1.1.1.1 +short
dig CNAME selector1._domainkey.example.com @1.1.1.1 +short
You should see one TXT answer that starts with v=DKIM1, or one CNAME answer pointing to the provider's DKIM host. Then send a fresh test message and inspect Authentication-Results for dkim=pass.
Use the DMARCTrust DMARC checker to validate the domain's public authentication DNS and catch related SPF or DMARC issues that can still cause delivery failures after DKIM is fixed.
Prevention
- Give every provider a unique selector when the provider supports custom selectors.
- Document which service owns each DKIM selector.
- Use new selectors for key rotation instead of replacing keys in place.
- Remove stale selectors only after you confirm no current mail signs with them.
- Monitor DMARC aggregate reports for sudden DKIM failure spikes by source and selector.
Related fixes
- If DKIM fails because the message changed in transit, read DKIM failures.
- If DKIM passes but DMARC fails, read DMARC alignment issues.
- If the recipient bounce mentions DMARC policy evaluation, read 554 5.7.5 permanent error evaluating DMARC policy.