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

MAIL, RCPT, DATA

04

A transaction sets one reverse-path, one or more recipients, then transfers the message content.

Related RFCs and changes

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

DIAGRAM§ 3.3 ↗
RFC 5321 · § 3.3EXAMPLE
4 / 4
MAIL, RCPT, DATAMAIL, multiple RCPT commands, DATA with a 354 intermediate reply, message data, and the final 250 appear as a progressively built transcript.One mail transactionIllustrative command / reply sequenceC: MAIL FROM:<sender@example>S: 250 OKC: RCPT TO:<a@example>S: 250 OKC: RCPT TO:<b@example>S: 250 OKC: DATAS: 354 Send contentC: Headers + body + <CRLF>.<CRLF>S: 250 AcceptedFinal 250 accepts responsibility for the content
04
Finish and await the final reply.

Only the completion reply establishes acceptance of the message content.

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

Keep each transaction state explicit.

  • MAIL starts a transaction and sets the reverse-path; each RCPT adds an accepted recipient.
  • DATA begins content transfer only after a 354 intermediate reply.
  • The final reply after the end-of-data marker determines acceptance of that message for the accepted recipients.
DETAILS

Recipients can succeed or fail independently at RCPT. RSET abandons transaction state; QUIT ends the session. A session can carry multiple mail transactions.

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 ↗