Visual RFC.
ALL RFCs / RFC 5321
Read the RFC ↗
RFC 5321 / SMTP CONVERSATION

Lines & dot transparency

05

SMTP uses CRLF line endings and a single-dot line to mark the end of DATA. Dot-stuffing preserves literal leading dots.

Related RFCs and changes

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

RFC 5321 · § 4.5.2EXAMPLE
4 / 4
Lines & dot transparencyA line beginning with a dot is escaped by adding another dot on the wire, then restored at the receiver; a separate single-dot line is the DATA terminator.A dot can be content or framingIllustrative DATA transferOriginal content.helloordinary lineWire content..helloordinary lineunstuffDelivered: .helloone leading dot restored<CRLF> . <CRLF> → end DATAThe terminator is not delivered as message contentA separate single-dot line terminates DATA
04
Terminate DATA separately.

The standalone dot line ends content transfer and is not part of the delivered message.

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
KEY POINT

Escape content so it cannot impersonate the delimiter.

  • Lines end in CRLF; a line containing only a dot terminates DATA.
  • The sender prepends a dot to each content line that begins with a dot.
  • The receiver removes the extra leading dot from non-terminator lines.
DETAILS

Message framing is distinct from MIME encoding and from optional extensions that provide a different transfer method. A bare LF is not the defined SMTP line terminator.

Read the RFC section ↗

Diagrams simplify the RFC. Read the linked sections for complete requirements.

Privacy
All chapters in this RFC
  1. Envelope vs message
  2. DNS & the next hop
  3. Greeting & extensions
  4. MAIL, RCPT, DATA
  5. Lines & dot transparency
  6. Replies & later changes
  7. Relays, aliases & traces
  8. Queues, retries & timeouts
  9. Acceptance & failure reports
  10. Security & scope
RFC 9700 / CHAPTERS

Chapters

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

RFC status and corrections ↗