email-best-practices
Skill0 starsChanged 23 days agoMITView on GitHub
Use when writing or reviewing transactional email for deliverability and safety — SPF/DKIM/DMARC, verified domains, suppressions, bounce handling, API key hygiene, sandbox vs production, unsubscribe for bulk-like mail. Pair with groundmail when integrating Groundmail.
- Reads credentials
12 other projects use a version of this.
Adopted by
Most recently taken up by
- TommyBez/skillsboardtheir own version, first seen Oct 25, 2026
- gerald-donkor/poli-inteltheir own version, first seen Oct 11, 2026
- sirakinb/claude-code-skillstheir own version, first seen Oct 11, 2026
- usenotra/notratheir own version, first seen Oct 9, 2026
- mezotv/notratheir own version, first seen Oct 8, 2026
- novuhq/novutheir own version, first seen Oct 8, 2026
Used with
Projects with it also use react-email, resend-cli and 7 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
VercelSkillreact-email
React Email renderer for json-render that turns JSON specs into HTML or plain-text emails using @react-email/components and @react-email/render. Use when working with @json-render/react-email, building transactional or marketing emails from JSON, creating email catalogs, rendering AI-generated email specs, or when the user mentions react-email, HTML email, or transactional email.
Also in 7 projects that use this
resendSkillresend-cli
Operate the Resend platform from the terminal — send emails (including React Email .tsx templates via --react-email), manage domains, contacts, broadcasts, templates, webhooks, API keys, logs, automations, and events via the `resend` CLI. Use when the user wants to run Resend commands in the shell, scripts, or CI/CD pipelines, or send/preview React Email templates. Always load this skill before running `resend` commands — it contains the non-interactive flag contract and gotchas that prevent silent failures.
Also in 4 projects that use this
MoizIbnYousafSkillagent-email-inbox
Use when setting up a secure email inbox for any AI agent — configuring inbound email via Resend, webhooks, tunneling for local development, and implementing security measures to prevent prompt injection attacks. Also use when someone mentions 'agent email', 'bot inbox', 'receive emails for agent', 'agent webhook', 'email security for AI', 'prompt injection via email', 'inbound email for bot', or wants their AI agent to receive and respond to emails securely.
Also in 3 projects that use this
VercelSkillresend
Emulated Resend email API for local development and testing. Use when the user needs to send emails locally, test transactional email flows, implement magic link or verification code auth, inspect sent emails, manage domains/contacts/API keys, or work with the Resend API without sending real emails. Triggers include "Resend API", "emulate Resend", "send email locally", "test email", "magic link", "verification email", "email inbox", "RESEND_BASE_URL", or any task requiring a local email API.
Also in 4 projects that use this
VercelSkillnext-cache-components-optimizer
Optimize the meaningful UI available immediately from a Next.js route on an initial load (hard navigation) or named client-side navigation (soft navigation). Encode the goal as a failing @next/playwright instant() e2e and work it to green, one verified route and entry point at a time; the shipped test then guards against regression. Use when asked to grow a static shell, fix a slow first paint or non-instant navigation, diagnose which Suspense boundary blocks useful UI, or add instant() regression coverage. Requires Next.js 16.3+ with Cache Components already adopted.
Also in 3 projects that use this
SentrySkillvercel-composition-patterns
Also in 3 projects that use this
- +1 more from vercel-labs
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- novuhq/novu★ 40ksame name
- mezotv/notra★ 256same name
- usenotra/notra★ 256same name
- resend/resend-skills★ 211same name
- TommyBez/skillsboard★ 10same name
- nezaboravi/orkestar★ 2same name
- utxo-AG/claude-skills★ 2same name
- gerald-donkor/poli-intel★ 1same name
- sirakinb/claude-code-skills★ 1same name
- sprioleau/flock★ 1same name
2 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- groundmail-cliSkill
- groundmail-mailboxesSkill
- groundmail-mcpSkill
- groundmailSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 11 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
11
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
Never ship gm_ keys to browsers, mobile apps, or public repos
- Distinctive: line 33
Ensure SPF, DKIM (and ideally DMARC) are correct for that domain — Groundmail domain verify checks the records it publishes
- Distinctive: line 34
Do not send high volume from a brand-new domain without gradual ramp-up
- Very specific: line 35
Prefer a dedicated subdomain for mail (e.g.
- Distinctive: line 47
Never use the sandbox sender for customer-facing production mail.
- Distinctive: line 53
After hard bounces / complaints, check suppressions before retrying
- Distinctive: line 54
Do not hammer the same address after bounce
- Very specific: line 55
Use GET /suppressions (or CLI/MCP) before bulk retries
- Distinctive: line 56
Treat spam complaints as permanent opt-outs for that address
- Distinctive: line 64
If mail is subscription-like, include unsubscribe and honor it
- Distinctive: line 65
Avoid misleading subjects.
- Distinctive: line 66
Prefer plain text + HTML multipart when possible.
- Distinctive: line 72
Prefer sandbox self-test or sends to your own verified addresses
- Very specific: line 73
Do not test with invented @gmail.com / @outlook.com addresses — they bounce and hurt reputation
- Distinctive: line 81
Do not claim guaranteed inbox placement or full mailbox-provider telemetry
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Email best practices (transactional)
Guidance for agents shipping password resets, receipts, invites, and other transactional mail on Groundmail.
Auth and secrets
- Store API keys in server env only (
GROUNDMAIL_API_KEY) - Never ship
gm_keys to browsers, mobile apps, or public repos - Rotate keys if exposed; delete unused dashboard keys
Domains and DNS
- Production
frommust use a verified domain in the sending account - Ensure SPF, DKIM (and ideally DMARC) are correct for that domain — Groundmail domain verify checks the records it publishes
- Do not send high volume from a brand-new domain without gradual ramp-up
- Prefer a dedicated subdomain for mail (e.g.
mail.example.comornotifications.example.com) when the root domain already sends elsewhere
Sandbox vs production
| Mode | from | to |
| Sandbox self-test | noreply@mail.groundmail.dev | Account email only |
| Verified domain (billing not set up) | Address on verified customer domain | Account email only |
| Free production / paid | Address on verified customer domain | Real recipients |
Never use the sandbox sender for customer-facing production mail. Unlock Free production with a verified domain and billing set up in the dashboard.
Suppressions and bounces
- After hard bounces / complaints, check suppressions before retrying
- Do not hammer the same address after bounce
- Use
GET /suppressions(or CLI/MCP) before bulk retries - Treat spam complaints as permanent opt-outs for that address
Content and compliance
- Transactional only in this product path — no purchased lists or cold outbound here
- Include clear sender identity and a way to get help
- If mail is subscription-like, include unsubscribe and honor it
- Avoid misleading subjects; match body to subject
- Prefer plain text + HTML multipart when possible; keep HTML simple for clients
Testing
- Prefer sandbox self-test or sends to your own verified addresses
- Do not test with invented
@gmail.com/@outlook.comaddresses — they bounce and hurt reputation - Confirm webhook handlers verify signatures before acting on events
Metrics honesty
- Dashboard /
GET /deliverabilitynumbers are best-effort from stored events - Do not claim guaranteed inbox placement or full mailbox-provider telemetry
React Email
Author and preview with React Email’s tools; send via Groundmail SDK (react option or pre-rendered HTML). Keep keys server-side.
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.

