Email Audit logo

Email Audit

Community
AgriciDaniel
email-audit

Audits email domain deliverability setup (SPF, DKIM, DMARC, MX records, blacklists, TLS) and generates health score (0-100) with prioritized fix list. Checks bulk sender compliance against Google/Yahoo/Microsoft 2024-2026 requirements. Provides DNS records to add/update. Use when user asks to audit, check, or analyze email deliverability, domain health, or inbox placement.

Overview

PublisherAgriciDaniel
Repositoryclaude-email
Skill nameemail-audit
Stars
132
Forks
32
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by AgriciDaniel on GitHub. Read the source before you install it.

Installation

Install the Email Audit AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/AgriciDaniel/claude-email/tree/main/skills/email-audit
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/AgriciDaniel/claude-email.git /tmp/claude-email
mkdir -p .claude/skills
cp -r /tmp/claude-email/skills/email-audit .claude/skills/email-audit
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Email Audit in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Email Audit on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Email Audit is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Email Audit Sub-Skill

Purpose

Performs comprehensive email deliverability auditing for a domain. Checks DNS authentication records (SPF, DKIM, DMARC), infrastructure (MX, PTR, TLS), reputation (blacklists), and bulk sender compliance. Generates a health score (0-100) with prioritized fixes.

Input

  • Domain name: e.g., rankenstein.cloud, example.com
  • Optional: Email volume (triggers bulk sender compliance checks if 5,000+ emails/day)

Audit Categories

1. SPF Record (Weight: 10%)

What to check:

  • SPF record exists at TXT <domain>
  • Valid syntax: starts with v=spf1
  • DNS lookup count (max 10, warn at 8+)
  • Enforcement level: -all (pass), ~all (softfail), ?all (neutral), +all (fail)
  • No multiple SPF records (causes validation failure)
  • Includes are efficient and necessary

Commands:

bash
dig txt <domain> +short | grep "v=spf1"
# or
python scripts/check_deliverability.py <domain> --spf

Scoring:

  • Valid + hard fail (-all): 100 points
  • Valid + soft fail (~all): 70 points
  • Valid + neutral/pass all: 40 points
  • Invalid syntax or 10+ lookups: 20 points
  • Missing: 0 points

2. DKIM Record (Weight: 15%)

What to check:

  • At least one valid DKIM record exists
  • Key length: 2048-bit (required minimum per NIST), 1024-bit (legacy, upgrade recommended)
  • Common selectors: google, default, selector1, selector2, k1, mandrill, dkim

Commands:

bash
dig txt google._domainkey.<domain> +short
dig txt default._domainkey.<domain> +short
dig txt selector1._domainkey.<domain> +short
# Check common selectors

Note: DKIM selectors are not discoverable without prior knowledge. Check common ones and ask user if their email provider uses a specific selector.

Scoring:

  • 2048-bit key found: 100 points
  • 1024-bit key found: 70 points
  • Invalid/weak key: 30 points
  • Missing: 0 points

3. DMARC Policy (Weight: 15%)

What to check:

  • DMARC record exists at TXT _dmarc.<domain>
  • Policy level: p=reject (excellent), p=quarantine (good), p=none (monitoring)
  • Aggregate reporting (rua=) tag present
  • Forensic reporting (ruf=) tag present (optional)
  • Alignment mode: aspf= (SPF) and adkim= (DKIM) - relaxed vs strict
  • Percentage (pct=) should be 100 for full enforcement

Commands:

bash
dig txt _dmarc.<domain> +short

Scoring:

  • p=reject + rua + pct=100: 100 points
  • p=quarantine + rua: 80 points
  • p=none + rua: 40 points
  • p=none without reporting: 20 points
  • Missing: 0 points

4. MX Records (Weight: 10%)

What to check:

  • Valid MX records exist
  • MX hosts resolve to IP addresses
  • Priority ordering is logical
  • Mail provider identification (Google Workspace, Microsoft 365, custom)

Commands:

bash
dig mx <domain> +short
dig a <mx-hostname> +short

Scoring:

  • Valid + all hosts resolve + known provider: 100 points
  • Valid + all hosts resolve: 80 points
  • Valid but some hosts don't resolve: 40 points
  • Missing or invalid: 0 points

5. Reverse DNS / PTR (Weight: 5%)

What to check:

  • PTR records exist for MX server IPs
  • PTR records match forward DNS (hostname matches)

Commands:

bash
dig -x <mx-ip> +short

Scoring:

  • All MX IPs have matching PTR: 100 points
  • Partial PTR coverage: 50 points
  • Missing PTR: 0 points

6. TLS/STARTTLS (Weight: 10%)

What to check:

  • STARTTLS support on MX servers (port 25)
  • TLS version (1.2+ recommended)

Commands:

bash
openssl s_client -starttls smtp -connect <mx-hostname>:25 -brief

Note: This may require network access. If not available, note as "Unable to verify".

Scoring:

  • TLS 1.2+ with STARTTLS: 100 points
  • TLS 1.0/1.1 with STARTTLS: 60 points
  • No STARTTLS: 0 points

7. Blacklist Check (Weight: 20%)

What to check:

  • Domain and MX IP addresses against major blacklists:
    • Spamhaus (SBL, XBL, PBL)
    • Barracuda
    • SORBS
    • SpamCop
    • URIBL
    • Invaluement

Commands:

bash
# Use checkdmarc library if available
python -c "import checkdmarc; print(checkdmarc.check_domains(['<domain>']))"

# Or manual checks
dig <ip>.zen.spamhaus.org +short
dig <ip>.b.barracudacentral.org +short

Scoring:

  • Clean on all lists: 100 points
  • Listed on 1 minor list: 50 points
  • Listed on 1 major list (Spamhaus, Barracuda): 30 points
  • Listed on 2+ major lists: 0 points

Critical: Any listing on major blacklists severely impacts deliverability.

8. Bulk Sender Compliance (Weight: 10%)

Applies to: Domains sending 5,000+ emails/day to Gmail, Yahoo, Microsoft recipients.

Requirements (Google/Yahoo/Microsoft 2024-2026 rules):

  1. Both SPF AND DKIM must pass (not just one)
  2. DMARC policy at minimum p=none with alignment
  3. One-click unsubscribe header (RFC 8058: List-Unsubscribe-Post: One-Click)
  4. Spam complaint rate under 0.3% (target under 0.1%)
  5. Valid forward and reverse DNS (PTR records)
  6. Honor unsubscribe within 2 business days
  7. No impersonation of Gmail/Yahoo/Microsoft from headers
  8. TLS connection for message transmission

Scoring:

  • All 8 requirements met: 100 points
  • 6-7 requirements met: 70 points
  • 4-5 requirements met: 50 points
  • Less than 4 met: 0 points

9. Additional Checks (Weight: 5%)

Bonus points for:

  • BIMI record (Brand Indicators for Message Identification) at TXT default._bimi.<domain>
  • MTA-STS policy at https://mta-sts.<domain>/.well-known/mta-sts.txt
  • TLSRPT record at TXT _smtp._tls.<domain> (TLS reporting)
  • Mail-from domain alignment (DKIM/SPF align with From: domain)

Commands:

bash
dig txt default._bimi.<domain> +short
curl https://mta-sts.<domain>/.well-known/mta-sts.txt
dig txt _smtp._tls.<domain> +short

Scoring:

  • Each bonus feature: +25 points (max 100)

Health Score Calculation

Formula:

Total Score = (SPF × 0.10) + (DKIM × 0.15) + (DMARC × 0.15) + (MX × 0.10) +
              (PTR × 0.05) + (TLS × 0.10) + (Blacklists × 0.20) +
              (Bulk Compliance × 0.10) + (Extras × 0.05)

Score Interpretation:

ScoreRatingStatusAction
90-100ExcellentAll critical checks pass, fully compliantMonitor regularly
75-89GoodMinor issues, generally deliverableFix medium priority items
60-74FairIssues that could impact inbox placementFix high priority items within 1 week
40-59PoorSignificant deliverability risksFix critical items immediately
0-39CriticalMajor issues, emails likely going to spamEmergency fixes required

Workflow

Step 1: Gather Domain Information

Ask user for:

  • Domain name to audit
  • Approximate email volume (to trigger bulk sender checks)
  • Known DKIM selector (if not using common ones)

Step 2: Parallel Delegation

Spawn these agents in parallel for faster auditing:

Agent 1: email-deliverability

Check DNS authentication records for <domain>:
- SPF record validation
- DKIM record discovery (selectors: google, default, selector1, selector2, k1)
- DMARC policy analysis
- MX record validation
- PTR/reverse DNS check

Return JSON with pass/fail status and raw records.

Agent 2: email-compliance

Check bulk sender compliance for <domain>:
- Verify both SPF and DKIM pass
- Check DMARC alignment
- Note TLS support
- Check for List-Unsubscribe headers (if sample email provided)

Return compliance checklist with met/not met status.

Agent 3: email-reputation (if tools available)

Check reputation for <domain>:
- Blacklist status (Spamhaus, Barracuda, SORBS, SpamCop)
- Historical deliverability issues
- Spam complaint rate (if available)

Return list of blacklist hits and reputation score.

Step 3: Aggregate Results

Collect results from all agents and calculate weighted health score.

Step 4: Generate Prioritized Fix List

Categorize issues by priority:

Critical (Fix Immediately):

  • Blacklist listings
  • Missing SPF/DKIM/DMARC
  • Invalid DNS records
  • MX records not resolving

High (Fix Within 1 Week):

  • Weak SPF enforcement (~all instead of -all)
  • 1024-bit DKIM keys (upgrade to 2048-bit)
  • DMARC policy p=none (upgrade to p=quarantine or p=reject)
  • Missing PTR records

Medium (Fix Within 1 Month):

  • Missing aggregate reporting (rua tag)
  • No TLS/STARTTLS support
  • SPF approaching 10 DNS lookup limit
  • Missing bonus features (BIMI, MTA-STS, TLSRPT)

Step 5: Generate DNS Record Recommendations

Provide exact DNS records to add/update with copy-paste ready values.

Output Format

Structure the audit report as:

  1. Header: ## Email Deliverability Audit: [domain] with date, health score, rating
  2. Authentication table: SPF/DKIM/DMARC with status, score, raw records
  3. Infrastructure table: MX/PTR/TLS with status, score, provider detection
  4. Reputation: Blacklist status across Spamhaus, Barracuda, SORBS, SpamCop
  5. Bulk Sender Compliance: 8-requirement checklist (Google/Yahoo/Microsoft rules)
  6. Bonus Features: BIMI, MTA-STS, TLSRPT, Mail-from alignment
  7. Prioritized Fix List: Critical/High/Medium with impact, fix steps, DNS records
  8. DNS Records to Add: Copy-paste ready TXT/MX records
  9. Next Steps: Immediate, this week, this month, monitoring, re-audit

Use score weights from Health Score Calculation section. Use status badges: ✅ PASS, ⚠️ WARN, ❌ FAIL.

Tools

Run python scripts/check_deliverability.py <domain> --json for automated DNS checks.

Manual DNS commands (used in audit categories above):

  • SPF: dig txt <domain> +short
  • DKIM: dig txt <selector>._domainkey.<domain> +short
  • DMARC: dig txt _dmarc.<domain> +short
  • MX: dig mx <domain> +short
  • PTR: dig -x <ip> +short
  • TLS: openssl s_client -starttls smtp -connect <mx-hostname>:25 -brief

Quality Gates

Before delivering audit results:

  1. All critical checks completed (SPF, DKIM, DMARC, MX, Blacklists)
  2. Health score calculated with breakdown by category
  3. Prioritized fix list generated with specific action steps
  4. DNS records provided in copy-paste ready format
  5. Score interpretation explained with next steps

Error Handling

If DNS queries fail:

  • Note as "Unable to verify" in audit report
  • Provide manual check instructions
  • Suggest alternative DNS servers (8.8.8.8, 1.1.1.1)

If DKIM selector unknown:

  • Check common selectors (google, default, selector1, selector2)
  • Ask user for their email provider's DKIM selector
  • Note as "DKIM selector not found - requires manual verification"

If no MX records found:

  • Critical failure - domain cannot receive email
  • Check if domain uses mail forwarding (Cloudflare, etc.)
  • Provide setup instructions for email hosting

References

Load on demand:

  • references/deliverability-rules.md - Scoring thresholds and compliance rules
  • references/mcp-integration.md - Provider-specific setup and DNS configuration
  • references/compliance.md - Compliance rules and regulatory requirements

Success Criteria

Audit is successful when:

  • Health score accurately reflects deliverability state
  • All critical issues identified with clear severity levels
  • User receives actionable DNS records to implement
  • Fix priority aligns with business impact
  • Re-audit timeframe provided based on score

Frequently asked questions

What does the Email Audit AI skill do?

Audits email domain deliverability setup (SPF, DKIM, DMARC, MX records, blacklists, TLS) and generates health score (0-100) with prioritized fix list. Checks bulk sender compliance against Google/Yahoo/Microsoft 2024-2026 requirements. Provides DNS records to add/update. Use when user asks to audit, check, or analyze email deliverability, domain health, or inbox placement.

Why use Email Audit on TypingMind?

Because you install it once and use it with any model. Email Audit is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Email Audit in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/AgriciDaniel/claude-email/tree/main/skills/email-audit. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Email Audit?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Email Audit?

As many as you like. As long as a model supports skills, you can use Email Audit with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Email Audit AI skill free?

Yes. It is published on GitHub by AgriciDaniel under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇