The sending stack.

A clean REST API, drop-in SMTP, typed SDKs for Node and Python, templates, and signed webhooks. Six doors into one engine.

Free sandbox to integrate · Production from $3/month

Pixel-art dispatch scene: six labelled intake lanes — API, SMTP, CLI, FORMS, MCP, AGENT — converging into one bright rail where an envelope-plane lifts off toward a distant letterbox
#01 — The doors

The same send, whatever you write.

cURL, Node, Python, Go, PHP, Ruby — or no code at all over SMTP. Attachments, scheduling, batch: everything rides one endpoint. Switch the door; nothing else changes.

curl -X POST https://api.drin.run/v1/emails \
  -H "Authorization: Bearer drin_k_…" \
  -d '{
    "from":        "billing@yourapp.com",
    "to":          "sarah@gmail.com",
    "subject":     "Your June invoice",
    "html":        "<p>Attached.</p>",
    "attachments": [{ "filename": "invoice.pdf", "content": "…" }],
    "sendAt":      "2026-06-13T09:00:00Z"
  }'

# one or many: POST /v1/emails/batch takes a list
# of messages and returns one id per message.
#02 — SMTP

Keep your stack. Change one host.

Anything that speaks SMTP speaks Drin. Point your framework's mailer at our relay and every send shows up in the same activity feed, fires the same webhooks, and obeys the same suppressions — zero code changes.

SMTP setup guide
HOSTsmtp.drin.run
PORT587 (STARTTLS) · 465 (TLS)
USERdrin
PASS<your API key>
Drop into Nodemailer, ActionMailer, Django, Laravel, WordPress — zero code changes. Same logs, same webhooks, same dashboard.
#03 — Templates

Write once. Send forever.

Versioned, reusable content with merge fields. Author in the dashboard, send by id from the API, the CLI, or an agent — the content team edits copy without a deploy.

Template reference
welcome — v4{{first_name}} {{cta_url}}
receipt — v12{{order_id}} {{total}} {{items}}
reset — v2{{reset_url}} {{expires_in}}
invoice — v7{{month}} {{amount_due}}
#04 — Events

Know what happened to every message.

Whichever door mail leaves by, events come back on one wire — signed, ordered, and mirrored in the dashboard activity feed.

DRIN POSTAGE · SERIES 04 — EVENTSSHEET OF 3
04.1Signed payloads

Every webhook is HMAC-signed so your server can verify it came from Drin before acting on it.

04.2Every transition

sent, delivered, bounced, complained, received — each state change posts to your endpoint as it happens.

04.3Suppressions follow

Hard bounces and complaints land on your suppression list automatically — the next send already knows.

activity — live feed
12:04:18  email.sent        em_8f2…  sarah@gmail.com
12:04:19  email.delivered   em_8f2…  gmail-smtp-in
12:05:02  email.sent        em_8g1…  tom@outlook.com
12:05:04  email.bounced     em_8g1…  550 no such user
12:05:04  → tom@outlook.com suppressed automatically
#05 — Works with

Your framework already speaks it.

NodemailerNext.jsDjangoRails / ActionMailerLaravelWordPressSpringanything with SMTP
Integration guides