rfc0821.txt
资源名称:rfc0821.rar [点击查看]
上传用户:cshifang
上传日期:2020-04-07
资源大小:23k
文件大小:122k
源码类别:
Email服务器
开发平台:
Others
- RFC 821
- SIMPLE MAIL TRANSFER PROTOCOL
- Jonathan B. Postel
- August 1982
- Information Sciences Institute
- University of Southern California
- 4676 Admiralty Way
- Marina del Rey, California 90291
- (213) 822-1511
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- TABLE OF CONTENTS
- 1. INTRODUCTION .................................................. 1
- 2. THE SMTP MODEL ................................................ 2
- 3. THE SMTP PROCEDURE ............................................ 4
- 3.1. Mail ..................................................... 4
- 3.2. Forwarding ............................................... 7
- 3.3. Verifying and Expanding .................................. 8
- 3.4. Sending and Mailing ..................................... 11
- 3.5. Opening and Closing ..................................... 13
- 3.6. Relaying ................................................ 14
- 3.7. Domains ................................................. 17
- 3.8. Changing Roles .......................................... 18
- 4. THE SMTP SPECIFICATIONS ...................................... 19
- 4.1. SMTP Commands ........................................... 19
- 4.1.1. Command Semantics ..................................... 19
- 4.1.2. Command Syntax ........................................ 27
- 4.2. SMTP Replies ............................................ 34
- 4.2.1. Reply Codes by Function Group ......................... 35
- 4.2.2. Reply Codes in Numeric Order .......................... 36
- 4.3. Sequencing of Commands and Replies ...................... 37
- 4.4. State Diagrams .......................................... 39
- 4.5. Details ................................................. 41
- 4.5.1. Minimum Implementation ................................ 41
- 4.5.2. Transparency .......................................... 41
- 4.5.3. Sizes ................................................. 42
- APPENDIX A: TCP ................................................. 44
- APPENDIX B: NCP ................................................. 45
- APPENDIX C: NITS ................................................ 46
- APPENDIX D: X.25 ................................................ 47
- APPENDIX E: Theory of Reply Codes ............................... 48
- APPENDIX F: Scenarios ........................................... 51
- GLOSSARY ......................................................... 64
- REFERENCES ....................................................... 67
- Network Working Group J. Postel
- Request for Comments: DRAFT ISI
- Replaces: RFC 788, 780, 772 August 1982
- SIMPLE MAIL TRANSFER PROTOCOL
- 1. INTRODUCTION
- The objective of Simple Mail Transfer Protocol (SMTP) is to transfer
- mail reliably and efficiently.
- SMTP is independent of the particular transmission subsystem and
- requires only a reliable ordered data stream channel. Appendices A,
- B, C, and D describe the use of SMTP with various transport services.
- A Glossary provides the definitions of terms as used in this
- document.
- An important feature of SMTP is its capability to relay mail across
- transport service environments. A transport service provides an
- interprocess communication environment (IPCE). An IPCE may cover one
- network, several networks, or a subset of a network. It is important
- to realize that transport systems (or IPCEs) are not one-to-one with
- networks. A process can communicate directly with another process
- through any mutually known IPCE. Mail is an application or use of
- interprocess communication. Mail can be communicated between
- processes in different IPCEs by relaying through a process connected
- to two (or more) IPCEs. More specifically, mail can be relayed
- between hosts on different transport systems by a host on both
- transport systems.
- Postel [Page 1]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 2. THE SMTP MODEL
- The SMTP design is based on the following model of communication: as
- the result of a user mail request, the sender-SMTP establishes a
- two-way transmission channel to a receiver-SMTP. The receiver-SMTP
- may be either the ultimate destination or an intermediate. SMTP
- commands are generated by the sender-SMTP and sent to the
- receiver-SMTP. SMTP replies are sent from the receiver-SMTP to the
- sender-SMTP in response to the commands.
- Once the transmission channel is established, the SMTP-sender sends a
- MAIL command indicating the sender of the mail. If the SMTP-receiver
- can accept mail it responds with an OK reply. The SMTP-sender then
- sends a RCPT command identifying a recipient of the mail. If the
- SMTP-receiver can accept mail for that recipient it responds with an
- OK reply; if not, it responds with a reply rejecting that recipient
- (but not the whole mail transaction). The SMTP-sender and
- SMTP-receiver may negotiate several recipients. When the recipients
- have been negotiated the SMTP-sender sends the mail data, terminating
- with a special sequence. If the SMTP-receiver successfully processes
- the mail data it responds with an OK reply. The dialog is purposely
- lock-step, one-at-a-time.
- -------------------------------------------------------------
- +----------+ +----------+
- +------+ | | | |
- | User |<-->| | SMTP | |
- +------+ | Sender- |Commands/Replies| Receiver-|
- +------+ | SMTP |<-------------->| SMTP | +------+
- | File |<-->| | and Mail | |<-->| File |
- |System| | | | | |System|
- +------+ +----------+ +----------+ +------+
- Sender-SMTP Receiver-SMTP
- Model for SMTP Use
- Figure 1
- -------------------------------------------------------------
- The SMTP provides mechanisms for the transmission of mail; directly
- from the sending user's host to the receiving user's host when the
- [Page 2] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- two host are connected to the same transport service, or via one or
- more relay SMTP-servers when the source and destination hosts are not
- connected to the same transport service.
- To be able to provide the relay capability the SMTP-server must be
- supplied with the name of the ultimate destination host as well as
- the destination mailbox name.
- The argument to the MAIL command is a reverse-path, which specifies
- who the mail is from. The argument to the RCPT command is a
- forward-path, which specifies who the mail is to. The forward-path
- is a source route, while the reverse-path is a return route (which
- may be used to return a message to the sender when an error occurs
- with a relayed message).
- When the same message is sent to multiple recipients the SMTP
- encourages the transmission of only one copy of the data for all the
- recipients at the same destination host.
- The mail commands and replies have a rigid syntax. Replies also have
- a numeric code. In the following, examples appear which use actual
- commands and replies. The complete lists of commands and replies
- appears in Section 4 on specifications.
- Commands and replies are not case sensitive. That is, a command or
- reply word may be upper case, lower case, or any mixture of upper and
- lower case. Note that this is not true of mailbox user names. For
- some hosts the user name is case sensitive, and SMTP implementations
- must take case to preserve the case of user names as they appear in
- mailbox arguments. Host names are not case sensitive.
- Commands and replies are composed of characters from the ASCII
- character set [1]. When the transport service provides an 8-bit byte
- (octet) transmission channel, each 7-bit character is transmitted
- right justified in an octet with the high order bit cleared to zero.
- When specifying the general form of a command or reply, an argument
- (or special symbol) will be denoted by a meta-linguistic variable (or
- constant), for example, "<string>" or "<reverse-path>". Here the
- angle brackets indicate these are meta-linguistic variables.
- However, some arguments use the angle brackets literally. For
- example, an actual reverse-path is enclosed in angle brackets, i.e.,
- "<John.Smith@USC-ISI.ARPA>" is an instance of <reverse-path> (the
- angle brackets are actually transmitted in the command or reply).
- Postel [Page 3]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 3. THE SMTP PROCEDURES
- This section presents the procedures used in SMTP in several parts.
- First comes the basic mail procedure defined as a mail transaction.
- Following this are descriptions of forwarding mail, verifying mailbox
- names and expanding mailing lists, sending to terminals instead of or
- in combination with mailboxes, and the opening and closing exchanges.
- At the end of this section are comments on relaying, a note on mail
- domains, and a discussion of changing roles. Throughout this section
- are examples of partial command and reply sequences, several complete
- scenarios are presented in Appendix F.
- 3.1. MAIL
- There are three steps to SMTP mail transactions. The transaction
- is started with a MAIL command which gives the sender
- identification. A series of one or more RCPT commands follows
- giving the receiver information. Then a DATA command gives the
- mail data. And finally, the end of mail data indicator confirms
- the transaction.
- The first step in the procedure is the MAIL command. The
- <reverse-path> contains the source mailbox.
- MAIL <SP> FROM:<reverse-path> <CRLF>
- This command tells the SMTP-receiver that a new mail
- transaction is starting and to reset all its state tables and
- buffers, including any recipients or mail data. It gives the
- reverse-path which can be used to report errors. If accepted,
- the receiver-SMTP returns a 250 OK reply.
- The <reverse-path> can contain more than just a mailbox. The
- <reverse-path> is a reverse source routing list of hosts and
- source mailbox. The first host in the <reverse-path> should be
- the host sending this command.
- The second step in the procedure is the RCPT command.
- RCPT <SP> TO:<forward-path> <CRLF>
- This command gives a forward-path identifying one recipient.
- If accepted, the receiver-SMTP returns a 250 OK reply, and
- stores the forward-path. If the recipient is unknown the
- receiver-SMTP returns a 550 Failure reply. This second step of
- the procedure can be repeated any number of times.
- [Page 4] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- The <forward-path> can contain more than just a mailbox. The
- <forward-path> is a source routing list of hosts and the
- destination mailbox. The first host in the <forward-path>
- should be the host receiving this command.
- The third step in the procedure is the DATA command.
- DATA <CRLF>
- If accepted, the receiver-SMTP returns a 354 Intermediate reply
- and considers all succeeding lines to be the message text.
- When the end of text is received and stored the SMTP-receiver
- sends a 250 OK reply.
- Since the mail data is sent on the transmission channel the end
- of the mail data must be indicated so that the command and
- reply dialog can be resumed. SMTP indicates the end of the
- mail data by sending a line containing only a period. A
- transparency procedure is used to prevent this from interfering
- with the user's text (see Section 4.5.2).
- Please note that the mail data includes the memo header
- items such as Date, Subject, To, Cc, From [2].
- The end of mail data indicator also confirms the mail
- transaction and tells the receiver-SMTP to now process the
- stored recipients and mail data. If accepted, the
- receiver-SMTP returns a 250 OK reply. The DATA command should
- fail only if the mail transaction was incomplete (for example,
- no recipients), or if resources are not available.
- The above procedure is an example of a mail transaction. These
- commands must be used only in the order discussed above.
- Example 1 (below) illustrates the use of these commands in a mail
- transaction.
- Postel [Page 5]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- -------------------------------------------------------------
- Example of the SMTP Procedure
- This SMTP example shows mail sent by Smith at host Alpha.ARPA,
- to Jones, Green, and Brown at host Beta.ARPA. Here we assume
- that host Alpha contacts host Beta directly.
- S: MAIL FROM:<Smith@Alpha.ARPA>
- R: 250 OK
- S: RCPT TO:<Jones@Beta.ARPA>
- R: 250 OK
- S: RCPT TO:<Green@Beta.ARPA>
- R: 550 No such user here
- S: RCPT TO:<Brown@Beta.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: <CRLF>.<CRLF>
- R: 250 OK
- The mail has now been accepted for Jones and Brown. Green did
- not have a mailbox at host Beta.
- Example 1
- -------------------------------------------------------------
- [Page 6] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 3.2. FORWARDING
- There are some cases where the destination information in the
- <forward-path> is incorrect, but the receiver-SMTP knows the
- correct destination. In such cases, one of the following replies
- should be used to allow the sender to contact the correct
- destination.
- 251 User not local; will forward to <forward-path>
- This reply indicates that the receiver-SMTP knows the user's
- mailbox is on another host and indicates the correct
- forward-path to use in the future. Note that either the
- host or user or both may be different. The receiver takes
- responsibility for delivering the message.
- 551 User not local; please try <forward-path>
- This reply indicates that the receiver-SMTP knows the user's
- mailbox is on another host and indicates the correct
- forward-path to use. Note that either the host or user or
- both may be different. The receiver refuses to accept mail
- for this user, and the sender must either redirect the mail
- according to the information provided or return an error
- response to the originating user.
- Example 2 illustrates the use of these responses.
- -------------------------------------------------------------
- Example of Forwarding
- Either
- S: RCPT TO:<Postel@USC-ISI.ARPA>
- R: 251 User not local; will forward to <Postel@USC-ISIF.ARPA>
- Or
- S: RCPT TO:<Paul@USC-ISIB.ARPA>
- R: 551 User not local; please try <Mockapetris@USC-ISIF.ARPA>
- Example 2
- -------------------------------------------------------------
- Postel [Page 7]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 3.3. VERIFYING AND EXPANDING
- SMTP provides as additional features, commands to verify a user
- name or expand a mailing list. This is done with the VRFY and
- EXPN commands, which have character string arguments. For the
- VRFY command, the string is a user name, and the response may
- include the full name of the user and must include the mailbox of
- the user. For the EXPN command, the string identifies a mailing
- list, and the multiline response may include the full name of the
- users and must give the mailboxes on the mailing list.
- "User name" is a fuzzy term and used purposely. If a host
- implements the VRFY or EXPN commands then at least local mailboxes
- must be recognized as "user names". If a host chooses to
- recognize other strings as "user names" that is allowed.
- In some hosts the distinction between a mailing list and an alias
- for a single mailbox is a bit fuzzy, since a common data structure
- may hold both types of entries, and it is possible to have mailing
- lists of one mailbox. If a request is made to verify a mailing
- list a positive response can be given if on receipt of a message
- so addressed it will be delivered to everyone on the list,
- otherwise an error should be reported (e.g., "550 That is a
- mailing list, not a user"). If a request is made to expand a user
- name a positive response can be formed by returning a list
- containing one name, or an error can be reported (e.g., "550 That
- is a user name, not a mailing list").
- In the case of a multiline reply (normal for EXPN) exactly one
- mailbox is to be specified on each line of the reply. In the case
- of an ambiguous request, for example, "VRFY Smith", where there
- are two Smith's the response must be "553 User ambiguous".
- The case of verifying a user name is straightforward as shown in
- example 3.
- [Page 8] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- -------------------------------------------------------------
- Example of Verifying a User Name
- Either
- S: VRFY Smith
- R: 250 Fred Smith <Smith@USC-ISIF.ARPA>
- Or
- S: VRFY Smith
- R: 251 User not local; will forward to <Smith@USC-ISIQ.ARPA>
- Or
- S: VRFY Jones
- R: 550 String does not match anything.
- Or
- S: VRFY Jones
- R: 551 User not local; please try <Jones@USC-ISIQ.ARPA>
- Or
- S: VRFY Gourzenkyinplatz
- R: 553 User ambiguous.
- Example 3
- -------------------------------------------------------------
- Postel [Page 9]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- The case of expanding a mailbox list requires a multiline reply as
- shown in example 4.
- -------------------------------------------------------------
- Example of Expanding a Mailing List
- Either
- S: EXPN Example-People
- R: 250-Jon Postel <Postel@USC-ISIF.ARPA>
- R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>
- R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>
- R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
- R: 250-<joe@foo-unix.ARPA>
- R: 250 <xyz@bar-unix.ARPA>
- Or
- S: EXPN Executive-Washroom-List
- R: 550 Access Denied to You.
- Example 4
- -------------------------------------------------------------
- The character string arguments of the VRFY and EXPN commands
- cannot be further restricted due to the variety of implementations
- of the user name and mailbox list concepts. On some systems it
- may be appropriate for the argument of the EXPN command to be a
- file name for a file containing a mailing list, but again there is
- a variety of file naming conventions in the Internet.
- The VRFY and EXPN commands are not included in the minimum
- implementation (Section 4.5.1), and are not required to work
- across relays when they are implemented.
- [Page 10] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 3.4. SENDING AND MAILING
- The main purpose of SMTP is to deliver messages to user's
- mailboxes. A very similar service provided by some hosts is to
- deliver messages to user's terminals (provided the user is active
- on the host). The delivery to the user's mailbox is called
- "mailing", the delivery to the user's terminal is called
- "sending". Because in many hosts the implementation of sending is
- nearly identical to the implementation of mailing these two
- functions are combined in SMTP. However the sending commands are
- not included in the required minimum implementation
- (Section 4.5.1). Users should have the ability to control the
- writing of messages on their terminals. Most hosts permit the
- users to accept or refuse such messages.
- The following three command are defined to support the sending
- options. These are used in the mail transaction instead of the
- MAIL command and inform the receiver-SMTP of the special semantics
- of this transaction:
- SEND <SP> FROM:<reverse-path> <CRLF>
- The SEND command requires that the mail data be delivered to
- the user's terminal. If the user is not active (or not
- accepting terminal messages) on the host a 450 reply may
- returned to a RCPT command. The mail transaction is
- successful if the message is delivered the terminal.
- SOML <SP> FROM:<reverse-path> <CRLF>
- The Send Or MaiL command requires that the mail data be
- delivered to the user's terminal if the user is active (and
- accepting terminal messages) on the host. If the user is
- not active (or not accepting terminal messages) then the
- mail data is entered into the user's mailbox. The mail
- transaction is successful if the message is delivered either
- to the terminal or the mailbox.
- SAML <SP> FROM:<reverse-path> <CRLF>
- The Send And MaiL command requires that the mail data be
- delivered to the user's terminal if the user is active (and
- accepting terminal messages) on the host. In any case the
- mail data is entered into the user's mailbox. The mail
- transaction is successful if the message is delivered the
- mailbox.
- Postel [Page 11]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- The same reply codes that are used for the MAIL commands are used
- for these commands.
- [Page 12] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 3.5. OPENING AND CLOSING
- At the time the transmission channel is opened there is an
- exchange to ensure that the hosts are communicating with the hosts
- they think they are.
- The following two commands are used in transmission channel
- opening and closing:
- HELO <SP> <domain> <CRLF>
- QUIT <CRLF>
- In the HELO command the host sending the command identifies
- itself; the command may be interpreted as saying "Hello, I am
- <domain>".
- -------------------------------------------------------------
- Example of Connection Opening
- R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
- S: HELO USC-ISIF.ARPA
- R: 250 BBN-UNIX.ARPA
- Example 5
- -------------------------------------------------------------
- -------------------------------------------------------------
- Example of Connection Closing
- S: QUIT
- R: 221 BBN-UNIX.ARPA Service closing transmission channel
- Example 6
- -------------------------------------------------------------
- Postel [Page 13]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 3.6. RELAYING
- The forward-path may be a source route of the form
- "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE are hosts. This
- form is used to emphasize the distinction between an address and a
- route. The mailbox is an absolute address, and the route is
- information about how to get there. The two concepts should not
- be confused.
- Conceptually the elements of the forward-path are moved to the
- reverse-path as the message is relayed from one server-SMTP to
- another. The reverse-path is a reverse source route, (i.e., a
- source route from the current location of the message to the
- originator of the message). When a server-SMTP deletes its
- identifier from the forward-path and inserts it into the
- reverse-path, it must use the name it is known by in the
- environment it is sending into, not the environment the mail came
- from, in case the server-SMTP is known by different names in
- different environments.
- If when the message arrives at an SMTP the first element of the
- forward-path is not the identifier of that SMTP the element is not
- deleted from the forward-path and is used to determine the next
- SMTP to send the message to. In any case, the SMTP adds its own
- identifier to the reverse-path.
- Using source routing the receiver-SMTP receives mail to be relayed
- to another server-SMTP The receiver-SMTP may accept or reject the
- task of relaying the mail in the same way it accepts or rejects
- mail for a local user. The receiver-SMTP transforms the command
- arguments by moving its own identifier from the forward-path to
- the beginning of the reverse-path. The receiver-SMTP then becomes
- a sender-SMTP, establishes a transmission channel to the next SMTP
- in the forward-path, and sends it the mail.
- The first host in the reverse-path should be the host sending the
- SMTP commands, and the first host in the forward-path should be
- the host receiving the SMTP commands.
- Notice that the forward-path and reverse-path appear in the SMTP
- commands and replies, but not necessarily in the message. That
- is, there is no need for these paths and especially this syntax to
- appear in the "To:" , "From:", "CC:", etc. fields of the message
- header.
- If a server-SMTP has accepted the task of relaying the mail and
- [Page 14] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- later finds that the forward-path is incorrect or that the mail
- cannot be delivered for whatever reason, then it must construct an
- "undeliverable mail" notification message and send it to the
- originator of the undeliverable mail (as indicated by the
- reverse-path).
- This notification message must be from the server-SMTP at this
- host. Of course, server-SMTPs should not send notification
- messages about problems with notification messages. One way to
- prevent loops in error reporting is to specify a null reverse-path
- in the MAIL command of a notification message. When such a
- message is relayed it is permissible to leave the reverse-path
- null. A MAIL command with a null reverse-path appears as follows:
- MAIL FROM:<>
- An undeliverable mail notification message is shown in example 7.
- This notification is in response to a message originated by JOE at
- HOSTW and sent via HOSTX to HOSTY with instructions to relay it on
- to HOSTZ. What we see in the example is the transaction between
- HOSTY and HOSTX, which is the first step in the return of the
- notification message.
- Postel [Page 15]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- -------------------------------------------------------------
- Example Undeliverable Mail Notification Message
- S: MAIL FROM:<>
- R: 250 ok
- S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA>
- R: 250 ok
- S: DATA
- R: 354 send the mail data, end with .
- S: Date: 23 Oct 81 11:22:33
- S: From: SMTP@HOSTY.ARPA
- S: To: JOE@HOSTW.ARPA
- S: Subject: Mail System Problem
- S:
- S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost.
- S: HOSTZ.ARPA said this:
- S: "550 No Such User"
- S: .
- R: 250 ok
- Example 7
- -------------------------------------------------------------
- [Page 16] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 3.7. DOMAINS
- Domains are a recently introduced concept in the ARPA Internet
- mail system. The use of domains changes the address space from a
- flat global space of simple character string host names to a
- hierarchically structured rooted tree of global addresses. The
- host name is replaced by a domain and host designator which is a
- sequence of domain element strings separated by periods with the
- understanding that the domain elements are ordered from the most
- specific to the most general.
- For example, "USC-ISIF.ARPA", "Fred.Cambridge.UK", and
- "PC7.LCS.MIT.ARPA" might be host-and-domain identifiers.
- Whenever domain names are used in SMTP only the official names are
- used, the use of nicknames or aliases is not allowed.
- Postel [Page 17]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 3.8. CHANGING ROLES
- The TURN command may be used to reverse the roles of the two
- programs communicating over the transmission channel.
- If program-A is currently the sender-SMTP and it sends the TURN
- command and receives an ok reply (250) then program-A becomes the
- receiver-SMTP.
- If program-B is currently the receiver-SMTP and it receives the
- TURN command and sends an ok reply (250) then program-B becomes
- the sender-SMTP.
- To refuse to change roles the receiver sends the 502 reply.
- Please note that this command is optional. It would not normally
- be used in situations where the transmission channel is TCP.
- However, when the cost of establishing the transmission channel is
- high, this command may be quite useful. For example, this command
- may be useful in supporting be mail exchange using the public
- switched telephone system as a transmission channel, especially if
- some hosts poll other hosts for mail exchanges.
- [Page 18] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 4. THE SMTP SPECIFICATIONS
- 4.1. SMTP COMMANDS
- 4.1.1. COMMAND SEMANTICS
- The SMTP commands define the mail transfer or the mail system
- function requested by the user. SMTP commands are character
- strings terminated by <CRLF>. The command codes themselves are
- alphabetic characters terminated by <SP> if parameters follow
- and <CRLF> otherwise. The syntax of mailboxes must conform to
- receiver site conventions. The SMTP commands are discussed
- below. The SMTP replies are discussed in the Section 4.2.
- A mail transaction involves several data objects which are
- communicated as arguments to different commands. The
- reverse-path is the argument of the MAIL command, the
- forward-path is the argument of the RCPT command, and the mail
- data is the argument of the DATA command. These arguments or
- data objects must be transmitted and held pending the
- confirmation communicated by the end of mail data indication
- which finalizes the transaction. The model for this is that
- distinct buffers are provided to hold the types of data
- objects, that is, there is a reverse-path buffer, a
- forward-path buffer, and a mail data buffer. Specific commands
- cause information to be appended to a specific buffer, or cause
- one or more buffers to be cleared.
- HELLO (HELO)
- This command is used to identify the sender-SMTP to the
- receiver-SMTP. The argument field contains the host name of
- the sender-SMTP.
- The receiver-SMTP identifies itself to the sender-SMTP in
- the connection greeting reply, and in the response to this
- command.
- This command and an OK reply to it confirm that both the
- sender-SMTP and the receiver-SMTP are in the initial state,
- that is, there is no transaction in progress and all state
- tables and buffers are cleared.
- Postel [Page 19]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- MAIL (MAIL)
- This command is used to initiate a mail transaction in which
- the mail data is delivered to one or more mailboxes. The
- argument field contains a reverse-path.
- The reverse-path consists of an optional list of hosts and
- the sender mailbox. When the list of hosts is present, it
- is a "reverse" source route and indicates that the mail was
- relayed through each host on the list (the first host in the
- list was the most recent relay). This list is used as a
- source route to return non-delivery notices to the sender.
- As each relay host adds itself to the beginning of the list,
- it must use its name as known in the IPCE to which it is
- relaying the mail rather than the IPCE from which the mail
- came (if they are different). In some types of error
- reporting messages (for example, undeliverable mail
- notifications) the reverse-path may be null (see Example 7).
- This command clears the reverse-path buffer, the
- forward-path buffer, and the mail data buffer; and inserts
- the reverse-path information from this command into the
- reverse-path buffer.
- RECIPIENT (RCPT)
- This command is used to identify an individual recipient of
- the mail data; multiple recipients are specified by multiple
- use of this command.
- The forward-path consists of an optional list of hosts and a
- required destination mailbox. When the list of hosts is
- present, it is a source route and indicates that the mail
- must be relayed to the next host on the list. If the
- receiver-SMTP does not implement the relay function it may
- user the same reply it would for an unknown local user
- (550).
- When mail is relayed, the relay host must remove itself from
- the beginning forward-path and put itself at the beginning
- of the reverse-path. When mail reaches its ultimate
- destination (the forward-path contains only a destination
- mailbox), the receiver-SMTP inserts it into the destination
- mailbox in accordance with its host mail conventions.
- [Page 20] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- For example, mail received at relay host A with arguments
- FROM:<USERX@HOSTY.ARPA>
- TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>
- will be relayed on to host B with arguments
- FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>
- TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.
- This command causes its forward-path argument to be appended
- to the forward-path buffer.
- DATA (DATA)
- The receiver treats the lines following the command as mail
- data from the sender. This command causes the mail data
- from this command to be appended to the mail data buffer.
- The mail data may contain any of the 128 ASCII character
- codes.
- The mail data is terminated by a line containing only a
- period, that is the character sequence "<CRLF>.<CRLF>" (see
- Section 4.5.2 on Transparency). This is the end of mail
- data indication.
- The end of mail data indication requires that the receiver
- must now process the stored mail transaction information.
- This processing consumes the information in the reverse-path
- buffer, the forward-path buffer, and the mail data buffer,
- and on the completion of this command these buffers are
- cleared. If the processing is successful the receiver must
- send an OK reply. If the processing fails completely the
- receiver must send a failure reply.
- When the receiver-SMTP accepts a message either for relaying
- or for final delivery it inserts at the beginning of the
- mail data a time stamp line. The time stamp line indicates
- the identity of the host that sent the message, and the
- identity of the host that received the message (and is
- inserting this time stamp), and the date and time the
- message was received. Relayed messages will have multiple
- time stamp lines.
- When the receiver-SMTP makes the "final delivery" of a
- message it inserts at the beginning of the mail data a
- Postel [Page 21]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- return path line. The return path line preserves the
- information in the <reverse-path> from the MAIL command.
- Here, final delivery means the message leaves the SMTP
- world. Normally, this would mean it has been delivered to
- the destination user, but in some cases it may be further
- processed and transmitted by another mail system.
- It is possible for the mailbox in the return path be
- different from the actual sender's mailbox, for example,
- if error responses are to be delivered a special error
- handling mailbox rather than the message senders.
- The preceding two paragraphs imply that the final mail data
- will begin with a return path line, followed by one or more
- time stamp lines. These lines will be followed by the mail
- data header and body [2]. See Example 8.
- Special mention is needed of the response and further action
- required when the processing following the end of mail data
- indication is partially successful. This could arise if
- after accepting several recipients and the mail data, the
- receiver-SMTP finds that the mail data can be successfully
- delivered to some of the recipients, but it cannot be to
- others (for example, due to mailbox space allocation
- problems). In such a situation, the response to the DATA
- command must be an OK reply. But, the receiver-SMTP must
- compose and send an "undeliverable mail" notification
- message to the originator of the message. Either a single
- notification which lists all of the recipients that failed
- to get the message, or separate notification messages must
- be sent for each failed recipient (see Example 7). All
- undeliverable mail notification messages are sent using the
- MAIL command (even if they result from processing a SEND,
- SOML, or SAML command).
- [Page 22] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- -------------------------------------------------------------
- Example of Return Path and Received Time Stamps
- Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA>
- Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST
- Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST
- Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST
- Date: 27 Oct 81 15:01:01 PST
- From: JOE@ABC.ARPA
- Subject: Improved Mailing System Installed
- To: SAM@JKL.ARPA
- This is to inform you that ...
- Example 8
- -------------------------------------------------------------
- SEND (SEND)
- This command is used to initiate a mail transaction in which
- the mail data is delivered to one or more terminals. The
- argument field contains a reverse-path. This command is
- successful if the message is delivered to a terminal.
- The reverse-path consists of an optional list of hosts and
- the sender mailbox. When the list of hosts is present, it
- is a "reverse" source route and indicates that the mail was
- relayed through each host on the list (the first host in the
- list was the most recent relay). This list is used as a
- source route to return non-delivery notices to the sender.
- As each relay host adds itself to the beginning of the list,
- it must use its name as known in the IPCE to which it is
- relaying the mail rather than the IPCE from which the mail
- came (if they are different).
- This command clears the reverse-path buffer, the
- forward-path buffer, and the mail data buffer; and inserts
- the reverse-path information from this command into the
- reverse-path buffer.
- SEND OR MAIL (SOML)
- This command is used to initiate a mail transaction in which
- the mail data is delivered to one or more terminals or
- Postel [Page 23]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- mailboxes. For each recipient the mail data is delivered to
- the recipient's terminal if the recipient is active on the
- host (and accepting terminal messages), otherwise to the
- recipient's mailbox. The argument field contains a
- reverse-path. This command is successful if the message is
- delivered to a terminal or the mailbox.
- The reverse-path consists of an optional list of hosts and
- the sender mailbox. When the list of hosts is present, it
- is a "reverse" source route and indicates that the mail was
- relayed through each host on the list (the first host in the
- list was the most recent relay). This list is used as a
- source route to return non-delivery notices to the sender.
- As each relay host adds itself to the beginning of the list,
- it must use its name as known in the IPCE to which it is
- relaying the mail rather than the IPCE from which the mail
- came (if they are different).
- This command clears the reverse-path buffer, the
- forward-path buffer, and the mail data buffer; and inserts
- the reverse-path information from this command into the
- reverse-path buffer.
- SEND AND MAIL (SAML)
- This command is used to initiate a mail transaction in which
- the mail data is delivered to one or more terminals and
- mailboxes. For each recipient the mail data is delivered to
- the recipient's terminal if the recipient is active on the
- host (and accepting terminal messages), and for all
- recipients to the recipient's mailbox. The argument field
- contains a reverse-path. This command is successful if the
- message is delivered to the mailbox.
- The reverse-path consists of an optional list of hosts and
- the sender mailbox. When the list of hosts is present, it
- is a "reverse" source route and indicates that the mail was
- relayed through each host on the list (the first host in the
- list was the most recent relay). This list is used as a
- source route to return non-delivery notices to the sender.
- As each relay host adds itself to the beginning of the list,
- it must use its name as known in the IPCE to which it is
- relaying the mail rather than the IPCE from which the mail
- came (if they are different).
- This command clears the reverse-path buffer, the
- [Page 24] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- forward-path buffer, and the mail data buffer; and inserts
- the reverse-path information from this command into the
- reverse-path buffer.
- RESET (RSET)
- This command specifies that the current mail transaction is
- to be aborted. Any stored sender, recipients, and mail data
- must be discarded, and all buffers and state tables cleared.
- The receiver must send an OK reply.
- VERIFY (VRFY)
- This command asks the receiver to confirm that the argument
- identifies a user. If it is a user name, the full name of
- the user (if known) and the fully specified mailbox are
- returned.
- This command has no effect on any of the reverse-path
- buffer, the forward-path buffer, or the mail data buffer.
- EXPAND (EXPN)
- This command asks the receiver to confirm that the argument
- identifies a mailing list, and if so, to return the
- membership of that list. The full name of the users (if
- known) and the fully specified mailboxes are returned in a
- multiline reply.
- This command has no effect on any of the reverse-path
- buffer, the forward-path buffer, or the mail data buffer.
- HELP (HELP)
- This command causes the receiver to send helpful information
- to the sender of the HELP command. The command may take an
- argument (e.g., any command name) and return more specific
- information as a response.
- This command has no effect on any of the reverse-path
- buffer, the forward-path buffer, or the mail data buffer.
- Postel [Page 25]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- NOOP (NOOP)
- This command does not affect any parameters or previously
- entered commands. It specifies no action other than that
- the receiver send an OK reply.
- This command has no effect on any of the reverse-path
- buffer, the forward-path buffer, or the mail data buffer.
- QUIT (QUIT)
- This command specifies that the receiver must send an OK
- reply, and then close the transmission channel.
- The receiver should not close the transmission channel until
- it receives and replies to a QUIT command (even if there was
- an error). The sender should not close the transmission
- channel until it send a QUIT command and receives the reply
- (even if there was an error response to a previous command).
- If the connection is closed prematurely the receiver should
- act as if a RSET command had been received (canceling any
- pending transaction, but not undoing any previously
- completed transaction), the sender should act as if the
- command or transaction in progress had received a temporary
- error (4xx).
- TURN (TURN)
- This command specifies that the receiver must either (1)
- send an OK reply and then take on the role of the
- sender-SMTP, or (2) send a refusal reply and retain the role
- of the receiver-SMTP.
- If program-A is currently the sender-SMTP and it sends the
- TURN command and receives an OK reply (250) then program-A
- becomes the receiver-SMTP. Program-A is then in the initial
- state as if the transmission channel just opened, and it
- then sends the 220 service ready greeting.
- If program-B is currently the receiver-SMTP and it receives
- the TURN command and sends an OK reply (250) then program-B
- becomes the sender-SMTP. Program-B is then in the initial
- state as if the transmission channel just opened, and it
- then expects to receive the 220 service ready greeting.
- To refuse to change roles the receiver sends the 502 reply.
- [Page 26] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- There are restrictions on the order in which these command may
- be used.
- The first command in a session must be the HELO command.
- The HELO command may be used later in a session as well. If
- the HELO command argument is not acceptable a 501 failure
- reply must be returned and the receiver-SMTP must stay in
- the same state.
- The NOOP, HELP, EXPN, and VRFY commands can be used at any
- time during a session.
- The MAIL, SEND, SOML, or SAML commands begin a mail
- transaction. Once started a mail transaction consists of
- one of the transaction beginning commands, one or more RCPT
- commands, and a DATA command, in that order. A mail
- transaction may be aborted by the RSET command. There may
- be zero or more transactions in a session.
- If the transaction beginning command argument is not
- acceptable a 501 failure reply must be returned and the
- receiver-SMTP must stay in the same state. If the commands
- in a transaction are out of order a 503 failure reply must
- be returned and the receiver-SMTP must stay in the same
- state.
- The last command in a session must be the QUIT command. The
- QUIT command can not be used at any other time in a session.
- 4.1.2. COMMAND SYNTAX
- The commands consist of a command code followed by an argument
- field. Command codes are four alphabetic characters. Upper
- and lower case alphabetic characters are to be treated
- identically. Thus, any of the following may represent the mail
- command:
- MAIL Mail mail MaIl mAIl
- This also applies to any symbols representing parameter values,
- such as "TO" or "to" for the forward-path. Command codes and
- the argument fields are separated by one or more spaces.
- However, within the reverse-path and forward-path arguments
- case is important. In particular, in some hosts the user
- "smith" is different from the user "Smith".
- Postel [Page 27]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- The argument field consists of a variable length character
- string ending with the character sequence <CRLF>. The receiver
- is to take no action until this sequence is received.
- Square brackets denote an optional argument field. If the
- option is not taken, the appropriate default is implied.
- [Page 28] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- The following are the SMTP commands:
- HELO <SP> <domain> <CRLF>
- MAIL <SP> FROM:<reverse-path> <CRLF>
- RCPT <SP> TO:<forward-path> <CRLF>
- DATA <CRLF>
- RSET <CRLF>
- SEND <SP> FROM:<reverse-path> <CRLF>
- SOML <SP> FROM:<reverse-path> <CRLF>
- SAML <SP> FROM:<reverse-path> <CRLF>
- VRFY <SP> <string> <CRLF>
- EXPN <SP> <string> <CRLF>
- HELP [<SP> <string>] <CRLF>
- NOOP <CRLF>
- QUIT <CRLF>
- TURN <CRLF>
- Postel [Page 29]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- The syntax of the above argument fields (using BNF notation
- where applicable) is given below. The "..." notation indicates
- that a field may be repeated one or more times.
- <reverse-path> ::= <path>
- <forward-path> ::= <path>
- <path> ::= "<" [ <a-d-l> ":" ] <mailbox> ">"
- <a-d-l> ::= <at-domain> | <at-domain> "," <a-d-l>
- <at-domain> ::= "@" <domain>
- <domain> ::= <element> | <element> "." <domain>
- <element> ::= <name> | "#" <number> | "[" <dotnum> "]"
- <mailbox> ::= <local-part> "@" <domain>
- <local-part> ::= <dot-string> | <quoted-string>
- <name> ::= <a> <ldh-str> <let-dig>
- <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
- <let-dig> ::= <a> | <d>
- <let-dig-hyp> ::= <a> | <d> | "-"
- <dot-string> ::= <string> | <string> "." <dot-string>
- <string> ::= <char> | <char> <string>
- <quoted-string> ::= """ <qtext> """
- <qtext> ::= "" <x> | "" <x> <qtext> | <q> | <q> <qtext>
- <char> ::= <c> | "" <x>
- <dotnum> ::= <snum> "." <snum> "." <snum> "." <snum>
- <number> ::= <d> | <d> <number>
- <CRLF> ::= <CR> <LF>
- [Page 30] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- <CR> ::= the carriage return character (ASCII code 13)
- <LF> ::= the line feed character (ASCII code 10)
- <SP> ::= the space character (ASCII code 32)
- <snum> ::= one, two, or three digits representing a decimal
- integer value in the range 0 through 255
- <a> ::= any one of the 52 alphabetic characters A through Z
- in upper case and a through z in lower case
- <c> ::= any one of the 128 ASCII characters, but not any
- <special> or <SP>
- <d> ::= any one of the ten digits 0 through 9
- <q> ::= any one of the 128 ASCII characters except <CR>,
- <LF>, quote ("), or backslash ()
- <x> ::= any one of the 128 ASCII characters (no exceptions)
- <special> ::= "<" | ">" | "(" | ")" | "[" | "]" | "" | "."
- | "," | ";" | ":" | "@" """ | the control
- characters (ASCII codes 0 through 31 inclusive and
- 127)
- Note that the backslash, "", is a quote character, which is
- used to indicate that the next character is to be used
- literally (instead of its normal interpretation). For example,
- "Joe,Smith" could be used to indicate a single nine character
- user field with comma being the fourth character of the field.
- Hosts are generally known by names which are translated to
- addresses in each host. Note that the name elements of domains
- are the official names -- no use of nicknames or aliases is
- allowed.
- Sometimes a host is not known to the translation function and
- communication is blocked. To bypass this barrier two numeric
- forms are also allowed for host "names". One form is a decimal
- integer prefixed by a pound sign, "#", which indicates the
- number is the address of the host. Another form is four small
- decimal integers separated by dots and enclosed by brackets,
- e.g., "[123.255.37.2]", which indicates a 32-bit ARPA Internet
- Address in four 8-bit fields.
- Postel [Page 31]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- The time stamp line and the return path line are formally
- defined as follows:
- <return-path-line> ::= "Return-Path:" <SP><reverse-path><CRLF>
- <time-stamp-line> ::= "Received:" <SP> <stamp> <CRLF>
- <stamp> ::= <from-domain> <by-domain> <opt-info> ";"
- <daytime>
- <from-domain> ::= "FROM" <SP> <domain> <SP>
- <by-domain> ::= "BY" <SP> <domain> <SP>
- <opt-info> ::= [<via>] [<with>] [<id>] [<for>]
- <via> ::= "VIA" <SP> <link> <SP>
- <with> ::= "WITH" <SP> <protocol> <SP>
- <id> ::= "ID" <SP> <string> <SP>
- <for> ::= "FOR" <SP> <path> <SP>
- <link> ::= The standard names for links are registered with
- the Network Information Center.
- <protocol> ::= The standard names for protocols are
- registered with the Network Information Center.
- <daytime> ::= <SP> <date> <SP> <time>
- <date> ::= <dd> <SP> <mon> <SP> <yy>
- <time> ::= <hh> ":" <mm> ":" <ss> <SP> <zone>
- <dd> ::= the one or two decimal integer day of the month in
- the range 1 to 31.
- <mon> ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" |
- "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"
- <yy> ::= the two decimal integer year of the century in the
- range 00 to 99.
- [Page 32] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- <hh> ::= the two decimal integer hour of the day in the
- range 00 to 24.
- <mm> ::= the two decimal integer minute of the hour in the
- range 00 to 59.
- <ss> ::= the two decimal integer second of the minute in the
- range 00 to 59.
- <zone> ::= "UT" for Universal Time (the default) or other
- time zone designator (as in [2]).
- -------------------------------------------------------------
- Return Path Example
- Return-Path: <@CHARLIE.ARPA,@BAKER.ARPA:JOE@ABLE.ARPA>
- Example 9
- -------------------------------------------------------------
- -------------------------------------------------------------
- Time Stamp Line Example
- Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT
- Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25
- id M12345 for Smith@PDQ.ARPA ; 22 OCT 81 09:23:59 PDT
- Example 10
- -------------------------------------------------------------
- Postel [Page 33]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 4.2. SMTP REPLIES
- Replies to SMTP commands are devised to ensure the synchronization
- of requests and actions in the process of mail transfer, and to
- guarantee that the sender-SMTP always knows the state of the
- receiver-SMTP. Every command must generate exactly one reply.
- The details of the command-reply sequence are made explicit in
- Section 5.3 on Sequencing and Section 5.4 State Diagrams.
- An SMTP reply consists of a three digit number (transmitted as
- three alphanumeric characters) followed by some text. The number
- is intended for use by automata to determine what state to enter
- next; the text is meant for the human user. It is intended that
- the three digits contain enough encoded information that the
- sender-SMTP need not examine the text and may either discard it or
- pass it on to the user, as appropriate. In particular, the text
- may be receiver-dependent and context dependent, so there are
- likely to be varying texts for each reply code. A discussion of
- the theory of reply codes is given in Appendix E. Formally, a
- reply is defined to be the sequence: a three-digit code, <SP>,
- one line of text, and <CRLF>, or a multiline reply (as defined in
- Appendix E). Only the EXPN and HELP commands are expected to
- result in multiline replies in normal circumstances, however
- multiline replies are allowed for any command.
- [Page 34] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 4.2.1. REPLY CODES BY FUNCTION GROUPS
- 500 Syntax error, command unrecognized
- [This may include errors such as command line too long]
- 501 Syntax error in parameters or arguments
- 502 Command not implemented
- 503 Bad sequence of commands
- 504 Command parameter not implemented
- 211 System status, or system help reply
- 214 Help message
- [Information on how to use the receiver or the meaning of a
- particular non-standard command; this reply is useful only
- to the human user]
- 220 <domain> Service ready
- 221 <domain> Service closing transmission channel
- 421 <domain> Service not available,
- closing transmission channel
- [This may be a reply to any command if the service knows it
- must shut down]
- 250 Requested mail action okay, completed
- 251 User not local; will forward to <forward-path>
- 450 Requested mail action not taken: mailbox unavailable
- [E.g., mailbox busy]
- 550 Requested action not taken: mailbox unavailable
- [E.g., mailbox not found, no access]
- 451 Requested action aborted: error in processing
- 551 User not local; please try <forward-path>
- 452 Requested action not taken: insufficient system storage
- 552 Requested mail action aborted: exceeded storage allocation
- 553 Requested action not taken: mailbox name not allowed
- [E.g., mailbox syntax incorrect]
- 354 Start mail input; end with <CRLF>.<CRLF>
- 554 Transaction failed
- Postel [Page 35]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- 4.2.2. NUMERIC ORDER LIST OF REPLY CODES
- 211 System status, or system help reply
- 214 Help message
- [Information on how to use the receiver or the meaning of a
- particular non-standard command; this reply is useful only
- to the human user]
- 220 <domain> Service ready
- 221 <domain> Service closing transmission channel
- 250 Requested mail action okay, completed
- 251 User not local; will forward to <forward-path>
- 354 Start mail input; end with <CRLF>.<CRLF>
- 421 <domain> Service not available,
- closing transmission channel
- [This may be a reply to any command if the service knows it
- must shut down]
- 450 Requested mail action not taken: mailbox unavailable
- [E.g., mailbox busy]
- 451 Requested action aborted: local error in processing
- 452 Requested action not taken: insufficient system storage
- 500 Syntax error, command unrecognized
- [This may include errors such as command line too long]
- 501 Syntax error in parameters or arguments
- 502 Command not implemented
- 503 Bad sequence of commands
- 504 Command parameter not implemented
- 550 Requested action not taken: mailbox unavailable
- [E.g., mailbox not found, no access]
- 551 User not local; please try <forward-path>
- 552 Requested mail action aborted: exceeded storage allocation
- 553 Requested action not taken: mailbox name not allowed
- [E.g., mailbox syntax incorrect]
- 554 Transaction failed
- [Page 36] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 4.3. SEQUENCING OF COMMANDS AND REPLIES
- The communication between the sender and receiver is intended to
- be an alternating dialogue, controlled by the sender. As such,
- the sender issues a command and the receiver responds with a
- reply. The sender must wait for this response before sending
- further commands.
- One important reply is the connection greeting. Normally, a
- receiver will send a 220 "Service ready" reply when the connection
- is completed. The sender should wait for this greeting message
- before sending any commands.
- Note: all the greeting type replies have the official name of
- the server host as the first word following the reply code.
- For example,
- 220 <SP> USC-ISIF.ARPA <SP> Service ready <CRLF>
- The table below lists alternative success and failure replies for
- each command. These must be strictly adhered to; a receiver may
- substitute text in the replies, but the meaning and action implied
- by the code numbers and by the specific command reply sequence
- cannot be altered.
- COMMAND-REPLY SEQUENCES
- Each command is listed with its possible replies. The prefixes
- used before the possible replies are "P" for preliminary (not
- used in SMTP), "I" for intermediate, "S" for success, "F" for
- failure, and "E" for error. The 421 reply (service not
- available, closing transmission channel) may be given to any
- command if the SMTP-receiver knows it must shut down. This
- listing forms the basis for the State Diagrams in Section 4.4.
- CONNECTION ESTABLISHMENT
- S: 220
- F: 421
- HELO
- S: 250
- E: 500, 501, 504, 421
- S: 250
- F: 552, 451, 452
- E: 500, 501, 421
- Postel [Page 37]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- RCPT
- S: 250, 251
- F: 550, 551, 552, 553, 450, 451, 452
- E: 500, 501, 503, 421
- DATA
- I: 354 -> data -> S: 250
- F: 552, 554, 451, 452
- F: 451, 554
- E: 500, 501, 503, 421
- RSET
- S: 250
- E: 500, 501, 504, 421
- SEND
- S: 250
- F: 552, 451, 452
- E: 500, 501, 502, 421
- SOML
- S: 250
- F: 552, 451, 452
- E: 500, 501, 502, 421
- SAML
- S: 250
- F: 552, 451, 452
- E: 500, 501, 502, 421
- VRFY
- S: 250, 251
- F: 550, 551, 553
- E: 500, 501, 502, 504, 421
- EXPN
- S: 250
- F: 550
- E: 500, 501, 502, 504, 421
- HELP
- S: 211, 214
- E: 500, 501, 502, 504, 421
- NOOP
- S: 250
- E: 500, 421
- QUIT
- S: 221
- E: 500
- TURN
- S: 250
- F: 502
- E: 500, 503
- [Page 38] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 4.4. STATE DIAGRAMS
- Following are state diagrams for a simple-minded SMTP
- implementation. Only the first digit of the reply codes is used.
- There is one state diagram for each group of SMTP commands. The
- command groupings were determined by constructing a model for each
- command and then collecting together the commands with
- structurally identical models.
- For each command there are three possible outcomes: "success"
- (S), "failure" (F), and "error" (E). In the state diagrams below
- we use the symbol B for "begin", and the symbol W for "wait for
- reply".
- First, the diagram that represents most of the SMTP commands:
- 1,3 +---+
- ----------->| E |
- | +---+
- |
- +---+ cmd +---+ 2 +---+
- | B |---------->| W |---------->| S |
- +---+ +---+ +---+
- |
- | 4,5 +---+
- ----------->| F |
- +---+
- This diagram models the commands:
- HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP,
- NOOP, QUIT, TURN.
- Postel [Page 39]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- A more complex diagram models the DATA command:
- +---+ DATA +---+ 1,2 +---+
- | B |---------->| W |-------------------->| E |
- +---+ +---+ ------------>+---+
- 3| |4,5 |
- | | |
- -------------- ----- |
- | | | +---+
- | ---------- -------->| S |
- | | | | +---+
- | | ------------
- | | | |
- V 1,3| |2 |
- +---+ data +---+ --------------->+---+
- | |---------->| W | | F |
- +---+ +---+-------------------->+---+
- 4,5
- Note that the "data" here is a series of lines sent from the
- sender to the receiver with no response expected until the last
- line is sent.
- [Page 40] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- 4.5. DETAILS
- 4.5.1. MINIMUM IMPLEMENTATION
- In order to make SMTP workable, the following minimum
- implementation is required for all receivers:
- COMMANDS -- HELO
- RCPT
- DATA
- RSET
- NOOP
- QUIT
- 4.5.2. TRANSPARENCY
- Without some provision for data transparency the character
- sequence "<CRLF>.<CRLF>" ends the mail text and cannot be sent
- by the user. In general, users are not aware of such
- "forbidden" sequences. To allow all user composed text to be
- transmitted transparently the following procedures are used.
- 1. Before sending a line of mail text the sender-SMTP checks
- the first character of the line. If it is a period, one
- additional period is inserted at the beginning of the line.
- 2. When a line of mail text is received by the receiver-SMTP
- it checks the line. If the line is composed of a single
- period it is the end of mail. If the first character is a
- period and there are other characters on the line, the first
- character is deleted.
- The mail data may contain any of the 128 ASCII characters. All
- characters are to be delivered to the recipient's mailbox
- including format effectors and other control characters. If
- the transmission channel provides an 8-bit byte (octets) data
- stream, the 7-bit ASCII codes are transmitted right justified
- in the octets with the high order bits cleared to zero.
- In some systems it may be necessary to transform the data as
- it is received and stored. This may be necessary for hosts
- that use a different character set than ASCII as their local
- character set, or that store data in records rather than
- Postel [Page 41]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- strings. If such transforms are necessary, they must be
- reversible -- especially if such transforms are applied to
- mail being relayed.
- 4.5.3. SIZES
- There are several objects that have required minimum maximum
- sizes. That is, every implementation must be able to receive
- objects of at least these sizes, but must not send objects
- larger than these sizes.
- ****************************************************
- * *
- * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION *
- * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *
- * OF THESE OBJECTS SHOULD BE USED. *
- * *
- ****************************************************
- user
- The maximum total length of a user name is 64 characters.
- domain
- The maximum total length of a domain name or number is 64
- characters.
- path
- The maximum total length of a reverse-path or
- forward-path is 256 characters (including the punctuation
- and element separators).
- command line
- The maximum total length of a command line including the
- command word and the <CRLF> is 512 characters.
- reply line
- The maximum total length of a reply line including the
- reply code and the <CRLF> is 512 characters.
- [Page 42] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- text line
- The maximum total length of a text line including the
- <CRLF> is 1000 characters (but not counting the leading
- dot duplicated for transparency).
- recipients buffer
- The maximum total number of recipients that must be
- buffered is 100 recipients.
- ****************************************************
- * *
- * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION *
- * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *
- * OF THESE OBJECTS SHOULD BE USED. *
- * *
- ****************************************************
- Errors due to exceeding these limits may be reported by using
- the reply codes, for example:
- 500 Line too long.
- 501 Path too long
- 552 Too many recipients.
- 552 Too much mail data.
- Postel [Page 43]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- APPENDIX A
- TCP Transport service
- The Transmission Control Protocol [3] is used in the ARPA
- Internet, and in any network following the US DoD standards for
- internetwork protocols.
- Connection Establishment
- The SMTP transmission channel is a TCP connection established
- between the sender process port U and the receiver process port
- L. This single full duplex connection is used as the
- transmission channel. This protocol is assigned the service
- port 25 (31 octal), that is L=25.
- Data Transfer
- The TCP connection supports the transmission of 8-bit bytes.
- The SMTP data is 7-bit ASCII characters. Each character is
- transmitted as an 8-bit byte with the high-order bit cleared to
- zero.
- [Page 44] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- APPENDIX B
- NCP Transport service
- The ARPANET Host-to-Host Protocol [4] (implemented by the Network
- Control Program) may be used in the ARPANET.
- Connection Establishment
- The SMTP transmission channel is established via NCP between
- the sender process socket U and receiver process socket L. The
- Initial Connection Protocol [5] is followed resulting in a pair
- of simplex connections. This pair of connections is used as
- the transmission channel. This protocol is assigned the
- contact socket 25 (31 octal), that is L=25.
- Data Transfer
- The NCP data connections are established in 8-bit byte mode.
- The SMTP data is 7-bit ASCII characters. Each character is
- transmitted as an 8-bit byte with the high-order bit cleared to
- zero.
- Postel [Page 45]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- APPENDIX C
- NITS
- The Network Independent Transport Service [6] may be used.
- Connection Establishment
- The SMTP transmission channel is established via NITS between
- the sender process and receiver process. The sender process
- executes the CONNECT primitive, and the waiting receiver
- process executes the ACCEPT primitive.
- Data Transfer
- The NITS connection supports the transmission of 8-bit bytes.
- The SMTP data is 7-bit ASCII characters. Each character is
- transmitted as an 8-bit byte with the high-order bit cleared to
- zero.
- [Page 46] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- APPENDIX D
- X.25 Transport service
- It may be possible to use the X.25 service [7] as provided by the
- Public Data Networks directly, however, it is suggested that a
- reliable end-to-end protocol such as TCP be used on top of X.25
- connections.
- Postel [Page 47]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- APPENDIX E
- Theory of Reply Codes
- The three digits of the reply each have a special significance.
- The first digit denotes whether the response is good, bad or
- incomplete. An unsophisticated sender-SMTP will be able to
- determine its next action (proceed as planned, redo, retrench,
- etc.) by simply examining this first digit. A sender-SMTP that
- wants to know approximately what kind of error occurred (e.g.,
- mail system error, command syntax error) may examine the second
- digit, reserving the third digit for the finest gradation of
- information.
- There are five values for the first digit of the reply code:
- 1yz Positive Preliminary reply
- The command has been accepted, but the requested action
- is being held in abeyance, pending confirmation of the
- information in this reply. The sender-SMTP should send
- another command specifying whether to continue or abort
- the action.
- [Note: SMTP does not have any commands that allow this
- type of reply, and so does not have the continue or
- abort commands.]
- 2yz Positive Completion reply
- The requested action has been successfully completed. A
- new request may be initiated.
- 3yz Positive Intermediate reply
- The command has been accepted, but the requested action
- is being held in abeyance, pending receipt of further
- information. The sender-SMTP should send another command
- specifying this information. This reply is used in
- command sequence groups.
- 4yz Transient Negative Completion reply
- The command was not accepted and the requested action did
- not occur. However, the error condition is temporary and
- the action may be requested again. The sender should
- [Page 48] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- return to the beginning of the command sequence (if any).
- It is difficult to assign a meaning to "transient" when
- two different sites (receiver- and sender- SMTPs) must
- agree on the interpretation. Each reply in this category
- might have a different time value, but the sender-SMTP is
- encouraged to try again. A rule of thumb to determine if
- a reply fits into the 4yz or the 5yz category (see below)
- is that replies are 4yz if they can be repeated without
- any change in command form or in properties of the sender
- or receiver. (E.g., the command is repeated identically
- and the receiver does not put up a new implementation.)
- 5yz Permanent Negative Completion reply
- The command was not accepted and the requested action did
- not occur. The sender-SMTP is discouraged from repeating
- the exact request (in the same sequence). Even some
- "permanent" error conditions can be corrected, so the
- human user may want to direct the sender-SMTP to
- reinitiate the command sequence by direct action at some
- point in the future (e.g., after the spelling has been
- changed, or the user has altered the account status).
- The second digit encodes responses in specific categories:
- x0z Syntax -- These replies refer to syntax errors,
- syntactically correct commands that don't fit any
- functional category, and unimplemented or superfluous
- commands.
- x1z Information -- These are replies to requests for
- information, such as status or help.
- x2z Connections -- These are replies referring to the
- transmission channel.
- x3z Unspecified as yet.
- x4z Unspecified as yet.
- x5z Mail system -- These replies indicate the status of
- the receiver mail system vis-a-vis the requested
- transfer or other mail system action.
- The third digit gives a finer gradation of meaning in each
- category specified by the second digit. The list of replies
- Postel [Page 49]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- illustrates this. Each reply text is recommended rather than
- mandatory, and may even change according to the command with
- which it is associated. On the other hand, the reply codes
- must strictly follow the specifications in this section.
- Receiver implementations should not invent new codes for
- slightly different situations from the ones described here, but
- rather adapt codes already defined.
- For example, a command such as NOOP whose successful execution
- does not offer the sender-SMTP any new information will return
- a 250 reply. The response is 502 when the command requests an
- unimplemented non-site-specific action. A refinement of that
- is the 504 reply for a command that is implemented, but that
- requests an unimplemented parameter.
- The reply text may be longer than a single line; in these cases
- the complete text must be marked so the sender-SMTP knows when it
- can stop reading the reply. This requires a special format to
- indicate a multiple line reply.
- The format for multiline replies requires that every line,
- except the last, begin with the reply code, followed
- immediately by a hyphen, "-" (also known as minus), followed by
- text. The last line will begin with the reply code, followed
- immediately by <SP>, optionally some text, and <CRLF>.
- For example:
- 123-First line
- 123-Second line
- 123-234 text beginning with numbers
- 123 The last line
- In many cases the sender-SMTP then simply needs to search for
- the reply code followed by <SP> at the beginning of a line, and
- ignore all preceding lines. In a few cases, there is important
- data for the sender in the reply "text". The sender will know
- these cases from the current context.
- [Page 50] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- APPENDIX F
- Scenarios
- This section presents complete scenarios of several types of SMTP
- sessions.
- A Typical SMTP Transaction Scenario
- This SMTP example shows mail sent by Smith at host USC-ISIF, to
- Jones, Green, and Brown at host BBN-UNIX. Here we assume that
- host USC-ISIF contacts host BBN-UNIX directly. The mail is
- accepted for Jones and Brown. Green does not have a mailbox at
- host BBN-UNIX.
- -------------------------------------------------------------
- R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
- S: HELO USC-ISIF.ARPA
- R: 250 BBN-UNIX.ARPA
- S: MAIL FROM:<Smith@USC-ISIF.ARPA>
- R: 250 OK
- S: RCPT TO:<Jones@BBN-UNIX.ARPA>
- R: 250 OK
- S: RCPT TO:<Green@BBN-UNIX.ARPA>
- R: 550 No such user here
- S: RCPT TO:<Brown@BBN-UNIX.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 BBN-UNIX.ARPA Service closing transmission channel
- Scenario 1
- -------------------------------------------------------------
- Postel [Page 51]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- Aborted SMTP Transaction Scenario
- -------------------------------------------------------------
- R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready
- S: HELO ISI-VAXA.ARPA
- R: 250 MIT-Multics.ARPA
- S: MAIL FROM:<Smith@ISI-VAXA.ARPA>
- R: 250 OK
- S: RCPT TO:<Jones@MIT-Multics.ARPA>
- R: 250 OK
- S: RCPT TO:<Green@MIT-Multics.ARPA>
- R: 550 No such user here
- S: RSET
- R: 250 OK
- S: QUIT
- R: 221 MIT-Multics.ARPA Service closing transmission channel
- Scenario 2
- -------------------------------------------------------------
- [Page 52] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- Relayed Mail Scenario
- -------------------------------------------------------------
- Step 1 -- Source Host to Relay Host
- R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready
- S: HELO MIT-AI.ARPA
- R: 250 USC-ISIE.ARPA
- S: MAIL FROM:<JQP@MIT-AI.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:Jones@BBN-VAX.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Date: 2 Nov 81 22:33:44
- S: From: John Q. Public <JQP@MIT-AI.ARPA>
- S: Subject: The Next Meeting of the Board
- S: To: Jones@BBN-Vax.ARPA
- S:
- S: Bill:
- S: The next meeting of the board of directors will be
- S: on Tuesday.
- S: John.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 USC-ISIE.ARPA Service closing transmission channel
- Postel [Page 53]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- Step 2 -- Relay Host to Destination Host
- R: 220 BBN-VAX.ARPA Simple Mail Transfer Service Ready
- S: HELO USC-ISIE.ARPA
- R: 250 BBN-VAX.ARPA
- S: MAIL FROM:<@USC-ISIE.ARPA:JQP@MIT-AI.ARPA>
- R: 250 OK
- S: RCPT TO:<Jones@BBN-VAX.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Received: from MIT-AI.ARPA by USC-ISIE.ARPA ;
- 2 Nov 81 22:40:10 UT
- S: Date: 2 Nov 81 22:33:44
- S: From: John Q. Public <JQP@MIT-AI.ARPA>
- S: Subject: The Next Meeting of the Board
- S: To: Jones@BBN-Vax.ARPA
- S:
- S: Bill:
- S: The next meeting of the board of directors will be
- S: on Tuesday.
- S: John.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 USC-ISIE.ARPA Service closing transmission channel
- Scenario 3
- -------------------------------------------------------------
- [Page 54] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- Verifying and Sending Scenario
- -------------------------------------------------------------
- R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
- S: HELO MIT-MC.ARPA
- R: 250 SU-SCORE.ARPA
- S: VRFY Crispin
- R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>
- S: SEND FROM:<EAK@MIT-MC.ARPA>
- R: 250 OK
- S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 SU-SCORE.ARPA Service closing transmission channel
- Scenario 4
- -------------------------------------------------------------
- Postel [Page 55]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- Sending and Mailing Scenarios
- First the user's name is verified, then an attempt is made to
- send to the user's terminal. When that fails, the messages is
- mailed to the user's mailbox.
- -------------------------------------------------------------
- R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
- S: HELO MIT-MC.ARPA
- R: 250 SU-SCORE.ARPA
- S: VRFY Crispin
- R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>
- S: SEND FROM:<EAK@MIT-MC.ARPA>
- R: 250 OK
- S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>
- R: 450 User not active now
- S: RSET
- R: 250 OK
- S: MAIL FROM:<EAK@MIT-MC.ARPA>
- R: 250 OK
- S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 SU-SCORE.ARPA Service closing transmission channel
- Scenario 5
- -------------------------------------------------------------
- [Page 56] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- Doing the preceding scenario more efficiently.
- -------------------------------------------------------------
- R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
- S: HELO MIT-MC.ARPA
- R: 250 SU-SCORE.ARPA
- S: VRFY Crispin
- R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>
- S: SOML FROM:<EAK@MIT-MC.ARPA>
- R: 250 OK
- S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>
- R: 250 User not active now, so will do mail.
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 SU-SCORE.ARPA Service closing transmission channel
- Scenario 6
- -------------------------------------------------------------
- Postel [Page 57]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- Mailing List Scenario
- First each of two mailing lists are expanded in separate sessions
- with different hosts. Then the message is sent to everyone that
- appeared on either list (but no duplicates) via a relay host.
- -------------------------------------------------------------
- Step 1 -- Expanding the First List
- R: 220 MIT-AI.ARPA Simple Mail Transfer Service Ready
- S: HELO SU-SCORE.ARPA
- R: 250 MIT-AI.ARPA
- S: EXPN Example-People
- R: 250-<ABC@MIT-MC.ARPA>
- R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>
- R: 250-Xenon Y. Zither <XYZ@MIT-AI.ARPA>
- R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
- R: 250-<joe@foo-unix.ARPA>
- R: 250 <xyz@bar-unix.ARPA>
- S: QUIT
- R: 221 MIT-AI.ARPA Service closing transmission channel
- [Page 58] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- Step 2 -- Expanding the Second List
- R: 220 MIT-MC.ARPA Simple Mail Transfer Service Ready
- S: HELO SU-SCORE.ARPA
- R: 250 MIT-MC.ARPA
- S: EXPN Interested-Parties
- R: 250-Al Calico <ABC@MIT-MC.ARPA>
- R: 250-<XYZ@MIT-AI.ARPA>
- R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
- R: 250-<fred@BBN-UNIX.ARPA>
- R: 250 <xyz@bar-unix.ARPA>
- S: QUIT
- R: 221 MIT-MC.ARPA Service closing transmission channel
- Postel [Page 59]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- Step 3 -- Mailing to All via a Relay Host
- R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready
- S: HELO SU-SCORE.ARPA
- R: 250 USC-ISIE.ARPA
- S: MAIL FROM:<Account.Person@SU-SCORE.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:ABC@MIT-MC.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:Fonebone@USC-ISIQA.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:XYZ@MIT-AI.ARPA>
- R: 250 OK
- S: RCPT
- TO:<@USC-ISIE.ARPA,@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:joe@FOO-UNIX.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:xyz@BAR-UNIX.ARPA>
- R: 250 OK
- S: RCPT TO:<@USC-ISIE.ARPA:fred@BBN-UNIX.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 USC-ISIE.ARPA Service closing transmission channel
- Scenario 7
- -------------------------------------------------------------
- [Page 60] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- Forwarding Scenarios
- -------------------------------------------------------------
- R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready
- S: HELO LBL-UNIX.ARPA
- R: 250 USC-ISIF.ARPA
- S: MAIL FROM:<mo@LBL-UNIX.ARPA>
- R: 250 OK
- S: RCPT TO:<fred@USC-ISIF.ARPA>
- R: 251 User not local; will forward to <Jones@USC-ISI.ARPA>
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 USC-ISIF.ARPA Service closing transmission channel
- Scenario 8
- -------------------------------------------------------------
- Postel [Page 61]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- -------------------------------------------------------------
- Step 1 -- Trying the Mailbox at the First Host
- R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready
- S: HELO LBL-UNIX.ARPA
- R: 250 USC-ISIF.ARPA
- S: MAIL FROM:<mo@LBL-UNIX.ARPA>
- R: 250 OK
- S: RCPT TO:<fred@USC-ISIF.ARPA>
- R: 251 User not local; will forward to <Jones@USC-ISI.ARPA>
- S: RSET
- R: 250 OK
- S: QUIT
- R: 221 USC-ISIF.ARPA Service closing transmission channel
- Step 2 -- Delivering the Mail at the Second Host
- R: 220 USC-ISI.ARPA Simple Mail Transfer Service Ready
- S: HELO LBL-UNIX.ARPA
- R: 250 USC-ISI.ARPA
- S: MAIL FROM:<mo@LBL-UNIX.ARPA>
- R: 250 OK
- S: RCPT TO:<Jones@USC-ISI.ARPA>
- R: OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 USC-ISI.ARPA Service closing transmission channel
- Scenario 9
- -------------------------------------------------------------
- [Page 62] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- Too Many Recipients Scenario
- -------------------------------------------------------------
- R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready
- S: HELO USC-ISIF.ARPA
- R: 250 BERKELEY.ARPA
- S: MAIL FROM:<Postel@USC-ISIF.ARPA>
- R: 250 OK
- S: RCPT TO:<fabry@BERKELEY.ARPA>
- R: 250 OK
- S: RCPT TO:<eric@BERKELEY.ARPA>
- R: 552 Recipient storage full, try again in another transaction
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: MAIL FROM:<Postel@USC-ISIF.ARPA>
- R: 250 OK
- S: RCPT TO:<eric@BERKELEY.ARPA>
- R: 250 OK
- S: DATA
- R: 354 Start mail input; end with <CRLF>.<CRLF>
- S: Blah blah blah...
- S: ...etc. etc. etc.
- S: .
- R: 250 OK
- S: QUIT
- R: 221 BERKELEY.ARPA Service closing transmission channel
- Scenario 10
- -------------------------------------------------------------
- Note that a real implementation must handle many recipients as
- specified in Section 4.5.3.
- Postel [Page 63]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- GLOSSARY
- ASCII
- American Standard Code for Information Interchange [1].
- command
- A request for a mail service action sent by the sender-SMTP to the
- receiver-SMTP.
- domain
- The hierarchially structured global character string address of a
- host computer in the mail system.
- end of mail data indication
- A special sequence of characters that indicates the end of the
- mail data. In particular, the five characters carriage return,
- line feed, period, carriage return, line feed, in that order.
- host
- A computer in the internetwork environment on which mailboxes or
- SMTP processes reside.
- line
- A a sequence of ASCII characters ending with a <CRLF>.
- mail data
- A sequence of ASCII characters of arbitrary length, which conforms
- to the standard set in the Standard for the Format of ARPA
- Internet Text Messages (RFC 822 [2]).
- mailbox
- A character string (address) which identifies a user to whom mail
- is to be sent. Mailbox normally consists of the host and user
- specifications. The standard mailbox naming convention is defined
- to be "user@domain". Additionally, the "container" in which mail
- is stored.
- [Page 64] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- receiver-SMTP process
- A process which transfers mail in cooperation with a sender-SMTP
- process. It waits for a connection to be established via the
- transport service. It receives SMTP commands from the
- sender-SMTP, sends replies, and performs the specified operations.
- reply
- A reply is an acknowledgment (positive or negative) sent from
- receiver to sender via the transmission channel in response to a
- command. The general form of a reply is a completion code
- (including error codes) followed by a text string. The codes are
- for use by programs and the text is usually intended for human
- users.
- sender-SMTP process
- A process which transfers mail in cooperation with a receiver-SMTP
- process. A local language may be used in the user interface
- command/reply dialogue. The sender-SMTP initiates the transport
- service connection. It initiates SMTP commands, receives replies,
- and governs the transfer of mail.
- session
- The set of exchanges that occur while the transmission channel is
- open.
- transaction
- The set of exchanges required for one message to be transmitted
- for one or more recipients.
- transmission channel
- A full-duplex communication path between a sender-SMTP and a
- receiver-SMTP for the exchange of commands, replies, and mail
- text.
- transport service
- Any reliable stream-oriented data communication services. For
- example, NCP, TCP, NITS.
- Postel [Page 65]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- user
- A human being (or a process on behalf of a human being) wishing to
- obtain mail transfer service. In addition, a recipient of
- computer mail.
- word
- A sequence of printing characters.
- <CRLF>
- The characters carriage return and line feed (in that order).
- <SP>
- The space character.
- [Page 66] Postel
- RFC 821 August 1982
- Simple Mail Transfer Protocol
- REFERENCES
- [1] ASCII
- ASCII, "USA Code for Information Interchange", United States of
- America Standards Institute, X3.4, 1968. Also in: Feinler, E.
- and J. Postel, eds., "ARPANET Protocol Handbook", NIC 7104, for
- the Defense Communications Agency by SRI International, Menlo
- Park, California, Revised January 1978.
- [2] RFC 822
- Crocker, D., "Standard for the Format of ARPA Internet Text
- Messages," RFC 822, Department of Electrical Engineering,
- University of Delaware, August 1982.
- [3] TCP
- Postel, J., ed., "Transmission Control Protocol - DARPA Internet
- Program Protocol Specification", RFC 793, USC/Information Sciences
- Institute, NTIS AD Number A111091, September 1981. Also in:
- Feinler, E. and J. Postel, eds., "Internet Protocol Transition
- Workbook", SRI International, Menlo Park, California, March 1982.
- [4] NCP
- McKenzie,A., "Host/Host Protocol for the ARPA Network", NIC 8246,
- January 1972. Also in: Feinler, E. and J. Postel, eds., "ARPANET
- Protocol Handbook", NIC 7104, for the Defense Communications
- Agency by SRI International, Menlo Park, California, Revised
- January 1978.
- [5] Initial Connection Protocol
- Postel, J., "Official Initial Connection Protocol", NIC 7101,
- 11 June 1971. Also in: Feinler, E. and J. Postel, eds., "ARPANET
- Protocol Handbook", NIC 7104, for the Defense Communications
- Agency by SRI International, Menlo Park, California, Revised
- January 1978.
- [6] NITS
- PSS/SG3, "A Network Independent Transport Service", Study Group 3,
- The Post Office PSS Users Group, February 1980. Available from
- the DCPU, National Physical Laboratory, Teddington, UK.
- Postel [Page 67]
- August 1982 RFC 821
- Simple Mail Transfer Protocol
- [7] X.25
- CCITT, "Recommendation X.25 - Interface Between Data Terminal
- Equipment (DTE) and Data Circuit-terminating Equipment (DCE) for
- Terminals Operating in the Packet Mode on Public Data Networks,"
- CCITT Orange Book, Vol. VIII.2, International Telephone and
- Telegraph Consultative Committee, Geneva, 1976.
- [Page 68] Postel