Send a transactional email through Drin reliably. Use when the user or agent needs to send an email (notification, receipt, OTP, alert, password reset, reply) via the Drin email API — covers picking a verified sending domain, composing the message, sending it, and handling suppressed/rate-limited errors. Works through the @drin00/mcp tools, the drin CLI, the drin SDK, or the raw /v1 REST API.
Security
drin-email-best-practices
Try itGet transactional email deliverability right with Drin — authenticate the sending domain (SPF/DKIM/DMARC), stay under bounce/complaint limits, honor suppressions, and include one-click unsubscribe where required. Use when setting up a sending domain, diagnosing why mail lands in spam or bounces, deciding sending volume/warmup, or reviewing an email program for compliance and reputation.
What it does
Get transactional email deliverability right with Drin — authenticate the sending domain (SPF/DKIM/DMARC), stay under bounce/complaint limits, honor suppressions, and include one-click unsubscribe where required. Use when setting up a sending domain, diagnosing why mail lands in spam or bounces, deciding sending volume/warmup, or reviewing an email program for compliance and reputation.
The skill document
Email deliverability & compliance with Drin
Reputation is everything. One sloppy send can tank an entire domain's inbox placement. Follow these before and during any sending program.
1. Authenticate the domain (do this first)
Email is only trusted when the sending domain is authenticated.
- Add the domain:
add_domain/POST /v1/domains/ dashboard. Drin returns the exact DNS records to publish. - Publish all returned records:
- DKIM — Drin signs with the domain's own key (records provided). This is what makes the mail cryptographically yours.
- SPF / MAIL FROM — authorizes the sending path.
- DMARC — start at
p=noneto monitor, then move top=quarantine→p=rejectonce aligned and clean. Publish arua=to receive reports.
- Confirm verification:
get_domain/GET /v1/domains/:idand check each record'sverified: true. Do not send real mail until the domain is verified.
Prefer a subdomain for sending (e.g. mail.acme.com / notifications.acme.com)
so transactional reputation is isolated from your root domain's other mail.
2. Stay under the hard limits
Mailbox providers (and Drin's own circuit breaker) watch these rates. Crossing them throttles or suspends sending:
- Bounce rate < 4% (aim < 2%). High bounces = bad list hygiene.
- Complaint (spam) rate < 0.1% (aim < 0.05%). High complaints = unwanted mail.
Monitor continuously with get_metrics / GET /v1/metrics. If a rate climbs,
stop and investigate — don't keep sending.
3. Honor suppressions — never bypass them
Drin automatically suppresses an address after a hard bounce or a spam complaint,
and refuses (409 suppressed) further sends to it. This protects your
reputation. Rules for an agent:
- Never "retry around" a suppression or strip it to force a send.
- Treat unsubscribe / "stop emailing me" requests as
add_suppression. - Inspect with
list_suppressions; onlyremove_suppressionon a genuine, verified opt-back-in.
4. List hygiene & content
- Send to addresses that opted in or that you have a transactional relationship with. Don't email purchased/scraped lists.
- Validate addresses at capture time; don't send to obviously invalid ones.
- Keep a real
textpart, a clearfromname, a truthful subject (no clickbait/ALL CAPS/excessive emoji), and a visible physical identity where required. - Match the
fromdomain to the brand the recipient expects (alignment).
5. Unsubscribe (bulk / marketing-adjacent mail)
For anything beyond strictly 1:1 transactional mail, include a working
unsubscribe. Drin supports RFC 8058 one-click unsubscribe and a hosted
/unsubscribe flow — include the unsubscribe link/headers and honor opt-outs
immediately (they become suppressions). Transactional receipts/OTPs/password
resets generally don't need an unsubscribe, but must not contain marketing.
6. Warm up new domains/volume
A brand-new domain has no reputation. Ramp gradually (start with low daily volume to your most engaged recipients, increase over days/weeks) rather than blasting from day one. Drin's per-tenant trust engine ramps new senders automatically — don't try to defeat it; let reputation build.
Quick checklist before a campaign or new integration
- Domain verified (
get_domainshows DKIM/SPF/DMARCverified: true). - DMARC at least
p=nonewithrua=reporting. - Sending from a subdomain dedicated to this mail stream.
-
textpart present; subject honest; from-name set. - Recipients opted in / transactional; list cleaned.
- Unsubscribe present for non-1:1 mail.
- Baseline
get_metricscaptured; bounce/complaint alerts in mind.
Related skills
Build a transactional HTML email that renders correctly across Gmail, Outlook, and Apple Mail, with a plain-text alternative and dark-mode support. Use when writing or editing the HTML/text body of an email, or creating a reusable Drin template with variables. Covers the table-based layout rules, inlined styles, bulletproof buttons, preheader, and Drin's {{handlebars}} variable/section syntax.
Run an autonomous email inbox with Drin — receive inbound email on a domain, read conversation threads, and reply in-thread. Use when building or operating an agent that must read and respond to email (support triage, scheduling, an "email me to do X" interface), set up inbound receiving, test the receive pipeline, or process new inbound messages and act on them.
Use when Codex, Hermes, OpenClaw, Claude Code, Cowork, or another AI agent needs to plan, review, implement, audit, or improve email work focused on inbox pl...
Use when the user asks to "run a deliverability pre-flight before I send", "check my SPF/DKIM/DMARC/BIMI", "why am I landing in spam / promotions", or "score...
Triage, categorize, and conquer email overload. Classifies emails by urgency, generates quick replies, detects newsletters for bulk unsubscribe, and produces daily digests. Use when facing an overflowing inbox or wanting to maintain inbox zero.