EMAIL INFRASTRUCTURE, NOT HOMEWORK

Email your app can actually trust.

Send, receive, and maximize inbox placement with one API key. SPF, DKIM, DMARC and IP warm-up are handled for you. Score an email before you send it. Free to start — and we say yes to senders the big providers ban.

Get your API key — free
# Send your first email in 30 seconds
curl https://app.getrainmail.com/api/send \
  -H "Authorization: Bearer rk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "you@yourcompany.com",
    "to":   "customer@example.com",
    "subject": "Welcome aboard",
    "html": "<p>Thanks for signing up.</p>"
  }'

Why build on Rainmail

📧 You don’t build deliverability

SPF, DKIM, DMARC, IP warm-up and daily blocklist monitoring — done for you. Stop losing weeks to inbox placement.

📥 Send and receive

Most APIs only send. Point your MX at us and we POST parsed inbound mail straight to your webhook.

✅ We say yes

New, non-US, “high-risk,” or rebuilding? You’re welcome here — on your own dedicated IP, isolated from everyone else.

PRICED FOR BUILDERS

Cheaper than what you pay now.

Under Amazon SES per 1,000 sends — and the dedicated IP they bill $25–90/mo extra for is included. The legacy stacks are pricey, slow to set up, and make you own deliverability. Rainmail hands you the outcome. You ship; we handle the hard part.

See pricing →

Quickstart

Install the SDK, create a key in your dashboard (Developers tab), then send.

# Install — works today (clean "npm install rainmail" registry name coming)
npm install https://app.getrainmail.com/sdk/rainmail-node.tgz
pip install https://app.getrainmail.com/sdk/rainmail-python.tar.gz
// Node
const res = await fetch("https://app.getrainmail.com/api/send", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.RAINMAIL_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ from, to, subject: "Welcome", html: "<p>Hi</p>" }),
});
# Python
import requests
requests.post("https://app.getrainmail.com/api/send",
  headers={"Authorization": f"Bearer {KEY}"},
  json={"from": sender, "to": to, "subject": "Welcome", "html": "<p>Hi</p>"})

API Reference

Base URL https://app.getrainmail.com · Auth: Authorization: Bearer rk_live_…

POST/api/sendlive

Send one email. The from must be on a domain you’ve verified.

fromSender address on your verified domain. Required.
toRecipient address. Required.
subjectSubject line.
htmlHTML body. (or text for plain text)
from_nameDisplay name, optional.
reply_toReply-To address, optional.

Returns { "ok": true, "sent": true } · errors carry a code (e.g. RM-S01 unverified domain).

POST/api/inboxing/scorelive

Score an email before you send it — the one thing no other email API gives you.

subjectSubject to grade.
html / bodyMessage body.
fromOptional — adds SPF/DKIM/DMARC + reputation checks for that domain.

Returns { "verdict":"green|amber|red", "score":0-100, "checks":[…] }.

GET/api/keys  POST/api/keys/createlive

Create and revoke API keys (also one-tap in the dashboard Developers tab).

POST/api/webhooks/addlive

Get notified on events: delivered, bounced, replied, complained. We POST the event JSON to your URL.

InboundMX → your webhooklive

Point your domain’s MX at Rainmail and register a webhook for the inbound event. We parse every incoming email and POST it to your URL (signed with your whsec_ secret) — your app receives, not just sends.

// Rainmail POSTs this to your webhook URL on every inbound email
{
  "event": "inbound",
  "data": {
    "to":      "app@yourdomain.com",
    "from":    "sender@example.com",
    "subject": "Hello",
    "text":    "the message body",
    "html":    "<p>the message body</p>",
    "message_id": "<...>"
  }
}
THE FEATURE NO ONE ELSE HAS

Know if it’ll land — from your code

Pipe any message through the Inboxing Score before you send. Gate your own sends on it. Catch spam-foldering before your users ever feel it.

const s = await fetch("https://app.getrainmail.com/api/inboxing/score", {
  method:"POST", headers:{ "Content-Type":"application/json" },
  body: JSON.stringify({ subject, html })
}).then(r => r.json());
// => { verdict: "green", score: 96, checks: [...] }

How Rainmail compares

Honest, not hype — the same job, combined in one place, at a lower price, with things they simply don’t offer.

 RainmailAmazon SESSendGridResend
Price per 1,000 sends≤ SES~$0.10plan-based, higherplan-based, higher
Dedicated IPIncluded+$24.95/mo+$30–90/mohigher tiers
Real mailbox on your domain (read + send)
Receive inbound into your appsetup-heavylimited
Deliverability managed for youyou do itpartialpartial
Score an email before you send
Says yes to new / non-US / “high-risk”often suspendsoften suspendsvaries
Sovereign — your IP, your data, no ad-scantheir infratheir infratheir infra

Where they lead today: brand maturity, polished official SDKs, and proven hyperscale. We’re closing that gap — SDKs and a published free tier are next.

Coming next

Built on the live API above — shipping in this order.

📦 Official registry names

Node + Python SDKs work today (install above). The clean npm install rainmail / pip install rainmail names are reserved — publishing soon.

🎉 Free tier — live

100 emails a day, free. No card, no sales call — sign up, grab a key, build. Upgrade only when you scale.

🔒 Sovereign

Your domain, your dedicated IP, your data — never ad-scanned, fully portable.

Send your first email before you finish reading.

Grab a key, paste the cURL above, done.

Get your API key — free
Rainmail — a service of Doc Norrie Legacy Holdings, LLC. Sovereign email infrastructure: send, receive, host, and manage your deliverability. Home · Dashboard · Pricing