skills/email-systems/SKILL.md
Use when building transactional or marketing email infrastructure, configuring SPF/DKIM/DMARC, debugging deliverability issues, setting up email queues with retry logic, or designing email automation workflows. NEVER use for writing email copy (use email-composer or email-draft-polish), designing email templates visually, or non-email notification systems.
npx skillsauth add sharkitect-solutions/sharkitect-claude-toolkit email-systemsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| File | Purpose | When to Load | |---|---|---| | SKILL.md | DNS authentication, architecture decisions, IP warm-up, bounce/complaint handling, common failures | Always (auto-loaded) | | esp-provider-guide.md | Provider selection (SendGrid/SES/Postmark/Resend/Mailgun), provider-specific gotchas, migration checklist, cost comparison | When choosing an ESP, migrating between providers, or debugging provider-specific issues | | queue-architecture-patterns.md | Email queue patterns (direct/priority/fan-out), retry strategy, idempotency keys, dead letter queues, rate limiting | When building email sending infrastructure or implementing retry logic | | monitoring-troubleshooting-guide.md | Deliverability investigation procedure, ISP-specific troubleshooting (Gmail/Outlook/Yahoo), monitoring dashboard, alert response playbook | When debugging deliverability issues or setting up production monitoring |
| This Skill Handles | Defer To | |---|---| | DNS authentication (SPF, DKIM, DMARC) setup and debugging | security-best-practices (general security review) | | Email queue architecture and retry logic | senior-backend (general queue/messaging patterns) | | ESP selection, configuration, and migration | app-builder (full application architecture) | | Bounce handling, complaint processing, suppression lists | email-composer (writing email copy and tone) | | IP warm-up and sender reputation management | marketing-demand-acquisition (campaign strategy) | | Deliverability troubleshooting and ISP-specific fixes | email-sequence (email automation sequences) |
DNS authentication -- all three required before sending any volume:
v=spf1 include:sendgrid.net ~all -- list every authorized sending source; use ~all (softfail) not -all until verified cleanp=none; rua=mailto:[email protected] to collect reports; graduate to p=quarantine then p=reject after 30 days of clean reportsp=quarantine or p=reject plus a Verified Mark Certificate (VMC)| Decision | Signals to Separate | Signals to Combine | Recommendation |
|----------|--------------------|--------------------|----------------|
| Transactional vs Marketing | Volume > 50k/mo, complaint rate delta > 0.05%, different sender domains | Small list (< 5k), single ESP, no deliverability issues yet | Separate at scale; start combined and split when complaints diverge |
| Shared IP vs Dedicated IP | Volume > 100k/mo, brand reputation critical, history of high complaints | Volume < 50k/mo, cold start, irregular sending cadence | Dedicated IP requires warm-up; shared IP inherits ESP pool reputation |
| Single ESP vs Multi-ESP | Single ESP acceptable for < 500k/mo; multi-ESP for failover above that | -- | Use one primary + one failover with DNS MX failover or webhook replay |
| Queue architecture | Any production workload | Simple scripts / one-off sends | Always queue: async processing, retry logic, deduplication by idempotency key |
| Subdomain for marketing | Marketing email to cold or opted-in lists | Transactional-only sending | Use mail.yourdomain.com for transactional, news.yourdomain.com for marketing to isolate reputation |
New dedicated IPs start with zero reputation. ISPs throttle or block unknown IPs sending high volume. Follow this schedule without skipping days:
| Day | Max Emails | Notes | |-----|-----------|-------| | 1-2 | 200/day | Highest-engagement segment only (opened in last 30 days) | | 3-4 | 500/day | Expand to 60-day openers | | 5-7 | 1,000/day | Expand to 90-day openers | | 8-10 | 2,500/day | Monitor bounce and complaint rates daily | | 11-14 | 5,000/day | Pause if complaint rate exceeds 0.08% | | 15-21 | 10,000/day | Full list segments with suppression applied | | 22-28 | 25,000/day | Normal cadence if metrics are clean | | 29+ | Full volume | Graduated by 2x/week max if volume > 100k |
Abort criteria: Stop warm-up and investigate if hard bounce rate > 2%, soft bounce rate > 5%, or complaint rate > 0.1% on any single day.
| Failure | Severity | Root Cause | Fix |
|---------|----------|-----------|-----|
| Emails landing in spam despite clean DNS | High | Reputation on shared IP pool | Switch to dedicated IP or move to reputable ESP; check content spam score with Mail-Tester |
| DKIM signature verification fails | Critical | Key mismatch, selector not propagated, or signing config error | Verify selector TXT record with dig TXT selector._domainkey.yourdomain.com; allow 48h DNS propagation |
| SPF permerror (too many lookups) | High | SPF record exceeds 10 DNS lookup limit | Flatten SPF using SPF flattening tools; consolidate include statements |
| DMARC failures despite valid SPF and DKIM | High | Alignment mismatch: From domain doesn't match SPF/DKIM domain | Ensure envelope-from (Return-Path) and DKIM d= tag align with the From header domain |
| Outlook renders HTML broken | Medium | Outlook uses Word rendering engine, not a browser engine | Use table-based layout, inline CSS only, avoid flexbox/grid, test with Litmus or Email on Acid |
| Bounce webhook not firing | High | Webhook endpoint returning non-2xx or timing out | ESPs retry webhooks 3-5 times then drop; ensure endpoint responds < 5s and returns 200; use a queue to accept and process async |
| Unsubscribe link broken after template update | Critical | URL parameter stripping or link rewriting by ESP | Use absolute URLs with tracking disabled on unsubscribe links; test post-deploy |
| New IP blocked by Spamhaus | Critical | IP on PBL (Policy Block List) -- common for cloud provider IPs | Check mxtoolbox.com/blacklists; request Spamhaus PBL removal for your IP; use ESP relay instead of direct SMTP from cloud VMs |
| Decision | Rationale | Trade-off | |----------|-----------|-----------| | Always use a queue for transactional email | Synchronous SMTP in request path adds 200-2000ms latency and fails the request if ESP is down | Queue adds infrastructure complexity; accept eventual delivery (usually < 5s) | | Separate transactional and marketing IPs/subdomains | Marketing email generates more complaints; complaint rate from marketing bleeds into transactional deliverability | Costs more (two ESPs or two IP pools) but protects password resets and receipts | | Start DMARC at p=none | Blind enforcement breaks legitimate email flows (forwarding, mailing lists, third-party senders) you didn't know existed | Delays enforcement; DMARC reports reveal all sending sources within 2-4 weeks | | Suppress hard bounces permanently | Re-sending to invalid addresses is the fastest way to get blacklisted; ISPs treat persistent invalid address sends as spam behavior | Occasionally removes real addresses that had temporary issues; acceptable loss | | Use 2048-bit DKIM keys minimum | 1024-bit keys are considered weak by modern standards and rejected by some ISPs | Slightly larger DNS record; no practical downside | | Warm up dedicated IPs with engaged subscribers first | High engagement signals (opens, clicks) in the first days establish positive reputation with ISPs before volume increases | Means your best subscribers get slightly delayed sends during warm-up period |
development
When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ad copy,' 'ad creative,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' or 'audience targeting.' This skill covers campaign strategy, ad creation, audience targeting, and optimization.
testing
--- name: using-sharkitect-methodology description: Use when starting any conversation in a Sharkitect workspace OR before any task involving NEW pricing, positioning, proposal, strategy, plan-execution, or schema-design work — mandates invocation of Sharkitect-specific methodology skills (pricing-strategy, marketing-strategy-pmm, smb-cfo, hq-revenue-ops, executing-plans, brainstorming) under the same anti-rationalization discipline as using-superpowers. Documentation has failed 4 times across H
testing
Use when user says 'end session', 'wrap up', 'stop for the day', 'done for today', 'close out', 'save session', 'wrapping up', or invokes /end-session. Runs the full 9-step end-of-session protocol: resource audit, MEMORY.md update, lessons capture, plan status, pending items, workspace checklist, .tmp/ audit, git commit+push, Supabase brain sync, session brief, summary. Final step schedules a detached self-kill of the current session ONLY (3s delay) so the window closes cleanly. Other claude.exe processes (active workspaces) are NOT touched -- orphan cleanup is handled separately by Claude-Orphan-Cleanup-Hourly with proper age safeguards. Do NOT use for: mid-session quick saves (use session-checkpoint), skill syncing (use sync-skills.py), brain memory queries (use supabase-sync.py pull), document freshness reviews (use document-lifecycle), resource gap detection (use resource-auditor).
testing
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, passive voice, negative parallelisms, and filler phrases.