Transactional email, both directions

Send the mail.
Get the replies back.

rail delivers your notifications, alerts and receipts straight to the recipient's mail server — DKIM-signed, retried on per-domain backoff. Replies, bounces and spam complaints come back to your app as webhooks. No mailbox to poll, no backend to run.

Uptime
45h42m43s
Delivered
86
Rate
0/hr
Live from /stats, every 10s

1  Submit

One connection, authenticated by client certificate. SMTP on port 465, an HTTPS API, or a plain HTML form posted straight from a static site — no backend in between.

2  Deliver

rail resolves MX itself, signs with DKIM and hands the message to the recipient's server. A domain that is refusing mail gets backed off harder; one that recovers gets retried sooner.

3  Return

Replies, bounces and spam complaints arrive on port 25, get matched back to the message that caused them, and POST to your webhook with the original message attached.

Out

smtp.ataca.io:465
S: 220 rail SMTP relay
C: EHLO myservice
C: MAIL FROM:<noreply@ataca.io>
C: RCPT TO:<user@example.com>
C: DATA
C: Subject: Your order shipped
C: ...
C: .
S: 250 OK 01JA5X...

Back

POST your webhook
// a reply arrives on :25, matched to its message
{
  "type": "reply",
  "message_id": "01JA5X...",
  "from": "user@example.com",
  "subject": "Re: Your order shipped",
  "raw_message": "<base64>"
}

One relay, three ways in

Pick whichever your service already speaks.

A service that already has an SMTP library keeps it. A service that would rather POST JSON does that instead. A static site with no backend at all points its contact form at a rail form target and gets the submission as email — with a honeypot, a per-token rate limit and a spam challenge in front of it.

Ways in

SMTP relay on :465, mutual TLS, no password to leak
HTTPS API — POST /v1/send with the same certificate
HTML forms — POST /f/{token} straight from a static site
Agent-ready: OpenAPI, llms.txt and an agents guide are served

What it handles for you

DKIM signing and MX resolution, per recipient domain
Adaptive retry — backoff tuned per domain, not per message
Inbound mail routed to your webhook, with retries of its own
Hard bounces suppressed automatically, per client
Spam complaints parsed, verified and fed back to you
Delivery and open tracking, with a live event stream

Pairs with depot

Attachments are the fastest way to get a message rejected, and a mailbox keeps whatever you send forever. Hand the file to depot, put the expiring link in the mail, and rail sends a message that stays small enough to arrive.

SENT BY RAIL
Your invoice is ready
invoice-4417.pdf
2.4 MB · link expires in 7 days
The mail carries a link, not 3.2 MB of base64.

Sending by the end of the afternoon.

Get a client certificate, point your service at smtp.ataca.io, and rail takes it from there. The dashboard shows you every message it handled.