Standards and RFC coverage
SithBit reinvents email’s economics — sender-paid postage settled on-chain, addresses you own outright — but it deliberately reinvents almost nothing about the wire. Your existing mail client already speaks SMTP, IMAP, and POP3, and SithBit’s servers speak them back, to the letter of the specifications that have carried email for four decades. That is the whole point: you get a spam economy that finally works without throwing away Thunderbird, Outlook, Apple Mail, or the mobile client already on your phone.
Standards-completeness matters more for email than for almost any other protocol. Email’s interoperability is adversarial — a message crosses servers written by strangers, in languages you’ll never see, and a single misread reply code or dropped capability turns into a silently lost message or an open relay. So the reference servers don’t implement “enough of” each protocol to pass a smoke test; they implement the published grammar, advertise exactly the capabilities they honor, and reject out-of-sequence commands structurally rather than hoping clients behave. Where a specification is only partially implemented, this page says so plainly in the Notes column — no overclaiming.
The tables below enumerate every RFC each SithBit
server and subsystem implements, grouped by the component that owns it. Each links to the canonical
text at the RFC Editor. If you are
weighing a from-scratch server or an existing MTA
against simply running sithbitd, this is the coverage
you’d be matching.
SMTP — sending and relaying mail
The SMTP surface is the sans-io smtp_session state machine (the wire
grammar and its extensions) driven by the smtp_server binary (STARTTLS,
SASL, delivery, and the SithBit sender-authentication policies). Enhanced
status codes are structural: the class digit is derived from the reply code so
a mismatch is unrepresentable.
| RFC | Title / feature | Notes |
|---|---|---|
| RFC 5321 | Simple Mail Transfer Protocol | Core command sequencing and reply codes; null sender and postmaster envelope forms. |
| RFC 3463 / RFC 2034 | Enhanced mail system status codes | ENHANCEDSTATUSCODES; class digit derived from the reply code. |
| RFC 4954 | SMTP authentication (AUTH) | Submission mode requires AUTH over TLS. |
| RFC 3207 | Secure SMTP over TLS (STARTTLS) | Pre-TLS buffer discard per §4.2/§6. |
| RFC 6152 | 8-bit MIME transport | 8BITMIME. |
| RFC 3030 | Chunking and binary MIME | CHUNKING/BDAT, BINARYMIME. |
| RFC 1870 | Message size declaration | SIZE. |
| RFC 2920 | Command pipelining | PIPELINING; inherent to the sans-io design. |
| RFC 3461 | Delivery status notification parameters | DSN: RET/ENVID/NOTIFY/ORCPT carried on the envelope. |
| RFC 3464 | Delivery status notification report format | Failure DSNs generated by the relay on exhausting the retry schedule. |
| RFC 6522 | The multipart/report media type | Container for both DSN and ARF reports. |
| RFC 3848 | ESMTP transmission types | with keywords in the Received: trace header. |
| RFC 8601 | Authentication-Results header | Records SPF/DKIM/DMARC verdicts on accepted mail. |
| RFC 7208 | Sender Policy Framework (SPF) | Inbound-relay sender authentication (via the adopted mail-auth). |
| RFC 6376 | DomainKeys Identified Mail (DKIM) | Verified inbound; signed once on outbound spool entry. |
| RFC 7489 | Domain-based Message Authentication (DMARC) | Full evaluation and disposition (alignment, p=reject/p=quarantine, pct sampling) plus §7.2 aggregate (rua) and §7.3 failure (ruf) reporting. Selectable via sender_auth = "dmarc". |
| RFC 5965 | Abuse Reporting Format (ARF) | message/feedback-report body of each forensic report. |
| RFC 6591 | Authentication-failure reporting via ARF | The auth-failure report emitted per DMARC failure. |
| RFC 7435 | Opportunistic security | Best-effort TLS posture for MX-to-MX relay. |
IMAP — reading and managing mail
The IMAP surface is the sans-io imap_session semantics core over the typed
imap-types AST, driven by imap_server over the imap-next flow layer. The
baseline is IMAP4rev1; the rev2 extensions SithBit implements are advertised
individually rather than by claiming rev2 as a whole.
| RFC | Title / feature | Notes |
|---|---|---|
| RFC 3501 | IMAP4rev1 | States, mailbox semantics, and the full command set. |
| RFC 2177 | IDLE | Push notification of mailbox changes. |
| RFC 6851 | MOVE | Atomic message move. |
| RFC 3691 | UNSELECT | Close a mailbox without expunging. |
| RFC 5161 | ENABLE | Capability negotiation. |
| RFC 2342 | NAMESPACE | A single fixed personal namespace. |
| RFC 4315 | UIDPLUS | UID EXPUNGE, APPENDUID/COPYUID response codes. |
| RFC 7888 | Non-synchronizing literals (LITERAL-) | Framing lives in the imap-next driver; the capability is advertised here. |
| RFC 5530 | IMAP response codes | Extended NO/BAD response codes for precise failure signalling. |
| RFC 4959 | SASL initial client response | One-round-trip AUTHENTICATE; SASL-IR is advertised wherever the AUTH= mechanisms are. |
| RFC 6154 | SPECIAL-USE mailbox attributes | Tier 1: a name heuristic marks the well-known top-level names — Sent, Trash, Drafts, Junk (also Spam), Archive — with their \Sent-style attributes in LIST responses, case-insensitively. The LIST (SPECIAL-USE) selection filter and CREATE-SPECIAL-USE are not supported. |
| RFC 2595 / RFC 8314 | TLS for IMAP | LOGINDISABLED until the connection is protected; implicit TLS is the primary deployment. |
| RFC 9051 | IMAP4rev2 | Not advertised. rev1 is the baseline; the rev2 extensions above are advertised individually. ESEARCH, LIST-EXTENDED, and CONDSTORE/QRESYNC are deferred. |
POP3 — simple mailbox download
The POP3 surface is the sans-io pop3_proto typestate machine driven by
pop_server. Commands invalid for the current session state are
unrepresentable rather than merely rejected at runtime.
| RFC | Title / feature | Notes |
|---|---|---|
| RFC 1939 | Post Office Protocol version 3 | The AUTHORIZATION → TRANSACTION → UPDATE state machine, plus APOP (§7). |
| RFC 2449 | POP3 extension mechanism | CAPA, capability limits, extended response codes. |
| RFC 2595 | TLS for POP3 | STLS with pre-TLS buffer discard. |
| RFC 5034 | POP3 SASL authentication | The AUTH command. |
| RFC 3206 | POP3 SYS/AUTH response codes | AUTH-RESP-CODE. |
| RFC 6856 | POP3 support for UTF-8 | UTF8, and LANG in both AUTHORIZATION and TRANSACTION states. |
Authentication (SASL)
SASL mechanisms are shared by all three protocol servers through
server_common. Wallet-signature SASL PLAIN is verified against the connecting
address with no stored secret; CRAM-MD5/APOP serve clients limited to
challenge-response.
| RFC | Title / feature | Notes |
|---|---|---|
| RFC 4422 | SASL framework | Mechanism-neutral hooks shared across SMTP/IMAP/POP. |
| RFC 4616 | SASL PLAIN | The primary wallet-signature mechanism. |
| RFC 2195 | CRAM-MD5 | Challenge/response for clients without PLAIN-over-TLS. |
| RFC 4422 §5.1 | SASL EXTERNAL | Identity proven at the TLS layer by a client certificate. |
The LOGIN mechanism (widely deployed, never standardized as an RFC) is also supported for legacy clients. DIGEST-MD5 and NTLM are deliberately dropped.
Message format and abuse-report handling
Message parsing and generation are adopted rather than hand-rolled — every
consumer names one set of versions through mail_message, which itself owns
only the RFC 5321 envelope layer (source routes, the null reverse-path, the
domainless postmaster recipient) that the format crates don’t model.
| RFC | Title / feature | Notes |
|---|---|---|
| RFC 5322 | Internet Message Format | Header and message parsing/generation. |
| RFC 2045–2049 | MIME (parts 1–5) | Structure, media types, encodings. |
| RFC 2047 | MIME encoded-words | Non-ASCII header field values. |
| RFC 2231 | MIME parameter value extensions | Continuations and charset/language in parameters. |
| RFC 6531 | Internationalized email addresses (SMTPUTF8) | Validated in addr-spec parsing (email_address). |
Anti-abuse and transport hardening
| RFC | Title / feature | Notes |
|---|---|---|
| RFC 5782 | DNS blocklists (DNSBL) | Address-reversal query conventions for the connection blocklist. |
Beyond these wire standards, the on-chain layer is where SithBit’s own
contribution lives: the MailInstruction ABI, PDA derivations, and sealed-box
encryption described in the Program & PDA reference
and How sealed-box encryption works. Any server
that speaks the RFCs above and those on-chain conventions is a first-class
participant — see
Protocol conformance for custom mail servers.