← ClaudeAtlas

transactional-emaillisted

Set up, diagnose and unify transactional email across projects — SPF/DKIM/DMARC, MX and inbound mail, Spamhaus/blocklist checks, provider choice (Brevo, Resend, SMTP, Postmark, SES), a single sendEmail() module with one env schema, and per-tenant reputation isolation for multi-tenant SaaS. Use whenever email is being added to a project, when mail is not arriving or landing in spam, when a domain is on a blocklist, or when a product needs to send mail on behalf of its customers.
anginduke-code/transactional-email-skill · ★ 1 · AI & Automation · score 74
Install: claude install-skill anginduke-code/transactional-email-skill
# Transactional Email Email breaks in ways the code never shows you. A send can return `delivered: true` and still be refused three hops later. **Diagnose before you change anything** — run `scripts/diagnose.py` first, every time. Most "our email is broken" reports are a DNS or reputation fact, not a bug. ## The one thing to internalise **Sending and receiving are two different systems.** A relay (Brevo, Resend, SES, Postmark) sends and cannot receive. A mailbox or forwarder (Google Workspace, Zoho, ImprovMX, Cloudflare Email Routing) receives. A domain that only sends looks disposable to filters, and you cannot complete a blocklist-removal request without a working `postmaster@`. Nearly every "which provider should we use?" question is really two questions. ## Start here ```bash python scripts/diagnose.py example.com # DNS + blocklists python scripts/diagnose.py example.com --sending-ip 1.2.3.4 # also check the sending IP python scripts/diagnose.py example.com --scan ./src # also scan code for stub leaks ``` It reports, in severity order: blocklist listings, missing/duplicate SPF, SPF lookup overflow, missing DKIM/DMARC, no MX, missing `postmaster@`/`abuse@`, and dev-stub credential leaks in code. Read [references/interpreting-results.md](references/interpreting-results.md) for what each finding means and the exact fix. Then **prove it with one real send** — a clean `diagnose.py` does not mean mail arrives: ```bash python scripts/send_t