Running an audit
What gets checked
Authentication
| Check | What it verifies |
|---|---|
| DKIM | CNAME records exist and the keys are valid (not revoked) |
| SPF | TXT record is present, syntactically valid, and uses ≤ 10 DNS lookups |
| DMARC | TXT record at _dmarc is present, valid, and has a policy set |
Infrastructure
| Check | What it verifies |
|---|---|
| MX records | MX records exist and all hostnames resolve |
| Mail server TLS | MX servers support STARTTLS on port 25 |
| Reverse DNS | Sending IPs have valid PTR records |
| IPv6 | MX records have AAAA records and SPF covers IPv6 |
Reputation
| Check | What it verifies |
|---|---|
| Blacklists | Domain and IPs are not listed on major blocklists |
| Domain age | Domain is not newly registered (new domains have lower trust) |
All flags
| Flag | Description |
|---|---|
-q, --quick | Fewer checks — top blacklists only, fewer DKIM selectors scanned |
-j, --json | Output full results as JSON (useful for CI pipelines) |
--verbose | Show all checks, including ones that passed |
--dkimSelector | Check a specific DKIM selector by name |
--skipBlacklists | Skip blacklist checks (faster) |
--skipTls | Skip MX TLS checks |
--timeout | DNS lookup timeout in milliseconds (default: 5000) |
Examples
Common issues and fixes
DKIM not configured
DKIM not configured
Symptom:
✗ DKIM — No DKIM selectors foundFix: Follow the Domain Setup guide to generate DKIM tokens and add the three CNAME records to your DNS provider.SPF too permissive
SPF too permissive
Symptom:
⚠ SPF — Softfail (~all) — consider using -all for strict enforcementFix: Change ~all (softfail) to -all (hardfail) once you’re confident all legitimate senders are listed:Only switch to
-all after reviewing DMARC reports to confirm you haven’t missed any sending sources.No DMARC record
No DMARC record
Symptom: Start with
✗ DMARC — Not foundFix: Add a TXT record at _dmarc.yourapp.com:p=none to collect aggregate reports without affecting delivery. Once you’ve confirmed DKIM and SPF are working correctly, tighten the policy:Domain or IP on a blacklist
Domain or IP on a blacklist
Symptom:
✗ Blacklists — Listed on 1 listFix:- Check which blacklist flagged your domain or IP in the report output
- Visit that blacklist’s website — most have a self-service delisting form
- Common public blacklists and their delisting pages:
- Spamhaus — spamhaus.org/removal
- Barracuda — barracudacentral.org/rbl/removal-request
- SORBS — sorbs.net
- After delisting, re-run the check to confirm:
SPF exceeds 10 DNS lookups
SPF exceeds 10 DNS lookups
Symptom:
⚠ SPF — 11/10 DNS lookups usedFix: SPF limits you to 10 DNS lookups per evaluation. Reduce the number of include: mechanisms or replace them with explicit ip4: and ip6: directives. Tools like MXToolbox SPF Flattener can help.Best practices for production sending
- Set a DMARC policy of at least
p=quarantinebefore sending at volume. Start withp=noneto review reports first. - Monitor bounce and complaint rates. High bounce rates damage your sending reputation. The Wraps
productionandenterprisepresets include event tracking and reputation metrics. - Warm up new domains gradually. Start with a few hundred emails per day and ramp up over two to four weeks.
- Avoid spam trigger words in subject lines and keep your unsubscribe link visible.
- Authenticate all sending sources. If you use third-party email tools alongside Wraps, include all of them in your SPF record.
Bounce and complaint tracking
Wraps automatically processes SES bounce and complaint notifications and suppresses addresses that have hard-bounced. With theproduction preset, events are stored in DynamoDB for 90 days.
High bounce rates (above 5%) or complaint rates (above 0.1%) trigger SES sending limits. The enterprise preset includes full reputation metrics to monitor these in real time.
Dedicated IP
Theenterprise preset provisions a dedicated IP for your account. A dedicated IP means your reputation is entirely your own — other senders on AWS SES cannot affect your deliverability.
