Visual RFC.
ALL RFCs / RFC 5233
Read the RFC ↗
RFC 5233 / SIEVE SUBADDRESSES

Distinguish missing, empty and compared details

03

No encoded detail is different from a separator encoding a zero-length detail.

RFC 5233 · § 4EXAMPLE
4 / 4
Distinguish missing, empty and compared detailsThe same detail SIEVE and key sieve compare true under the default ASCII casemap and false under octet comparison. This changes comparison rules, not identity or address spelling.Missing detail is different from empty detailSame selected value: SIEVESame :is key: sievei;ascii-casemapi;octettruefalseComparison case rules differNot a claim of mailbox identityRFC5233 · chapter 3 · state 4 · offline example
04
Choose the comparator explicitly

Both tests use the same selected value and :is match type; only the comparator differs. This is not mailbox-identity normalization.

Source for this drawing: RFC 5233 · Read RFC section 4 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A message needs an address.

Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

KEY POINT

A missing detail fails all keys; an encoded empty detail is a real empty value.

  • For ken@example.org under the chosen plus scheme, no detail is encoded. :user therefore selects the entire local-part ken, equivalent to :localpart. :detail fails to match any specified key, including an empty key. An absent detail is not silently converted into an empty comparison value (§4).
  • For ken+@example.org in a site that allows this encoding, the separator encodes a zero-length detail. :detail resolves to the empty value "". A :is comparison with key "" succeeds. The drawing compares two separate inputs, not a claim that inserting a separator is a provider-supported address-creation operation (§4).
  • Address-part selection chooses the value; a match type and comparator decide how to compare it. The base match types are :is, :contains and :matches; the default is :is. This guide’s worked comparisons use :is only. Other match types do not make a missing detail present (§4; RFC5228 §2.7.1).
  • The base default comparator i;ascii-casemap treats uppercase/lowercase ASCII as equal, so selected detail SIEVE :is key sieve succeeds. Explicit i;octet does not fold case, so that particular comparison fails. Both comparators MUST be supported by base Sieve; this says nothing about whether two mail addresses identify the same mailbox (RFC5228 §2.7.3). No Unicode normalization or broader case-folding is inferred.
  • The normal address-part restrictions remain: selecting more than one part such as :user and :detail for one test is an error, and an invalid address must not be treated as successfully parsed subparts (§4; RFC5228 §2.7.4). Omitting an address part defaults to :all in base Sieve, not :user. The model receives an explicit validity result from an upstream parser; it does not implement that parser.
DETAILS

Fictional offline mail-filter examples. Address components are already parsed; the illustrated encoding is explicitly configured to match the local mail system. This is not a complete Sieve interpreter, address parser, provider setup or actual mail delivery. Example folders exist and illustrated actions succeed unless a failure is named.

Read the RFC section ↗

All chapters in RFC 5233

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗