custom-domain-email
Skill1 starsChanged 37 days agoMITView on GitHub
Use when own-domain email breaks or needs setup.
In this repository34 other files it gives its agents.
- agent-branch-integrationSkill
- agent-config-syncSkill
- blocked-page-recoverySkill
- brand-retrofitSkill
- clickable-concept-prototypeSkill
- codebase-inspectionSkill
- commit-workSkill
- contrastive-refactor-demoSkill
- delegate-coding-taskSkill
- delegated-agent-supervisionSkill
- delivery-verificationSkill
- domain-dns-cutoverSkill
- first-run-onboardingSkill
- frontend-render-performanceSkill
- github-pages-deploySkill
- hermes-cron-jobsSkill
- hermes-messaging-channelsSkill
- hermes-on-oracle-free-tierSkill
- hermes-provider-credentialsSkill
- isolated-worktree-testingSkill
- measurement-validitySkill
- multi-layout-previewSkill
- new-project-scaffoldingSkill
- parallel-agent-fanoutSkill
- premortemSkill
- recall-and-claim-verificationSkill
- single-source-training-materialsSkill
- stakeholder-decision-elicitationSkill
- static-site-vps-deploySkill
- supabase-auth-debuggingSkill
- windows-background-process-hygieneSkill
- windows-desktop-automationSkill
- windows-performance-tuningSkill
- worktree-analysisSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 3 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 37
Read the NS block first. Records must be edited at the nameserver host (Vercel / Cloudflare / Netlify / etc.), not the registrar.
- Very specific: line 47
Ask (one clarify call, all questions together):
- Distinctive: line 54
Hard budget, or is a few R$/month acceptable?: Ask explicitly. Do not assume "free" forever.
- Distinctive: line 121
DNS last: Create and verify the mailbox first, then move MX.
- Very specific: line 127
Start p=none while validating, then tighten.
- Distinctive: line 158
Treating a suppressed address as recoverable: If a sender suppressed the address, changing mail providers does not help.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Custom Domain Email
When to Use
- "I want to send/receive email with my domain"
- "Emails from
<sender>never arrive at my domain" - Choosing a mail provider under a cost constraint (free / near-free tiers)
- Migrating MX between providers without dropping mail
- Any MX / SPF / DKIM / DMARC record work
Supporting files:
references/provider-free-tiers.md— hard limits and gating of free/cheap tiers (ImprovMX, Zoho, Cloudflare, Google nonprofits)references/deliverability-diagnosis.md— decision tree for "mail not arriving", suppression lists, worked casescripts/mail-dns-audit.sh— re-runnable probe: NS/MX/SPF/DMARC/DKIM for a domain + a sender's policy
Step 0 — Find where DNS ACTUALLY lives (never skip)
The registrar and the DNS host are frequently different. Users say "my domain is at
<registrar>" and mean registration only.
bash scripts/mail-dns-audit.sh example.comRead the NS block first. Records must be edited at the nameserver host
(Vercel / Cloudflare / Netlify / etc.), not the registrar. Changing NS at the
registrar to "get access" will take the website down with it.
Real example: a .com.br registered at registro.br with NS delegated to
ns1.vercel-dns.com — all MX/TXT work happens in the Vercel dashboard, and
registro.br is irrelevant to email.
Step 1 — Establish the requirement before proposing anything
Ask (one clarify call, all questions together):
- Send, receive, or both? Many free tiers are receive-only. This alone eliminates most options.
- Must it land in an existing inbox (Gmail) or is a separate mailbox OK? This is the decisive tradeoff — see Step 2.
- How many addresses? Free tiers cap at 2–5.
- Hard budget, or is a few R$/month acceptable? Ask explicitly. Do not assume "free" forever; state the paid number once, with the exact figure, then respect the answer. (~US$1/user/month buys IMAP, which is often the whole ask.)
Step 2 — Forwarding vs real mailbox (the load-bearing decision)
| Forwarding (ImprovMX, Cloudflare Email Routing) | Real mailbox (Zoho, Migadu, Purelymail) | |
| Mechanism | MX → relay → your Gmail | MX → your actual mailbox |
| Free tier sends? | Usually no | Yes, DKIM-signed |
| Unified in Gmail | Yes | Only with IMAP/POP (usually paid) |
| Survives strict senders | Structurally fragile | Yes |
The structural problem with forwarding: on relay, SPF breaks (the relay IP is
not in the original sender's SPF). Only the surviving original DKIM signature can
satisfy DMARC. Any header/encoding change in transit invalidates it. Against a
sender publishing p=reject, the result is a silent drop or hard bounce — no
spam folder, no NDR.
Consequence to state plainly to the user: forwarding is not "slightly riskier"
for strict senders — a real mailbox makes that failure mode structurally
impossible, which is different from less likely. Senders on p=none pass
through broken forwarding unnoticed, which is why "everything arrives except
<one sender>" is the classic signature.
Second-order damage: each such bounce can put the address on the sender's
suppression list. Then nothing is sent at all, forever. See
references/deliverability-diagnosis.md.
Step 3 — Verify availability BEFORE recommending a tier
Free tiers are gated in ways the marketing page hides. Check gating before recommending, not after the user hits a paywall. Known axes:
- Data center / region (Zoho free = US, IN, EU only; permanent at signup)
- Country (Zoho free discontinued in Canada, Saudi Arabia)
- Org type (Google for Nonprofits excludes government entities, schools, universities, hospitals — kills most public-university project use)
Pitfall from a real session: recommended "Zoho free, confirmed active" from generic 2026 sources, then the user's own screenshot showed only paid plans because their signup landed in a non-free DC. Stating a free tier exists is not the same as confirming this user can get it.
Step 4 — DNS records
Get the exact values from the provider's console — they are per-account and per-data-center. Never copy from a tutorial.
Shape (Zoho, EU DC — substitute your own):
| Type | Name | Value | Priority |
| MX | @ | mx.zoho.eu | 10 |
| MX | @ | mx2.zoho.eu | 20 |
| MX | @ | mx3.zoho.eu | 50 |
| TXT | @ | v=spf1 include:zoho.eu ~all | — |
| TXT | zoho._domainkey | v=DKIM1; k=rsa; p=… (console generates) | — |
Zoho MX hostnames differ per DC and resolve to different IPs:
mx.zoho.com / mx.zoho.eu / mx.zoho.in. Using .com values on an EU
account breaks receiving entirely.
Rules:
- Exactly one SPF record. Replacing providers means editing the existing TXT, not adding a second. Two SPF records = validation failure.
- MX is domain-wide. There is no clean per-address split; cutover is atomic.
- DNS last. Create and verify the mailbox first, then move MX. The old provider keeps working until then; moving MX early creates a dead window.
- Propagation: MX 1–2 h, TXT up to 48 h.
DMARC
Start p=none while validating, then tighten. Anti-pattern seen in the wild:
rua=mailto:admin@thedomain-with-the-delivery-problem.comReports are mailed into the broken system. Point rua at an address on a
different, known-working domain.
Step 5 — Verify
bash scripts/mail-dns-audit.sh example.comThen send a real message in and out. "Records verified in the console" is not delivery confirmation.
Pitfalls
- Editing DNS at the registrar when NS points elsewhere. Step 0 exists for this.
- Assuming a free tier is universally available. Region/DC/org-type gating is common.
- Copying MX values from a tutorial. They are account- and DC-specific.
- Building a DMARC theory before establishing where the message stopped. A broken-forward theory predicts delivered-then-vanished. If the message never reached the relay at all, that theory is dead — the cause is upstream (sender never sent, or refused at connection). Ask "does it appear in the relay's log?" before theorizing. Getting this backwards wastes a whole diagnostic round.
- Trusting an empty relay log. ImprovMX's
Minimumprivacy level scrambles sender and subject, so searching by sender name returns nothing even for mail that did arrive. Raise logging to Full and search by timestamp, not sender. - Treating a suppressed address as recoverable. If a sender suppressed the address, changing mail providers does not help. The address must be replaced.
- Reusing the account/email that landed on the wrong tier or DC. Signup-time choices (Zoho DC) are permanent; a fresh signup needs a fresh address.
- Assuming the account email can be changed later. Several providers (Anthropic among them) do not allow it at all. Warn the user before they commit an address to a service.
Verification checklist
NSidentified; edits going to the right dashboard- Exactly one SPF TXT at the root
- MX hostnames copied from this account's console
- DKIM selector verified and enabled in the console
- DMARC
ruaon a different, working domain - Real inbound test received
- Real outbound test sent and passing SPF+DKIM at the recipient
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

