Visual RFC.
ALL RFCs / RFC 3030
Read the RFC ↗
RFC 3030 / SMTP CHUNKS AND BINARY MIME

Finish a transaction with LAST and respect its boundaries

03

Each successful chunk receives a 250 reply. LAST identifies the final chunk; it is a BDAT parameter, not a separate command or a count of the whole message.

RFC 3030 · § 2EXAMPLE
4 / 4
Finish a transaction with LAST and respect its boundariesSeparate DATA-after-BDAT case gets 503 and requires RSET.LAST controls this transaction’s final boundarySenderReceiverReset comparison: BDAT transaction unfinishedDATA503 bad sequenceRSET required; do not mix verbs mid-transactionDATA and BDAT may be used in different transactions of one session
04
Reject DATA inside a BDAT transaction

Separate reset to an unfinished BDAT transaction: the sender issues DATA. The receiver returns 503 and the transaction needs RSET. Changing the transfer verb mid-message is not a repair.

Source for this drawing: RFC 3030 · Read RFC section 2 ↗

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.

What changed
Printed RFC 3030 §4.2 exampleVerified technical erratum 349

The first chunk description is missing a zero: BDAT 100000 carries 100000 octets, then 324, then zero LAST. The declared command stays 100000.

Read the updated RFC section ↗
KEY POINT

A 250 response MUST be sent for each successful BDAT block. A non-LAST acknowledgement is not acceptance of the complete message.

  • A 250 response MUST be sent for each successful BDAT block. A non-LAST acknowledgement is not acceptance of the complete message.
  • The last BDAT MAY have count zero. The worked example follows verified erratum 349: chunks of 100000 and 324 octets, followed by BDAT 0 LAST, total 100324.
  • An additional BDAT after BDAT LAST, before a new transaction, is illegal and MUST receive 503. Its error state is indeterminate; RSET MUST clear it before continuing.
  • DATA and BDAT cannot mix in one transaction. DATA after BDAT MUST receive 503 and requires RSET. They can be used in different transactions of the same session.
DETAILS

Fictional example.com mail peers. Counts and byte excerpts are illustrative, not a full MIME message or a deployment configuration. Separate comparisons reset state. This companion is not an SMTP parser or implementation.

Read the RFC section ↗

All chapters in RFC 3030

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 ↗