SMTP Service Extension for Command Pipelining
RFC 2920

Document Type RFC - Internet Standard (September 2000; No errata)
Obsoletes RFC 2197
Also known as STD 60
Was draft-freed-smtp-pipe (individual)
Author Ned Freed 
Last updated 2013-03-02
Stream Legacy
Formats plain text html pdf htmlized bibtex
Stream Legacy state (None)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state RFC 2920 (Internet Standard)
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                          N. Freed
Request for Comments: 2920                                     Innosoft
STD: 60                                                  September 2000
Obsoletes: 2197
Category: Standards Track

             SMTP Service Extension for Command Pipelining

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2000).  All Rights Reserved.


   This memo defines an extension to the Simple Mail Transfer Protocol
   (SMTP) service whereby a server can indicate the extent of its
   ability to accept multiple commands in a single Transmission Control
   Protocol (TCP) send operation. Using a single TCP send operation for
   multiple commands can improve SMTP performance significantly.

1.  Introduction

   Although SMTP is widely and robustly deployed, certain extensions may
   nevertheless prove useful. In particular, many parts of the Internet
   make use of high latency network links.  SMTP's intrinsic one
   command-one response structure is significantly penalized by high
   latency links, often to the point where the factors contributing to
   overall connection time are dominated by the time spent waiting for
   responses to individual commands (turnaround time).

   In the best of all worlds it would be possible to simply deploy SMTP
   client software that makes use of command pipelining: batching up
   multiple commands into single TCP send operations. Unfortunately, the
   original SMTP specification [RFC-821] did not explicitly state that
   SMTP servers must support this. As a result a non-trivial number of
   Internet SMTP servers cannot adequately handle command pipelining.
   Flaws known to exist in deployed servers include:

Freed                       Standards Track                     [Page 1]
RFC 2920              SMTP for Command Pipelining         September 2000

    (1)   Connection handoff and buffer flushes in the middle of the
          SMTP dialogue.  Creation of server processes for incoming SMTP
          connections is a useful, obvious, and harmless implementation
          technique. However, some SMTP servers defer process forking
          and connection handoff until some intermediate point in the
          SMTP dialogue.  When this is done material read from the TCP
          connection and kept in process buffers can be lost.

    (2)   Flushing the TCP input buffer when an SMTP command fails. SMTP
          commands often fail but there is no reason to flush the TCP
          input buffer when this happens.  Nevertheless, some SMTP
          servers do this.

    (3)   Improper processing and promulgation of SMTP command failures.
          For example, some SMTP servers will refuse to accept a DATA
          command if the last RCPT TO command fails, paying no attention
          to the success or failure of prior RCPT TO command results.
          Other servers will accept a DATA command even when all
          previous RCPT TO commands have failed. Although it is possible
          to accommodate this sort of behavior in a client that employs
          command pipelining, it does complicate the construction of the
          client unnecessarily.

   This memo uses the mechanism described in [RFC-1869] to define an
   extension to the SMTP service whereby an SMTP server can declare that
   it is capable of handling pipelined commands. The SMTP client can
   then check for this declaration and use pipelining only when the
   server declares itself capable of handling it.

1.1.  Requirements Notation

   This document occasionally uses terms that appear in capital letters.
   When the terms "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
   appear capitalized, they are being used to indicate particular
   requirements of this specification. A discussion of the meanings of
   the terms "MUST", "SHOULD", and "MAY" appears in [RFC-1123]; the
   terms "MUST NOT" and "SHOULD NOT" are logical extensions of this

2.  Framework for the Command Pipelining Extension

   The Command Pipelining extension is defined as follows:

    (1)   the name of the SMTP service extension is Pipelining;

    (2)   the EHLO keyword value associated with the extension is

Freed                       Standards Track                     [Page 2]
RFC 2920              SMTP for Command Pipelining         September 2000

    (3)   no parameter is used with the PIPELINING EHLO keyword;

    (4)   no additional parameters are added to either the MAIL FROM or
          RCPT TO commands.

    (5)   no additional SMTP verbs are defined by this extension; and,
Show full document text