The edge appliance from docs/spec/features/relay.md, inbound side:
- join, run, status and reset; INBUXA_RELAY_JOIN_TOKEN joins a
container on its first run (RL-2, RL-8, RL-9, RL-10)
- the link: TLS 1.3 with a client certificate required and chained to
the pinned downstream CA, else a TLS alert and nothing more (RL-5,
RL-6); JMAP over HTTP/1.1 and RFC 8887 WebSocket with push; uploads
and downloads
- the JMAP methods: Relay/join, get, set; RecipientDomain and Recipient
sync with Recipient/replace; Inbound get, query, changes, claim, set;
RelayEvent get, changes, set
- the door on port 25, closed until the first settings and recipient
set: real recipients only (RL-1), no AUTH or relaying (RL-4), per-IP
limits, early talkers dropped, STARTTLS, DSN parameters passed down
- the spool: sealed to the downstream as the message arrives and
fsynced before 250 (RL-21), leases per connection (RL-15), held mail
expiry, 452 when 90% full
- live mode: the SMTP reply waits for the downstream's verdict, and
falls back to held after liveVerdictTimeout (RL-12, RL-13)
An end-to-end test drives it over real sockets as a downstream would.
Release build: 5.4 MB; 6.3 MB resident when idle.
Not here yet: outbound (phase 4), DNSBL zones, Relay/upgrade, the
static musl build and image (RL-31), and the server side.