Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

RFCTitle / featureNotes
RFC 5321Simple Mail Transfer ProtocolCore command sequencing and reply codes; null sender and postmaster envelope forms.
RFC 3463 / RFC 2034Enhanced mail system status codesENHANCEDSTATUSCODES; class digit derived from the reply code.
RFC 4954SMTP authentication (AUTH)Submission mode requires AUTH over TLS.
RFC 3207Secure SMTP over TLS (STARTTLS)Pre-TLS buffer discard per §4.2/§6.
RFC 61528-bit MIME transport8BITMIME.
RFC 3030Chunking and binary MIMECHUNKING/BDAT, BINARYMIME.
RFC 1870Message size declarationSIZE.
RFC 2920Command pipeliningPIPELINING; inherent to the sans-io design.
RFC 3461Delivery status notification parametersDSN: RET/ENVID/NOTIFY/ORCPT carried on the envelope.
RFC 3464Delivery status notification report formatFailure DSNs generated by the relay on exhausting the retry schedule.
RFC 6522The multipart/report media typeContainer for both DSN and ARF reports.
RFC 3848ESMTP transmission typeswith keywords in the Received: trace header.
RFC 8601Authentication-Results headerRecords SPF/DKIM/DMARC verdicts on accepted mail.
RFC 7208Sender Policy Framework (SPF)Inbound-relay sender authentication (via the adopted mail-auth).
RFC 6376DomainKeys Identified Mail (DKIM)Verified inbound; signed once on outbound spool entry.
RFC 7489Domain-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 5965Abuse Reporting Format (ARF)message/feedback-report body of each forensic report.
RFC 6591Authentication-failure reporting via ARFThe auth-failure report emitted per DMARC failure.
RFC 7435Opportunistic securityBest-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.

RFCTitle / featureNotes
RFC 3501IMAP4rev1States, mailbox semantics, and the full command set.
RFC 2177IDLEPush notification of mailbox changes.
RFC 6851MOVEAtomic message move.
RFC 3691UNSELECTClose a mailbox without expunging.
RFC 5161ENABLECapability negotiation.
RFC 2342NAMESPACEA single fixed personal namespace.
RFC 4315UIDPLUSUID EXPUNGE, APPENDUID/COPYUID response codes.
RFC 7888Non-synchronizing literals (LITERAL-)Framing lives in the imap-next driver; the capability is advertised here.
RFC 5530IMAP response codesExtended NO/BAD response codes for precise failure signalling.
RFC 4959SASL initial client responseOne-round-trip AUTHENTICATE; SASL-IR is advertised wherever the AUTH= mechanisms are.
RFC 6154SPECIAL-USE mailbox attributesTier 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 8314TLS for IMAPLOGINDISABLED until the connection is protected; implicit TLS is the primary deployment.
RFC 9051IMAP4rev2Not 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.

RFCTitle / featureNotes
RFC 1939Post Office Protocol version 3The AUTHORIZATION → TRANSACTION → UPDATE state machine, plus APOP (§7).
RFC 2449POP3 extension mechanismCAPA, capability limits, extended response codes.
RFC 2595TLS for POP3STLS with pre-TLS buffer discard.
RFC 5034POP3 SASL authenticationThe AUTH command.
RFC 3206POP3 SYS/AUTH response codesAUTH-RESP-CODE.
RFC 6856POP3 support for UTF-8UTF8, 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.

RFCTitle / featureNotes
RFC 4422SASL frameworkMechanism-neutral hooks shared across SMTP/IMAP/POP.
RFC 4616SASL PLAINThe primary wallet-signature mechanism.
RFC 2195CRAM-MD5Challenge/response for clients without PLAIN-over-TLS.
RFC 4422 §5.1SASL EXTERNALIdentity 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.

RFCTitle / featureNotes
RFC 5322Internet Message FormatHeader and message parsing/generation.
RFC 20452049MIME (parts 1–5)Structure, media types, encodings.
RFC 2047MIME encoded-wordsNon-ASCII header field values.
RFC 2231MIME parameter value extensionsContinuations and charset/language in parameters.
RFC 6531Internationalized email addresses (SMTPUTF8)Validated in addr-spec parsing (email_address).

Anti-abuse and transport hardening

RFCTitle / featureNotes
RFC 5782DNS 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.