Deliverability · Practical guide
DKIM key rotation: switch selectors without stranding in-flight mail
Prepare and verify the new key before changing the active signer, and retire the old selector only after a justified overlap.
Reviewed · Examples are illustrative
Who this helps: Operators diagnosing authentication, receiving-policy and delivery failures.
Define the decision
Rotation is a sequence involving both the provider and DNS. Deleting the old public key immediately can prevent verification of delayed mail signed with the old private key. The overlap should follow your provider’s process and traffic behavior.
Work through the procedure
- Generate the new key through the authorized sending service.
- Publish its new selector and confirm public resolution.
- Switch signing, then verify fresh messages from every affected stream.
- Monitor delayed traffic before retiring the old selector under an approved change plan.
Worked example
The following is a synthetic example for this procedure, not a customer result or performance benchmark.
Stage 1: old selector active; new selector published
Stage 2: fresh messages use new selector and pass
Stage 3: overlap monitored for delayed old signatures
Stage 4: old selector retired after the documented gateRead the result
The critical evidence is a fresh signature using the new selector, not merely the existence of its DNS record. Track services separately if they do not rotate together.
Check before moving on
- Keep private-key material in the provider’s protected workflow.
- Record rollback steps before changing the signer.
Limits and next action
A compromise may require a different retirement decision than routine rotation. Involve the security owner when an old private key is suspected to be exposed.
Source references
Worked examples are illustrative. Editorial procedures are suggested methods, not measured performance claims or promises of additional product features.
Related guides
- DKIM: signed message evidence and the signing domain →
- Set up DKIM and verify the signature actually being used →
- DKIM selector not found: query the name in the actual signature →