Annotation of 42BSD/usr.lib/sendmail/doc/rfc821.lpr, revision 1.1
1.1 ! root 1:
! 2:
! 3:
! 4: RFC 821
! 5:
! 6:
! 7:
! 8:
! 9:
! 10: SIMPLE MAIL TRANSFER PROTOCOL
! 11:
! 12:
! 13:
! 14: Jonathan B. Postel
! 15:
! 16:
! 17:
! 18:
! 19:
! 20:
! 21:
! 22:
! 23:
! 24:
! 25:
! 26:
! 27:
! 28:
! 29:
! 30:
! 31:
! 32:
! 33:
! 34:
! 35:
! 36:
! 37:
! 38:
! 39:
! 40:
! 41:
! 42:
! 43:
! 44: August 1982
! 45:
! 46:
! 47:
! 48: Information Sciences Institute
! 49: University of Southern California
! 50: 4676 Admiralty Way
! 51: Marina del Rey, California 90291
! 52:
! 53: (213) 822-1511
! 54:
! 55:
! 56:
! 57:
! 58: RFC 821 August 1982
! 59: Simple Mail Transfer Protocol
! 60:
! 61:
! 62:
! 63: TABLE OF CONTENTS
! 64:
! 65: 1. INTRODUCTION .................................................. 1
! 66:
! 67: 2. THE SMTP MODEL ................................................ 2
! 68:
! 69: 3. THE SMTP PROCEDURE ............................................ 4
! 70:
! 71: 3.1. Mail ..................................................... 4
! 72: 3.2. Forwarding ............................................... 7
! 73: 3.3. Verifying and Expanding .................................. 8
! 74: 3.4. Sending and Mailing ..................................... 11
! 75: 3.5. Opening and Closing ..................................... 13
! 76: 3.6. Relaying ................................................ 14
! 77: 3.7. Domains ................................................. 17
! 78: 3.8. Changing Roles .......................................... 18
! 79:
! 80: 4. THE SMTP SPECIFICATIONS ...................................... 19
! 81:
! 82: 4.1. SMTP Commands ........................................... 19
! 83: 4.1.1. Command Semantics ..................................... 19
! 84: 4.1.2. Command Syntax ........................................ 27
! 85: 4.2. SMTP Replies ............................................ 34
! 86: 4.2.1. Reply Codes by Function Group ......................... 35
! 87: 4.2.2. Reply Codes in Numeric Order .......................... 36
! 88: 4.3. Sequencing of Commands and Replies ...................... 37
! 89: 4.4. State Diagrams .......................................... 39
! 90: 4.5. Details ................................................. 41
! 91: 4.5.1. Minimum Implementation ................................ 41
! 92: 4.5.2. Transparency .......................................... 41
! 93: 4.5.3. Sizes ................................................. 42
! 94:
! 95: APPENDIX A: TCP ................................................. 44
! 96: APPENDIX B: NCP ................................................. 45
! 97: APPENDIX C: NITS ................................................ 46
! 98: APPENDIX D: X.25 ................................................ 47
! 99: APPENDIX E: Theory of Reply Codes ............................... 48
! 100: APPENDIX F: Scenarios ........................................... 51
! 101:
! 102: GLOSSARY ......................................................... 64
! 103:
! 104: REFERENCES ....................................................... 67
! 105:
! 106:
! 107:
! 108:
! 109: Network Working Group J. Postel
! 110: Request for Comments: DRAFT ISI
! 111: Replaces: RFC 788, 780, 772 August 1982
! 112:
! 113: SIMPLE MAIL TRANSFER PROTOCOL
! 114:
! 115:
! 116: 1. INTRODUCTION
! 117:
! 118: The objective of Simple Mail Transfer Protocol (SMTP) is to transfer
! 119: mail reliably and efficiently.
! 120:
! 121: SMTP is independent of the particular transmission subsystem and
! 122: requires only a reliable ordered data stream channel. Appendices A,
! 123: B, C, and D describe the use of SMTP with various transport services.
! 124: A Glossary provides the definitions of terms as used in this
! 125: document.
! 126:
! 127: An important feature of SMTP is its capability to relay mail across
! 128: transport service environments. A transport service provides an
! 129: interprocess communication environment (IPCE). An IPCE may cover one
! 130: network, several networks, or a subset of a network. It is important
! 131: to realize that transport systems (or IPCEs) are not one-to-one with
! 132: networks. A process can communicate directly with another process
! 133: through any mutually known IPCE. Mail is an application or use of
! 134: interprocess communication. Mail can be communicated between
! 135: processes in different IPCEs by relaying through a process connected
! 136: to two (or more) IPCEs. More specifically, mail can be relayed
! 137: between hosts on different transport systems by a host on both
! 138: transport systems.
! 139:
! 140:
! 141:
! 142:
! 143:
! 144:
! 145:
! 146:
! 147:
! 148:
! 149:
! 150:
! 151:
! 152:
! 153:
! 154:
! 155:
! 156:
! 157:
! 158:
! 159:
! 160:
! 161:
! 162:
! 163: Postel [Page 1]
! 164:
! 165:
! 166:
! 167: August 1982 RFC 821
! 168: Simple Mail Transfer Protocol
! 169:
! 170:
! 171:
! 172: 2. THE SMTP MODEL
! 173:
! 174: The SMTP design is based on the following model of communication: as
! 175: the result of a user mail request, the sender-SMTP establishes a
! 176: two-way transmission channel to a receiver-SMTP. The receiver-SMTP
! 177: may be either the ultimate destination or an intermediate. SMTP
! 178: commands are generated by the sender-SMTP and sent to the
! 179: receiver-SMTP. SMTP replies are sent from the receiver-SMTP to the
! 180: sender-SMTP in response to the commands.
! 181:
! 182: Once the transmission channel is established, the SMTP-sender sends a
! 183: MAIL command indicating the sender of the mail. If the SMTP-receiver
! 184: can accept mail it responds with an OK reply. The SMTP-sender then
! 185: sends a RCPT command identifying a recipient of the mail. If the
! 186: SMTP-receiver can accept mail for that recipient it responds with an
! 187: OK reply; if not, it responds with a reply rejecting that recipient
! 188: (but not the whole mail transaction). The SMTP-sender and
! 189: SMTP-receiver may negotiate several recipients. When the recipients
! 190: have been negotiated the SMTP-sender sends the mail data, terminating
! 191: with a special sequence. If the SMTP-receiver successfully processes
! 192: the mail data it responds with an OK reply. The dialog is purposely
! 193: lock-step, one-at-a-time.
! 194:
! 195: -------------------------------------------------------------
! 196:
! 197:
! 198: +----------+ +----------+
! 199: +------+ | | | |
! 200: | User |<-->| | SMTP | |
! 201: +------+ | Sender- |Commands/Replies| Receiver-|
! 202: +------+ | SMTP |<-------------->| SMTP | +------+
! 203: | File |<-->| | and Mail | |<-->| File |
! 204: |System| | | | | |System|
! 205: +------+ +----------+ +----------+ +------+
! 206:
! 207:
! 208: Sender-SMTP Receiver-SMTP
! 209:
! 210: Model for SMTP Use
! 211:
! 212: Figure 1
! 213:
! 214: -------------------------------------------------------------
! 215:
! 216: The SMTP provides mechanisms for the transmission of mail; directly
! 217: from the sending user's host to the receiving user's host when the
! 218:
! 219:
! 220:
! 221: [Page 2] Postel
! 222:
! 223:
! 224:
! 225: RFC 821 August 1982
! 226: Simple Mail Transfer Protocol
! 227:
! 228:
! 229:
! 230: two host are connected to the same transport service, or via one or
! 231: more relay SMTP-servers when the source and destination hosts are not
! 232: connected to the same transport service.
! 233:
! 234: To be able to provide the relay capability the SMTP-server must be
! 235: supplied with the name of the ultimate destination host as well as
! 236: the destination mailbox name.
! 237:
! 238: The argument to the MAIL command is a reverse-path, which specifies
! 239: who the mail is from. The argument to the RCPT command is a
! 240: forward-path, which specifies who the mail is to. The forward-path
! 241: is a source route, while the reverse-path is a return route (which
! 242: may be used to return a message to the sender when an error occurs
! 243: with a relayed message).
! 244:
! 245: When the same message is sent to multiple recipients the SMTP
! 246: encourages the transmission of only one copy of the data for all the
! 247: recipients at the same destination host.
! 248:
! 249: The mail commands and replies have a rigid syntax. Replies also have
! 250: a numeric code. In the following, examples appear which use actual
! 251: commands and replies. The complete lists of commands and replies
! 252: appears in Section 4 on specifications.
! 253:
! 254: Commands and replies are not case sensitive. That is, a command or
! 255: reply word may be upper case, lower case, or any mixture of upper and
! 256: lower case. Note that this is not true of mailbox user names. For
! 257: some hosts the user name is case sensitive, and SMTP implementations
! 258: must take case to preserve the case of user names as they appear in
! 259: mailbox arguments. Host names are not case sensitive.
! 260:
! 261: Commands and replies are composed of characters from the ASCII
! 262: character set [1]. When the transport service provides an 8-bit byte
! 263: (octet) transmission channel, each 7-bit character is transmitted
! 264: right justified in an octet with the high order bit cleared to zero.
! 265:
! 266: When specifying the general form of a command or reply, an argument
! 267: (or special symbol) will be denoted by a meta-linguistic variable (or
! 268: constant), for example, "<string>" or "<reverse-path>". Here the
! 269: angle brackets indicate these are meta-linguistic variables.
! 270: However, some arguments use the angle brackets literally. For
! 271: example, an actual reverse-path is enclosed in angle brackets, i.e.,
! 272: "<[email protected]>" is an instance of <reverse-path> (the
! 273: angle brackets are actually transmitted in the command or reply).
! 274:
! 275:
! 276:
! 277:
! 278:
! 279: Postel [Page 3]
! 280:
! 281:
! 282:
! 283: August 1982 RFC 821
! 284: Simple Mail Transfer Protocol
! 285:
! 286:
! 287:
! 288: 3. THE SMTP PROCEDURES
! 289:
! 290: This section presents the procedures used in SMTP in several parts.
! 291: First comes the basic mail procedure defined as a mail transaction.
! 292: Following this are descriptions of forwarding mail, verifying mailbox
! 293: names and expanding mailing lists, sending to terminals instead of or
! 294: in combination with mailboxes, and the opening and closing exchanges.
! 295: At the end of this section are comments on relaying, a note on mail
! 296: domains, and a discussion of changing roles. Throughout this section
! 297: are examples of partial command and reply sequences, several complete
! 298: scenarios are presented in Appendix F.
! 299:
! 300: 3.1. MAIL
! 301:
! 302: There are three steps to SMTP mail transactions. The transaction
! 303: is started with a MAIL command which gives the sender
! 304: identification. A series of one or more RCPT commands follows
! 305: giving the receiver information. Then a DATA command gives the
! 306: mail data. And finally, the end of mail data indicator confirms
! 307: the transaction.
! 308:
! 309: The first step in the procedure is the MAIL command. The
! 310: <reverse-path> contains the source mailbox.
! 311:
! 312: MAIL <SP> FROM:<reverse-path> <CRLF>
! 313:
! 314: This command tells the SMTP-receiver that a new mail
! 315: transaction is starting and to reset all its state tables and
! 316: buffers, including any recipients or mail data. It gives the
! 317: reverse-path which can be used to report errors. If accepted,
! 318: the receiver-SMTP returns a 250 OK reply.
! 319:
! 320: The <reverse-path> can contain more than just a mailbox. The
! 321: <reverse-path> is a reverse source routing list of hosts and
! 322: source mailbox. The first host in the <reverse-path> should be
! 323: the host sending this command.
! 324:
! 325: The second step in the procedure is the RCPT command.
! 326:
! 327: RCPT <SP> TO:<forward-path> <CRLF>
! 328:
! 329: This command gives a forward-path identifying one recipient.
! 330: If accepted, the receiver-SMTP returns a 250 OK reply, and
! 331: stores the forward-path. If the recipient is unknown the
! 332: receiver-SMTP returns a 550 Failure reply. This second step of
! 333: the procedure can be repeated any number of times.
! 334:
! 335:
! 336:
! 337: [Page 4] Postel
! 338:
! 339:
! 340:
! 341: RFC 821 August 1982
! 342: Simple Mail Transfer Protocol
! 343:
! 344:
! 345:
! 346: The <forward-path> can contain more than just a mailbox. The
! 347: <forward-path> is a source routing list of hosts and the
! 348: destination mailbox. The first host in the <forward-path>
! 349: should be the host receiving this command.
! 350:
! 351: The third step in the procedure is the DATA command.
! 352:
! 353: DATA <CRLF>
! 354:
! 355: If accepted, the receiver-SMTP returns a 354 Intermediate reply
! 356: and considers all succeeding lines to be the message text.
! 357: When the end of text is received and stored the SMTP-receiver
! 358: sends a 250 OK reply.
! 359:
! 360: Since the mail data is sent on the transmission channel the end
! 361: of the mail data must be indicated so that the command and
! 362: reply dialog can be resumed. SMTP indicates the end of the
! 363: mail data by sending a line containing only a period. A
! 364: transparency procedure is used to prevent this from interfering
! 365: with the user's text (see Section 4.5.2).
! 366:
! 367: Please note that the mail data includes the memo header
! 368: items such as Date, Subject, To, Cc, From [2].
! 369:
! 370: The end of mail data indicator also confirms the mail
! 371: transaction and tells the receiver-SMTP to now process the
! 372: stored recipients and mail data. If accepted, the
! 373: receiver-SMTP returns a 250 OK reply. The DATA command should
! 374: fail only if the mail transaction was incomplete (for example,
! 375: no recipients), or if resources are not available.
! 376:
! 377: The above procedure is an example of a mail transaction. These
! 378: commands must be used only in the order discussed above.
! 379: Example 1 (below) illustrates the use of these commands in a mail
! 380: transaction.
! 381:
! 382:
! 383:
! 384:
! 385:
! 386:
! 387:
! 388:
! 389:
! 390:
! 391:
! 392:
! 393:
! 394:
! 395: Postel [Page 5]
! 396:
! 397:
! 398:
! 399: August 1982 RFC 821
! 400: Simple Mail Transfer Protocol
! 401:
! 402:
! 403:
! 404: -------------------------------------------------------------
! 405:
! 406: Example of the SMTP Procedure
! 407:
! 408: This SMTP example shows mail sent by Smith at host Alpha.ARPA,
! 409: to Jones, Green, and Brown at host Beta.ARPA. Here we assume
! 410: that host Alpha contacts host Beta directly.
! 411:
! 412: S: MAIL FROM:<[email protected]>
! 413: R: 250 OK
! 414:
! 415: S: RCPT TO:<[email protected]>
! 416: R: 250 OK
! 417:
! 418: S: RCPT TO:<[email protected]>
! 419: R: 550 No such user here
! 420:
! 421: S: RCPT TO:<[email protected]>
! 422: R: 250 OK
! 423:
! 424: S: DATA
! 425: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 426: S: Blah blah blah...
! 427: S: ...etc. etc. etc.
! 428: S: <CRLF>.<CRLF>
! 429: R: 250 OK
! 430:
! 431: The mail has now been accepted for Jones and Brown. Green did
! 432: not have a mailbox at host Beta.
! 433:
! 434: Example 1
! 435:
! 436: -------------------------------------------------------------
! 437:
! 438:
! 439:
! 440:
! 441:
! 442:
! 443:
! 444:
! 445:
! 446:
! 447:
! 448:
! 449:
! 450:
! 451:
! 452:
! 453: [Page 6] Postel
! 454:
! 455:
! 456:
! 457: RFC 821 August 1982
! 458: Simple Mail Transfer Protocol
! 459:
! 460:
! 461:
! 462: 3.2. FORWARDING
! 463:
! 464: There are some cases where the destination information in the
! 465: <forward-path> is incorrect, but the receiver-SMTP knows the
! 466: correct destination. In such cases, one of the following replies
! 467: should be used to allow the sender to contact the correct
! 468: destination.
! 469:
! 470: 251 User not local; will forward to <forward-path>
! 471:
! 472: This reply indicates that the receiver-SMTP knows the user's
! 473: mailbox is on another host and indicates the correct
! 474: forward-path to use in the future. Note that either the
! 475: host or user or both may be different. The receiver takes
! 476: responsibility for delivering the message.
! 477:
! 478: 551 User not local; please try <forward-path>
! 479:
! 480: This reply indicates that the receiver-SMTP knows the user's
! 481: mailbox is on another host and indicates the correct
! 482: forward-path to use. Note that either the host or user or
! 483: both may be different. The receiver refuses to accept mail
! 484: for this user, and the sender must either redirect the mail
! 485: according to the information provided or return an error
! 486: response to the originating user.
! 487:
! 488: Example 2 illustrates the use of these responses.
! 489:
! 490: -------------------------------------------------------------
! 491:
! 492: Example of Forwarding
! 493:
! 494: Either
! 495:
! 496: S: RCPT TO:<[email protected]>
! 497: R: 251 User not local; will forward to <[email protected]>
! 498:
! 499: Or
! 500:
! 501: S: RCPT TO:<[email protected]>
! 502: R: 551 User not local; please try <[email protected]>
! 503:
! 504: Example 2
! 505:
! 506: -------------------------------------------------------------
! 507:
! 508:
! 509:
! 510:
! 511: Postel [Page 7]
! 512:
! 513:
! 514:
! 515: August 1982 RFC 821
! 516: Simple Mail Transfer Protocol
! 517:
! 518:
! 519:
! 520: 3.3. VERIFYING AND EXPANDING
! 521:
! 522: SMTP provides as additional features, commands to verify a user
! 523: name or expand a mailing list. This is done with the VRFY and
! 524: EXPN commands, which have character string arguments. For the
! 525: VRFY command, the string is a user name, and the response may
! 526: include the full name of the user and must include the mailbox of
! 527: the user. For the EXPN command, the string identifies a mailing
! 528: list, and the multiline response may include the full name of the
! 529: users and must give the mailboxes on the mailing list.
! 530:
! 531: "User name" is a fuzzy term and used purposely. If a host
! 532: implements the VRFY or EXPN commands then at least local mailboxes
! 533: must be recognized as "user names". If a host chooses to
! 534: recognize other strings as "user names" that is allowed.
! 535:
! 536: In some hosts the distinction between a mailing list and an alias
! 537: for a single mailbox is a bit fuzzy, since a common data structure
! 538: may hold both types of entries, and it is possible to have mailing
! 539: lists of one mailbox. If a request is made to verify a mailing
! 540: list a positive response can be given if on receipt of a message
! 541: so addressed it will be delivered to everyone on the list,
! 542: otherwise an error should be reported (e.g., "550 That is a
! 543: mailing list, not a user"). If a request is made to expand a user
! 544: name a positive response can be formed by returning a list
! 545: containing one name, or an error can be reported (e.g., "550 That
! 546: is a user name, not a mailing list").
! 547:
! 548: In the case of a multiline reply (normal for EXPN) exactly one
! 549: mailbox is to be specified on each line of the reply. In the case
! 550: of an ambiguous request, for example, "VRFY Smith", where there
! 551: are two Smith's the response must be "553 User ambiguous".
! 552:
! 553: The case of verifying a user name is straightforward as shown in
! 554: example 3.
! 555:
! 556:
! 557:
! 558:
! 559:
! 560:
! 561:
! 562:
! 563:
! 564:
! 565:
! 566:
! 567:
! 568:
! 569: [Page 8] Postel
! 570:
! 571:
! 572:
! 573: RFC 821 August 1982
! 574: Simple Mail Transfer Protocol
! 575:
! 576:
! 577:
! 578: -------------------------------------------------------------
! 579:
! 580: Example of Verifying a User Name
! 581:
! 582: Either
! 583:
! 584: S: VRFY Smith
! 585: R: 250 Fred Smith <[email protected]>
! 586:
! 587: Or
! 588:
! 589: S: VRFY Smith
! 590: R: 251 User not local; will forward to <[email protected]>
! 591:
! 592: Or
! 593:
! 594: S: VRFY Jones
! 595: R: 550 String does not match anything.
! 596:
! 597: Or
! 598:
! 599: S: VRFY Jones
! 600: R: 551 User not local; please try <[email protected]>
! 601:
! 602: Or
! 603:
! 604: S: VRFY Gourzenkyinplatz
! 605: R: 553 User ambiguous.
! 606:
! 607: Example 3
! 608:
! 609: -------------------------------------------------------------
! 610:
! 611:
! 612:
! 613:
! 614:
! 615:
! 616:
! 617:
! 618:
! 619:
! 620:
! 621:
! 622:
! 623:
! 624:
! 625:
! 626:
! 627: Postel [Page 9]
! 628:
! 629:
! 630:
! 631: August 1982 RFC 821
! 632: Simple Mail Transfer Protocol
! 633:
! 634:
! 635:
! 636: The case of expanding a mailbox list requires a multiline reply as
! 637: shown in example 4.
! 638:
! 639: -------------------------------------------------------------
! 640:
! 641: Example of Expanding a Mailing List
! 642:
! 643: Either
! 644:
! 645: S: EXPN Example-People
! 646: R: 250-Jon Postel <[email protected]>
! 647: R: 250-Fred Fonebone <[email protected]>
! 648: R: 250-Sam Q. Smith <[email protected]>
! 649: R: 250-Quincy Smith <@USC-ISIF.ARPA:[email protected]>
! 650: R: 250-<[email protected]>
! 651: R: 250 <[email protected]>
! 652:
! 653: Or
! 654:
! 655: S: EXPN Executive-Washroom-List
! 656: R: 550 Access Denied to You.
! 657:
! 658: Example 4
! 659:
! 660: -------------------------------------------------------------
! 661:
! 662: The character string arguments of the VRFY and EXPN commands
! 663: cannot be further restricted due to the variety of implementations
! 664: of the user name and mailbox list concepts. On some systems it
! 665: may be appropriate for the argument of the EXPN command to be a
! 666: file name for a file containing a mailing list, but again there is
! 667: a variety of file naming conventions in the Internet.
! 668:
! 669: The VRFY and EXPN commands are not included in the minimum
! 670: implementation (Section 4.5.1), and are not required to work
! 671: across relays when they are implemented.
! 672:
! 673:
! 674:
! 675:
! 676:
! 677:
! 678:
! 679:
! 680:
! 681:
! 682:
! 683:
! 684:
! 685: [Page 10] Postel
! 686:
! 687:
! 688:
! 689: RFC 821 August 1982
! 690: Simple Mail Transfer Protocol
! 691:
! 692:
! 693:
! 694: 3.4. SENDING AND MAILING
! 695:
! 696: The main purpose of SMTP is to deliver messages to user's
! 697: mailboxes. A very similar service provided by some hosts is to
! 698: deliver messages to user's terminals (provided the user is active
! 699: on the host). The delivery to the user's mailbox is called
! 700: "mailing", the delivery to the user's terminal is called
! 701: "sending". Because in many hosts the implementation of sending is
! 702: nearly identical to the implementation of mailing these two
! 703: functions are combined in SMTP. However the sending commands are
! 704: not included in the required minimum implementation
! 705: (Section 4.5.1). Users should have the ability to control the
! 706: writing of messages on their terminals. Most hosts permit the
! 707: users to accept or refuse such messages.
! 708:
! 709: The following three command are defined to support the sending
! 710: options. These are used in the mail transaction instead of the
! 711: MAIL command and inform the receiver-SMTP of the special semantics
! 712: of this transaction:
! 713:
! 714: SEND <SP> FROM:<reverse-path> <CRLF>
! 715:
! 716: The SEND command requires that the mail data be delivered to
! 717: the user's terminal. If the user is not active (or not
! 718: accepting terminal messages) on the host a 450 reply may
! 719: returned to a RCPT command. The mail transaction is
! 720: successful if the message is delivered the terminal.
! 721:
! 722: SOML <SP> FROM:<reverse-path> <CRLF>
! 723:
! 724: The Send Or MaiL command requires that the mail data be
! 725: delivered to the user's terminal if the user is active (and
! 726: accepting terminal messages) on the host. If the user is
! 727: not active (or not accepting terminal messages) then the
! 728: mail data is entered into the user's mailbox. The mail
! 729: transaction is successful if the message is delivered either
! 730: to the terminal or the mailbox.
! 731:
! 732: SAML <SP> FROM:<reverse-path> <CRLF>
! 733:
! 734: The Send And MaiL command requires that the mail data be
! 735: delivered to the user's terminal if the user is active (and
! 736: accepting terminal messages) on the host. In any case the
! 737: mail data is entered into the user's mailbox. The mail
! 738: transaction is successful if the message is delivered the
! 739: mailbox.
! 740:
! 741:
! 742:
! 743: Postel [Page 11]
! 744:
! 745:
! 746:
! 747: August 1982 RFC 821
! 748: Simple Mail Transfer Protocol
! 749:
! 750:
! 751:
! 752: The same reply codes that are used for the MAIL commands are used
! 753: for these commands.
! 754:
! 755:
! 756:
! 757:
! 758:
! 759:
! 760:
! 761:
! 762:
! 763:
! 764:
! 765:
! 766:
! 767:
! 768:
! 769:
! 770:
! 771:
! 772:
! 773:
! 774:
! 775:
! 776:
! 777:
! 778:
! 779:
! 780:
! 781:
! 782:
! 783:
! 784:
! 785:
! 786:
! 787:
! 788:
! 789:
! 790:
! 791:
! 792:
! 793:
! 794:
! 795:
! 796:
! 797:
! 798:
! 799:
! 800:
! 801: [Page 12] Postel
! 802:
! 803:
! 804:
! 805: RFC 821 August 1982
! 806: Simple Mail Transfer Protocol
! 807:
! 808:
! 809:
! 810: 3.5. OPENING AND CLOSING
! 811:
! 812: At the time the transmission channel is opened there is an
! 813: exchange to ensure that the hosts are communicating with the hosts
! 814: they think they are.
! 815:
! 816: The following two commands are used in transmission channel
! 817: opening and closing:
! 818:
! 819: HELO <SP> <domain> <CRLF>
! 820:
! 821: QUIT <CRLF>
! 822:
! 823: In the HELO command the host sending the command identifies
! 824: itself; the command may be interpreted as saying "Hello, I am
! 825: <domain>".
! 826:
! 827: -------------------------------------------------------------
! 828:
! 829: Example of Connection Opening
! 830:
! 831: R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
! 832: S: HELO USC-ISIF.ARPA
! 833: R: 250 BBN-UNIX.ARPA
! 834:
! 835: Example 5
! 836:
! 837: -------------------------------------------------------------
! 838:
! 839: -------------------------------------------------------------
! 840:
! 841: Example of Connection Closing
! 842:
! 843: S: QUIT
! 844: R: 221 BBN-UNIX.ARPA Service closing transmission channel
! 845:
! 846: Example 6
! 847:
! 848: -------------------------------------------------------------
! 849:
! 850:
! 851:
! 852:
! 853:
! 854:
! 855:
! 856:
! 857:
! 858:
! 859: Postel [Page 13]
! 860:
! 861:
! 862:
! 863: August 1982 RFC 821
! 864: Simple Mail Transfer Protocol
! 865:
! 866:
! 867:
! 868: 3.6. RELAYING
! 869:
! 870: The forward-path may be a source route of the form
! 871: "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE are hosts. This
! 872: form is used to emphasize the distinction between an address and a
! 873: route. The mailbox is an absolute address, and the route is
! 874: information about how to get there. The two concepts should not
! 875: be confused.
! 876:
! 877: Conceptually the elements of the forward-path are moved to the
! 878: reverse-path as the message is relayed from one server-SMTP to
! 879: another. The reverse-path is a reverse source route, (i.e., a
! 880: source route from the current location of the message to the
! 881: originator of the message). When a server-SMTP deletes its
! 882: identifier from the forward-path and inserts it into the
! 883: reverse-path, it must use the name it is known by in the
! 884: environment it is sending into, not the environment the mail came
! 885: from, in case the server-SMTP is known by different names in
! 886: different environments.
! 887:
! 888: If when the message arrives at an SMTP the first element of the
! 889: forward-path is not the identifier of that SMTP the element is not
! 890: deleted from the forward-path and is used to determine the next
! 891: SMTP to send the message to. In any case, the SMTP adds its own
! 892: identifier to the reverse-path.
! 893:
! 894: Using source routing the receiver-SMTP receives mail to be relayed
! 895: to another server-SMTP The receiver-SMTP may accept or reject the
! 896: task of relaying the mail in the same way it accepts or rejects
! 897: mail for a local user. The receiver-SMTP transforms the command
! 898: arguments by moving its own identifier from the forward-path to
! 899: the beginning of the reverse-path. The receiver-SMTP then becomes
! 900: a sender-SMTP, establishes a transmission channel to the next SMTP
! 901: in the forward-path, and sends it the mail.
! 902:
! 903: The first host in the reverse-path should be the host sending the
! 904: SMTP commands, and the first host in the forward-path should be
! 905: the host receiving the SMTP commands.
! 906:
! 907: Notice that the forward-path and reverse-path appear in the SMTP
! 908: commands and replies, but not necessarily in the message. That
! 909: is, there is no need for these paths and especially this syntax to
! 910: appear in the "To:" , "From:", "CC:", etc. fields of the message
! 911: header.
! 912:
! 913: If a server-SMTP has accepted the task of relaying the mail and
! 914:
! 915:
! 916:
! 917: [Page 14] Postel
! 918:
! 919:
! 920:
! 921: RFC 821 August 1982
! 922: Simple Mail Transfer Protocol
! 923:
! 924:
! 925:
! 926: later finds that the forward-path is incorrect or that the mail
! 927: cannot be delivered for whatever reason, then it must construct an
! 928: "undeliverable mail" notification message and send it to the
! 929: originator of the undeliverable mail (as indicated by the
! 930: reverse-path).
! 931:
! 932: This notification message must be from the server-SMTP at this
! 933: host. Of course, server-SMTPs should not send notification
! 934: messages about problems with notification messages. One way to
! 935: prevent loops in error reporting is to specify a null reverse-path
! 936: in the MAIL command of a notification message. When such a
! 937: message is relayed it is permissible to leave the reverse-path
! 938: null. A MAIL command with a null reverse-path appears as follows:
! 939:
! 940: MAIL FROM:<>
! 941:
! 942: An undeliverable mail notification message is shown in example 7.
! 943: This notification is in response to a message originated by JOE at
! 944: HOSTW and sent via HOSTX to HOSTY with instructions to relay it on
! 945: to HOSTZ. What we see in the example is the transaction between
! 946: HOSTY and HOSTX, which is the first step in the return of the
! 947: notification message.
! 948:
! 949:
! 950:
! 951:
! 952:
! 953:
! 954:
! 955:
! 956:
! 957:
! 958:
! 959:
! 960:
! 961:
! 962:
! 963:
! 964:
! 965:
! 966:
! 967:
! 968:
! 969:
! 970:
! 971:
! 972:
! 973:
! 974:
! 975: Postel [Page 15]
! 976:
! 977:
! 978:
! 979: August 1982 RFC 821
! 980: Simple Mail Transfer Protocol
! 981:
! 982:
! 983:
! 984: -------------------------------------------------------------
! 985:
! 986: Example Undeliverable Mail Notification Message
! 987:
! 988: S: MAIL FROM:<>
! 989: R: 250 ok
! 990: S: RCPT TO:<@HOSTX.ARPA:[email protected]>
! 991: R: 250 ok
! 992: S: DATA
! 993: R: 354 send the mail data, end with .
! 994: S: Date: 23 Oct 81 11:22:33
! 995: S: From: [email protected]
! 996: S: To: [email protected]
! 997: S: Subject: Mail System Problem
! 998: S:
! 999: S: Sorry JOE, your message to [email protected] lost.
! 1000: S: HOSTZ.ARPA said this:
! 1001: S: "550 No Such User"
! 1002: S: .
! 1003: R: 250 ok
! 1004:
! 1005: Example 7
! 1006:
! 1007: -------------------------------------------------------------
! 1008:
! 1009:
! 1010:
! 1011:
! 1012:
! 1013:
! 1014:
! 1015:
! 1016:
! 1017:
! 1018:
! 1019:
! 1020:
! 1021:
! 1022:
! 1023:
! 1024:
! 1025:
! 1026:
! 1027:
! 1028:
! 1029:
! 1030:
! 1031:
! 1032:
! 1033: [Page 16] Postel
! 1034:
! 1035:
! 1036:
! 1037: RFC 821 August 1982
! 1038: Simple Mail Transfer Protocol
! 1039:
! 1040:
! 1041:
! 1042: 3.7. DOMAINS
! 1043:
! 1044: Domains are a recently introduced concept in the ARPA Internet
! 1045: mail system. The use of domains changes the address space from a
! 1046: flat global space of simple character string host names to a
! 1047: hierarchically structured rooted tree of global addresses. The
! 1048: host name is replaced by a domain and host designator which is a
! 1049: sequence of domain element strings separated by periods with the
! 1050: understanding that the domain elements are ordered from the most
! 1051: specific to the most general.
! 1052:
! 1053: For example, "USC-ISIF.ARPA", "Fred.Cambridge.UK", and
! 1054: "PC7.LCS.MIT.ARPA" might be host-and-domain identifiers.
! 1055:
! 1056: Whenever domain names are used in SMTP only the official names are
! 1057: used, the use of nicknames or aliases is not allowed.
! 1058:
! 1059:
! 1060:
! 1061:
! 1062:
! 1063:
! 1064:
! 1065:
! 1066:
! 1067:
! 1068:
! 1069:
! 1070:
! 1071:
! 1072:
! 1073:
! 1074:
! 1075:
! 1076:
! 1077:
! 1078:
! 1079:
! 1080:
! 1081:
! 1082:
! 1083:
! 1084:
! 1085:
! 1086:
! 1087:
! 1088:
! 1089:
! 1090:
! 1091: Postel [Page 17]
! 1092:
! 1093:
! 1094:
! 1095: August 1982 RFC 821
! 1096: Simple Mail Transfer Protocol
! 1097:
! 1098:
! 1099:
! 1100: 3.8. CHANGING ROLES
! 1101:
! 1102: The TURN command may be used to reverse the roles of the two
! 1103: programs communicating over the transmission channel.
! 1104:
! 1105: If program-A is currently the sender-SMTP and it sends the TURN
! 1106: command and receives an ok reply (250) then program-A becomes the
! 1107: receiver-SMTP.
! 1108:
! 1109: If program-B is currently the receiver-SMTP and it receives the
! 1110: TURN command and sends an ok reply (250) then program-B becomes
! 1111: the sender-SMTP.
! 1112:
! 1113: To refuse to change roles the receiver sends the 502 reply.
! 1114:
! 1115: Please note that this command is optional. It would not normally
! 1116: be used in situations where the transmission channel is TCP.
! 1117: However, when the cost of establishing the transmission channel is
! 1118: high, this command may be quite useful. For example, this command
! 1119: may be useful in supporting be mail exchange using the public
! 1120: switched telephone system as a transmission channel, especially if
! 1121: some hosts poll other hosts for mail exchanges.
! 1122:
! 1123:
! 1124:
! 1125:
! 1126:
! 1127:
! 1128:
! 1129:
! 1130:
! 1131:
! 1132:
! 1133:
! 1134:
! 1135:
! 1136:
! 1137:
! 1138:
! 1139:
! 1140:
! 1141:
! 1142:
! 1143:
! 1144:
! 1145:
! 1146:
! 1147:
! 1148:
! 1149: [Page 18] Postel
! 1150:
! 1151:
! 1152:
! 1153: RFC 821 August 1982
! 1154: Simple Mail Transfer Protocol
! 1155:
! 1156:
! 1157:
! 1158: 4. THE SMTP SPECIFICATIONS
! 1159:
! 1160: 4.1. SMTP COMMANDS
! 1161:
! 1162: 4.1.1. COMMAND SEMANTICS
! 1163:
! 1164: The SMTP commands define the mail transfer or the mail system
! 1165: function requested by the user. SMTP commands are character
! 1166: strings terminated by <CRLF>. The command codes themselves are
! 1167: alphabetic characters terminated by <SP> if parameters follow
! 1168: and <CRLF> otherwise. The syntax of mailboxes must conform to
! 1169: receiver site conventions. The SMTP commands are discussed
! 1170: below. The SMTP replies are discussed in the Section 4.2.
! 1171:
! 1172: A mail transaction involves several data objects which are
! 1173: communicated as arguments to different commands. The
! 1174: reverse-path is the argument of the MAIL command, the
! 1175: forward-path is the argument of the RCPT command, and the mail
! 1176: data is the argument of the DATA command. These arguments or
! 1177: data objects must be transmitted and held pending the
! 1178: confirmation communicated by the end of mail data indication
! 1179: which finalizes the transaction. The model for this is that
! 1180: distinct buffers are provided to hold the types of data
! 1181: objects, that is, there is a reverse-path buffer, a
! 1182: forward-path buffer, and a mail data buffer. Specific commands
! 1183: cause information to be appended to a specific buffer, or cause
! 1184: one or more buffers to be cleared.
! 1185:
! 1186: HELLO (HELO)
! 1187:
! 1188: This command is used to identify the sender-SMTP to the
! 1189: receiver-SMTP. The argument field contains the host name of
! 1190: the sender-SMTP.
! 1191:
! 1192: The receiver-SMTP identifies itself to the sender-SMTP in
! 1193: the connection greeting reply, and in the response to this
! 1194: command.
! 1195:
! 1196: This command and an OK reply to it confirm that both the
! 1197: sender-SMTP and the receiver-SMTP are in the initial state,
! 1198: that is, there is no transaction in progress and all state
! 1199: tables and buffers are cleared.
! 1200:
! 1201:
! 1202:
! 1203:
! 1204:
! 1205:
! 1206:
! 1207: Postel [Page 19]
! 1208:
! 1209:
! 1210:
! 1211: August 1982 RFC 821
! 1212: Simple Mail Transfer Protocol
! 1213:
! 1214:
! 1215:
! 1216: MAIL (MAIL)
! 1217:
! 1218: This command is used to initiate a mail transaction in which
! 1219: the mail data is delivered to one or more mailboxes. The
! 1220: argument field contains a reverse-path.
! 1221:
! 1222: The reverse-path consists of an optional list of hosts and
! 1223: the sender mailbox. When the list of hosts is present, it
! 1224: is a "reverse" source route and indicates that the mail was
! 1225: relayed through each host on the list (the first host in the
! 1226: list was the most recent relay). This list is used as a
! 1227: source route to return non-delivery notices to the sender.
! 1228: As each relay host adds itself to the beginning of the list,
! 1229: it must use its name as known in the IPCE to which it is
! 1230: relaying the mail rather than the IPCE from which the mail
! 1231: came (if they are different). In some types of error
! 1232: reporting messages (for example, undeliverable mail
! 1233: notifications) the reverse-path may be null (see Example 7).
! 1234:
! 1235: This command clears the reverse-path buffer, the
! 1236: forward-path buffer, and the mail data buffer; and inserts
! 1237: the reverse-path information from this command into the
! 1238: reverse-path buffer.
! 1239:
! 1240: RECIPIENT (RCPT)
! 1241:
! 1242: This command is used to identify an individual recipient of
! 1243: the mail data; multiple recipients are specified by multiple
! 1244: use of this command.
! 1245:
! 1246: The forward-path consists of an optional list of hosts and a
! 1247: required destination mailbox. When the list of hosts is
! 1248: present, it is a source route and indicates that the mail
! 1249: must be relayed to the next host on the list. If the
! 1250: receiver-SMTP does not implement the relay function it may
! 1251: user the same reply it would for an unknown local user
! 1252: (550).
! 1253:
! 1254: When mail is relayed, the relay host must remove itself from
! 1255: the beginning forward-path and put itself at the beginning
! 1256: of the reverse-path. When mail reaches its ultimate
! 1257: destination (the forward-path contains only a destination
! 1258: mailbox), the receiver-SMTP inserts it into the destination
! 1259: mailbox in accordance with its host mail conventions.
! 1260:
! 1261:
! 1262:
! 1263:
! 1264:
! 1265: [Page 20] Postel
! 1266:
! 1267:
! 1268:
! 1269: RFC 821 August 1982
! 1270: Simple Mail Transfer Protocol
! 1271:
! 1272:
! 1273:
! 1274: For example, mail received at relay host A with arguments
! 1275:
! 1276: FROM:<[email protected]>
! 1277: TO:<@HOSTA.ARPA,@HOSTB.ARPA:[email protected]>
! 1278:
! 1279: will be relayed on to host B with arguments
! 1280:
! 1281: FROM:<@HOSTA.ARPA:[email protected]>
! 1282: TO:<@HOSTB.ARPA:[email protected]>.
! 1283:
! 1284: This command causes its forward-path argument to be appended
! 1285: to the forward-path buffer.
! 1286:
! 1287: DATA (DATA)
! 1288:
! 1289: The receiver treats the lines following the command as mail
! 1290: data from the sender. This command causes the mail data
! 1291: from this command to be appended to the mail data buffer.
! 1292: The mail data may contain any of the 128 ASCII character
! 1293: codes.
! 1294:
! 1295: The mail data is terminated by a line containing only a
! 1296: period, that is the character sequence "<CRLF>.<CRLF>" (see
! 1297: Section 4.5.2 on Transparency). This is the end of mail
! 1298: data indication.
! 1299:
! 1300: The end of mail data indication requires that the receiver
! 1301: must now process the stored mail transaction information.
! 1302: This processing consumes the information in the reverse-path
! 1303: buffer, the forward-path buffer, and the mail data buffer,
! 1304: and on the completion of this command these buffers are
! 1305: cleared. If the processing is successful the receiver must
! 1306: send an OK reply. If the processing fails completely the
! 1307: receiver must send a failure reply.
! 1308:
! 1309: When the receiver-SMTP accepts a message either for relaying
! 1310: or for final delivery it inserts at the beginning of the
! 1311: mail data a time stamp line. The time stamp line indicates
! 1312: the identity of the host that sent the message, and the
! 1313: identity of the host that received the message (and is
! 1314: inserting this time stamp), and the date and time the
! 1315: message was received. Relayed messages will have multiple
! 1316: time stamp lines.
! 1317:
! 1318: When the receiver-SMTP makes the "final delivery" of a
! 1319: message it inserts at the beginning of the mail data a
! 1320:
! 1321:
! 1322:
! 1323: Postel [Page 21]
! 1324:
! 1325:
! 1326:
! 1327: August 1982 RFC 821
! 1328: Simple Mail Transfer Protocol
! 1329:
! 1330:
! 1331:
! 1332: return path line. The return path line preserves the
! 1333: information in the <reverse-path> from the MAIL command.
! 1334: Here, final delivery means the message leaves the SMTP
! 1335: world. Normally, this would mean it has been delivered to
! 1336: the destination user, but in some cases it may be further
! 1337: processed and transmitted by another mail system.
! 1338:
! 1339: It is possible for the mailbox in the return path be
! 1340: different from the actual sender's mailbox, for example,
! 1341: if error responses are to be delivered a special error
! 1342: handling mailbox rather than the message senders.
! 1343:
! 1344: The preceding two paragraphs imply that the final mail data
! 1345: will begin with a return path line, followed by one or more
! 1346: time stamp lines. These lines will be followed by the mail
! 1347: data header and body [2]. See Example 8.
! 1348:
! 1349: Special mention is needed of the response and further action
! 1350: required when the processing following the end of mail data
! 1351: indication is partially successful. This could arise if
! 1352: after accepting several recipients and the mail data, the
! 1353: receiver-SMTP finds that the mail data can be successfully
! 1354: delivered to some of the recipients, but it cannot be to
! 1355: others (for example, due to mailbox space allocation
! 1356: problems). In such a situation, the response to the DATA
! 1357: command must be an OK reply. But, the receiver-SMTP must
! 1358: compose and send an "undeliverable mail" notification
! 1359: message to the originator of the message. Either a single
! 1360: notification which lists all of the recipients that failed
! 1361: to get the message, or separate notification messages must
! 1362: be sent for each failed recipient (see Example 7). All
! 1363: undeliverable mail notification messages are sent using the
! 1364: MAIL command (even if they result from processing a SEND,
! 1365: SOML, or SAML command).
! 1366:
! 1367:
! 1368:
! 1369:
! 1370:
! 1371:
! 1372:
! 1373:
! 1374:
! 1375:
! 1376:
! 1377:
! 1378:
! 1379:
! 1380:
! 1381: [Page 22] Postel
! 1382:
! 1383:
! 1384:
! 1385: RFC 821 August 1982
! 1386: Simple Mail Transfer Protocol
! 1387:
! 1388:
! 1389:
! 1390: -------------------------------------------------------------
! 1391:
! 1392: Example of Return Path and Received Time Stamps
! 1393:
! 1394: Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:[email protected]>
! 1395: Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST
! 1396: Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST
! 1397: Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST
! 1398: Date: 27 Oct 81 15:01:01 PST
! 1399: From: [email protected]
! 1400: Subject: Improved Mailing System Installed
! 1401: To: [email protected]
! 1402:
! 1403: This is to inform you that ...
! 1404:
! 1405: Example 8
! 1406:
! 1407: -------------------------------------------------------------
! 1408:
! 1409: SEND (SEND)
! 1410:
! 1411: This command is used to initiate a mail transaction in which
! 1412: the mail data is delivered to one or more terminals. The
! 1413: argument field contains a reverse-path. This command is
! 1414: successful if the message is delivered to a terminal.
! 1415:
! 1416: The reverse-path consists of an optional list of hosts and
! 1417: the sender mailbox. When the list of hosts is present, it
! 1418: is a "reverse" source route and indicates that the mail was
! 1419: relayed through each host on the list (the first host in the
! 1420: list was the most recent relay). This list is used as a
! 1421: source route to return non-delivery notices to the sender.
! 1422: As each relay host adds itself to the beginning of the list,
! 1423: it must use its name as known in the IPCE to which it is
! 1424: relaying the mail rather than the IPCE from which the mail
! 1425: came (if they are different).
! 1426:
! 1427: This command clears the reverse-path buffer, the
! 1428: forward-path buffer, and the mail data buffer; and inserts
! 1429: the reverse-path information from this command into the
! 1430: reverse-path buffer.
! 1431:
! 1432: SEND OR MAIL (SOML)
! 1433:
! 1434: This command is used to initiate a mail transaction in which
! 1435: the mail data is delivered to one or more terminals or
! 1436:
! 1437:
! 1438:
! 1439: Postel [Page 23]
! 1440:
! 1441:
! 1442:
! 1443: August 1982 RFC 821
! 1444: Simple Mail Transfer Protocol
! 1445:
! 1446:
! 1447:
! 1448: mailboxes. For each recipient the mail data is delivered to
! 1449: the recipient's terminal if the recipient is active on the
! 1450: host (and accepting terminal messages), otherwise to the
! 1451: recipient's mailbox. The argument field contains a
! 1452: reverse-path. This command is successful if the message is
! 1453: delivered to a terminal or the mailbox.
! 1454:
! 1455: The reverse-path consists of an optional list of hosts and
! 1456: the sender mailbox. When the list of hosts is present, it
! 1457: is a "reverse" source route and indicates that the mail was
! 1458: relayed through each host on the list (the first host in the
! 1459: list was the most recent relay). This list is used as a
! 1460: source route to return non-delivery notices to the sender.
! 1461: As each relay host adds itself to the beginning of the list,
! 1462: it must use its name as known in the IPCE to which it is
! 1463: relaying the mail rather than the IPCE from which the mail
! 1464: came (if they are different).
! 1465:
! 1466: This command clears the reverse-path buffer, the
! 1467: forward-path buffer, and the mail data buffer; and inserts
! 1468: the reverse-path information from this command into the
! 1469: reverse-path buffer.
! 1470:
! 1471: SEND AND MAIL (SAML)
! 1472:
! 1473: This command is used to initiate a mail transaction in which
! 1474: the mail data is delivered to one or more terminals and
! 1475: mailboxes. For each recipient the mail data is delivered to
! 1476: the recipient's terminal if the recipient is active on the
! 1477: host (and accepting terminal messages), and for all
! 1478: recipients to the recipient's mailbox. The argument field
! 1479: contains a reverse-path. This command is successful if the
! 1480: message is delivered to the mailbox.
! 1481:
! 1482: The reverse-path consists of an optional list of hosts and
! 1483: the sender mailbox. When the list of hosts is present, it
! 1484: is a "reverse" source route and indicates that the mail was
! 1485: relayed through each host on the list (the first host in the
! 1486: list was the most recent relay). This list is used as a
! 1487: source route to return non-delivery notices to the sender.
! 1488: As each relay host adds itself to the beginning of the list,
! 1489: it must use its name as known in the IPCE to which it is
! 1490: relaying the mail rather than the IPCE from which the mail
! 1491: came (if they are different).
! 1492:
! 1493: This command clears the reverse-path buffer, the
! 1494:
! 1495:
! 1496:
! 1497: [Page 24] Postel
! 1498:
! 1499:
! 1500:
! 1501: RFC 821 August 1982
! 1502: Simple Mail Transfer Protocol
! 1503:
! 1504:
! 1505:
! 1506: forward-path buffer, and the mail data buffer; and inserts
! 1507: the reverse-path information from this command into the
! 1508: reverse-path buffer.
! 1509:
! 1510: RESET (RSET)
! 1511:
! 1512: This command specifies that the current mail transaction is
! 1513: to be aborted. Any stored sender, recipients, and mail data
! 1514: must be discarded, and all buffers and state tables cleared.
! 1515: The receiver must send an OK reply.
! 1516:
! 1517: VERIFY (VRFY)
! 1518:
! 1519: This command asks the receiver to confirm that the argument
! 1520: identifies a user. If it is a user name, the full name of
! 1521: the user (if known) and the fully specified mailbox are
! 1522: returned.
! 1523:
! 1524: This command has no effect on any of the reverse-path
! 1525: buffer, the forward-path buffer, or the mail data buffer.
! 1526:
! 1527: EXPAND (EXPN)
! 1528:
! 1529: This command asks the receiver to confirm that the argument
! 1530: identifies a mailing list, and if so, to return the
! 1531: membership of that list. The full name of the users (if
! 1532: known) and the fully specified mailboxes are returned in a
! 1533: multiline reply.
! 1534:
! 1535: This command has no effect on any of the reverse-path
! 1536: buffer, the forward-path buffer, or the mail data buffer.
! 1537:
! 1538: HELP (HELP)
! 1539:
! 1540: This command causes the receiver to send helpful information
! 1541: to the sender of the HELP command. The command may take an
! 1542: argument (e.g., any command name) and return more specific
! 1543: information as a response.
! 1544:
! 1545: This command has no effect on any of the reverse-path
! 1546: buffer, the forward-path buffer, or the mail data buffer.
! 1547:
! 1548:
! 1549:
! 1550:
! 1551:
! 1552:
! 1553:
! 1554:
! 1555: Postel [Page 25]
! 1556:
! 1557:
! 1558:
! 1559: August 1982 RFC 821
! 1560: Simple Mail Transfer Protocol
! 1561:
! 1562:
! 1563:
! 1564: NOOP (NOOP)
! 1565:
! 1566: This command does not affect any parameters or previously
! 1567: entered commands. It specifies no action other than that
! 1568: the receiver send an OK reply.
! 1569:
! 1570: This command has no effect on any of the reverse-path
! 1571: buffer, the forward-path buffer, or the mail data buffer.
! 1572:
! 1573: QUIT (QUIT)
! 1574:
! 1575: This command specifies that the receiver must send an OK
! 1576: reply, and then close the transmission channel.
! 1577:
! 1578: The receiver should not close the transmission channel until
! 1579: it receives and replies to a QUIT command (even if there was
! 1580: an error). The sender should not close the transmission
! 1581: channel until it send a QUIT command and receives the reply
! 1582: (even if there was an error response to a previous command).
! 1583: If the connection is closed prematurely the receiver should
! 1584: act as if a RSET command had been received (canceling any
! 1585: pending transaction, but not undoing any previously
! 1586: completed transaction), the sender should act as if the
! 1587: command or transaction in progress had received a temporary
! 1588: error (4xx).
! 1589:
! 1590: TURN (TURN)
! 1591:
! 1592: This command specifies that the receiver must either (1)
! 1593: send an OK reply and then take on the role of the
! 1594: sender-SMTP, or (2) send a refusal reply and retain the role
! 1595: of the receiver-SMTP.
! 1596:
! 1597: If program-A is currently the sender-SMTP and it sends the
! 1598: TURN command and receives an OK reply (250) then program-A
! 1599: becomes the receiver-SMTP. Program-A is then in the initial
! 1600: state as if the transmission channel just opened, and it
! 1601: then sends the 220 service ready greeting.
! 1602:
! 1603: If program-B is currently the receiver-SMTP and it receives
! 1604: the TURN command and sends an OK reply (250) then program-B
! 1605: becomes the sender-SMTP. Program-B is then in the initial
! 1606: state as if the transmission channel just opened, and it
! 1607: then expects to receive the 220 service ready greeting.
! 1608:
! 1609: To refuse to change roles the receiver sends the 502 reply.
! 1610:
! 1611:
! 1612:
! 1613: [Page 26] Postel
! 1614:
! 1615:
! 1616:
! 1617: RFC 821 August 1982
! 1618: Simple Mail Transfer Protocol
! 1619:
! 1620:
! 1621:
! 1622: There are restrictions on the order in which these command may
! 1623: be used.
! 1624:
! 1625: The first command in a session must be the HELO command.
! 1626: The HELO command may be used later in a session as well. If
! 1627: the HELO command argument is not acceptable a 501 failure
! 1628: reply must be returned and the receiver-SMTP must stay in
! 1629: the same state.
! 1630:
! 1631: The NOOP, HELP, EXPN, and VRFY commands can be used at any
! 1632: time during a session.
! 1633:
! 1634: The MAIL, SEND, SOML, or SAML commands begin a mail
! 1635: transaction. Once started a mail transaction consists of
! 1636: one of the transaction beginning commands, one or more RCPT
! 1637: commands, and a DATA command, in that order. A mail
! 1638: transaction may be aborted by the RSET command. There may
! 1639: be zero or more transactions in a session.
! 1640:
! 1641: If the transaction beginning command argument is not
! 1642: acceptable a 501 failure reply must be returned and the
! 1643: receiver-SMTP must stay in the same state. If the commands
! 1644: in a transaction are out of order a 503 failure reply must
! 1645: be returned and the receiver-SMTP must stay in the same
! 1646: state.
! 1647:
! 1648: The last command in a session must be the QUIT command. The
! 1649: QUIT command can not be used at any other time in a session.
! 1650:
! 1651: 4.1.2. COMMAND SYNTAX
! 1652:
! 1653: The commands consist of a command code followed by an argument
! 1654: field. Command codes are four alphabetic characters. Upper
! 1655: and lower case alphabetic characters are to be treated
! 1656: identically. Thus, any of the following may represent the mail
! 1657: command:
! 1658:
! 1659: MAIL Mail mail MaIl mAIl
! 1660:
! 1661: This also applies to any symbols representing parameter values,
! 1662: such as "TO" or "to" for the forward-path. Command codes and
! 1663: the argument fields are separated by one or more spaces.
! 1664: However, within the reverse-path and forward-path arguments
! 1665: case is important. In particular, in some hosts the user
! 1666: "smith" is different from the user "Smith".
! 1667:
! 1668:
! 1669:
! 1670:
! 1671: Postel [Page 27]
! 1672:
! 1673:
! 1674:
! 1675: August 1982 RFC 821
! 1676: Simple Mail Transfer Protocol
! 1677:
! 1678:
! 1679:
! 1680: The argument field consists of a variable length character
! 1681: string ending with the character sequence <CRLF>. The receiver
! 1682: is to take no action until this sequence is received.
! 1683:
! 1684: Square brackets denote an optional argument field. If the
! 1685: option is not taken, the appropriate default is implied.
! 1686:
! 1687:
! 1688:
! 1689:
! 1690:
! 1691:
! 1692:
! 1693:
! 1694:
! 1695:
! 1696:
! 1697:
! 1698:
! 1699:
! 1700:
! 1701:
! 1702:
! 1703:
! 1704:
! 1705:
! 1706:
! 1707:
! 1708:
! 1709:
! 1710:
! 1711:
! 1712:
! 1713:
! 1714:
! 1715:
! 1716:
! 1717:
! 1718:
! 1719:
! 1720:
! 1721:
! 1722:
! 1723:
! 1724:
! 1725:
! 1726:
! 1727:
! 1728:
! 1729: [Page 28] Postel
! 1730:
! 1731:
! 1732:
! 1733: RFC 821 August 1982
! 1734: Simple Mail Transfer Protocol
! 1735:
! 1736:
! 1737:
! 1738: The following are the SMTP commands:
! 1739:
! 1740: HELO <SP> <domain> <CRLF>
! 1741:
! 1742: MAIL <SP> FROM:<reverse-path> <CRLF>
! 1743:
! 1744: RCPT <SP> TO:<forward-path> <CRLF>
! 1745:
! 1746: DATA <CRLF>
! 1747:
! 1748: RSET <CRLF>
! 1749:
! 1750: SEND <SP> FROM:<reverse-path> <CRLF>
! 1751:
! 1752: SOML <SP> FROM:<reverse-path> <CRLF>
! 1753:
! 1754: SAML <SP> FROM:<reverse-path> <CRLF>
! 1755:
! 1756: VRFY <SP> <string> <CRLF>
! 1757:
! 1758: EXPN <SP> <string> <CRLF>
! 1759:
! 1760: HELP [<SP> <string>] <CRLF>
! 1761:
! 1762: NOOP <CRLF>
! 1763:
! 1764: QUIT <CRLF>
! 1765:
! 1766: TURN <CRLF>
! 1767:
! 1768:
! 1769:
! 1770:
! 1771:
! 1772:
! 1773:
! 1774:
! 1775:
! 1776:
! 1777:
! 1778:
! 1779:
! 1780:
! 1781:
! 1782:
! 1783:
! 1784:
! 1785:
! 1786:
! 1787: Postel [Page 29]
! 1788:
! 1789:
! 1790:
! 1791: August 1982 RFC 821
! 1792: Simple Mail Transfer Protocol
! 1793:
! 1794:
! 1795:
! 1796: The syntax of the above argument fields (using BNF notation
! 1797: where applicable) is given below. The "..." notation indicates
! 1798: that a field may be repeated one or more times.
! 1799:
! 1800: <reverse-path> ::= <path>
! 1801:
! 1802: <forward-path> ::= <path>
! 1803:
! 1804: <path> ::= "<" [ <a-d-l> ":" ] <mailbox> ">"
! 1805:
! 1806: <a-d-l> ::= <at-domain> | <at-domain> "," <a-d-l>
! 1807:
! 1808: <at-domain> ::= "@" <domain>
! 1809:
! 1810: <domain> ::= <element> | <element> "." <domain>
! 1811:
! 1812: <element> ::= <name> | "#" <number> | "[" <dotnum> "]"
! 1813:
! 1814: <mailbox> ::= <local-part> "@" <domain>
! 1815:
! 1816: <local-part> ::= <dot-string> | <quoted-string>
! 1817:
! 1818: <name> ::= <a> <ldh-str> <let-dig>
! 1819:
! 1820: <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
! 1821:
! 1822: <let-dig> ::= <a> | <d>
! 1823:
! 1824: <let-dig-hyp> ::= <a> | <d> | "-"
! 1825:
! 1826: <dot-string> ::= <string> | <string> "." <dot-string>
! 1827:
! 1828: <string> ::= <char> | <char> <string>
! 1829:
! 1830: <quoted-string> ::= """ <qtext> """
! 1831:
! 1832: <qtext> ::= "\" <x> | "\" <x> <qtext> | <q> | <q> <qtext>
! 1833:
! 1834: <char> ::= <c> | "\" <x>
! 1835:
! 1836: <dotnum> ::= <snum> "." <snum> "." <snum> "." <snum>
! 1837:
! 1838: <number> ::= <d> | <d> <number>
! 1839:
! 1840: <CRLF> ::= <CR> <LF>
! 1841:
! 1842:
! 1843:
! 1844:
! 1845: [Page 30] Postel
! 1846:
! 1847:
! 1848:
! 1849: RFC 821 August 1982
! 1850: Simple Mail Transfer Protocol
! 1851:
! 1852:
! 1853:
! 1854: <CR> ::= the carriage return character (ASCII code 13)
! 1855:
! 1856: <LF> ::= the line feed character (ASCII code 10)
! 1857:
! 1858: <SP> ::= the space character (ASCII code 32)
! 1859:
! 1860: <snum> ::= one, two, or three digits representing a decimal
! 1861: integer value in the range 0 through 255
! 1862:
! 1863: <a> ::= any one of the 52 alphabetic characters A through Z
! 1864: in upper case and a through z in lower case
! 1865:
! 1866: <c> ::= any one of the 128 ASCII characters, but not any
! 1867: <special> or <SP>
! 1868:
! 1869: <d> ::= any one of the ten digits 0 through 9
! 1870:
! 1871: <q> ::= any one of the 128 ASCII characters except <CR>,
! 1872: <LF>, quote ("), or backslash (\)
! 1873:
! 1874: <x> ::= any one of the 128 ASCII characters (no exceptions)
! 1875:
! 1876: <special> ::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "."
! 1877: | "," | ";" | ":" | "@" """ | the control
! 1878: characters (ASCII codes 0 through 31 inclusive and
! 1879: 127)
! 1880:
! 1881: Note that the backslash, "\", is a quote character, which is
! 1882: used to indicate that the next character is to be used
! 1883: literally (instead of its normal interpretation). For example,
! 1884: "Joe\,Smith" could be used to indicate a single nine character
! 1885: user field with comma being the fourth character of the field.
! 1886:
! 1887: Hosts are generally known by names which are translated to
! 1888: addresses in each host. Note that the name elements of domains
! 1889: are the official names -- no use of nicknames or aliases is
! 1890: allowed.
! 1891:
! 1892: Sometimes a host is not known to the translation function and
! 1893: communication is blocked. To bypass this barrier two numeric
! 1894: forms are also allowed for host "names". One form is a decimal
! 1895: integer prefixed by a pound sign, "#", which indicates the
! 1896: number is the address of the host. Another form is four small
! 1897: decimal integers separated by dots and enclosed by brackets,
! 1898: e.g., "[123.255.37.2]", which indicates a 32-bit ARPA Internet
! 1899: Address in four 8-bit fields.
! 1900:
! 1901:
! 1902:
! 1903: Postel [Page 31]
! 1904:
! 1905:
! 1906:
! 1907: August 1982 RFC 821
! 1908: Simple Mail Transfer Protocol
! 1909:
! 1910:
! 1911:
! 1912: The time stamp line and the return path line are formally
! 1913: defined as follows:
! 1914:
! 1915: <return-path-line> ::= "Return-Path:" <SP><reverse-path><CRLF>
! 1916:
! 1917: <time-stamp-line> ::= "Received:" <SP> <stamp> <CRLF>
! 1918:
! 1919: <stamp> ::= <from-domain> <by-domain> <opt-info> ";"
! 1920: <daytime>
! 1921:
! 1922: <from-domain> ::= "FROM" <SP> <domain> <SP>
! 1923:
! 1924: <by-domain> ::= "BY" <SP> <domain> <SP>
! 1925:
! 1926: <opt-info> ::= [<via>] [<with>] [<id>] [<for>]
! 1927:
! 1928: <via> ::= "VIA" <SP> <link> <SP>
! 1929:
! 1930: <with> ::= "WITH" <SP> <protocol> <SP>
! 1931:
! 1932: <id> ::= "ID" <SP> <string> <SP>
! 1933:
! 1934: <for> ::= "FOR" <SP> <path> <SP>
! 1935:
! 1936: <link> ::= The standard names for links are registered with
! 1937: the Network Information Center.
! 1938:
! 1939: <protocol> ::= The standard names for protocols are
! 1940: registered with the Network Information Center.
! 1941:
! 1942: <daytime> ::= <SP> <date> <SP> <time>
! 1943:
! 1944: <date> ::= <dd> <SP> <mon> <SP> <yy>
! 1945:
! 1946: <time> ::= <hh> ":" <mm> ":" <ss> <SP> <zone>
! 1947:
! 1948: <dd> ::= the one or two decimal integer day of the month in
! 1949: the range 1 to 31.
! 1950:
! 1951: <mon> ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" |
! 1952: "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"
! 1953:
! 1954: <yy> ::= the two decimal integer year of the century in the
! 1955: range 00 to 99.
! 1956:
! 1957:
! 1958:
! 1959:
! 1960:
! 1961: [Page 32] Postel
! 1962:
! 1963:
! 1964:
! 1965: RFC 821 August 1982
! 1966: Simple Mail Transfer Protocol
! 1967:
! 1968:
! 1969:
! 1970: <hh> ::= the two decimal integer hour of the day in the
! 1971: range 00 to 24.
! 1972:
! 1973: <mm> ::= the two decimal integer minute of the hour in the
! 1974: range 00 to 59.
! 1975:
! 1976: <ss> ::= the two decimal integer second of the minute in the
! 1977: range 00 to 59.
! 1978:
! 1979: <zone> ::= "UT" for Universal Time (the default) or other
! 1980: time zone designator (as in [2]).
! 1981:
! 1982:
! 1983:
! 1984: -------------------------------------------------------------
! 1985:
! 1986: Return Path Example
! 1987:
! 1988: Return-Path: <@CHARLIE.ARPA,@BAKER.ARPA:[email protected]>
! 1989:
! 1990: Example 9
! 1991:
! 1992: -------------------------------------------------------------
! 1993:
! 1994: -------------------------------------------------------------
! 1995:
! 1996: Time Stamp Line Example
! 1997:
! 1998: Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT
! 1999:
! 2000: Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25
! 2001: id M12345 for [email protected] ; 22 OCT 81 09:23:59 PDT
! 2002:
! 2003: Example 10
! 2004:
! 2005: -------------------------------------------------------------
! 2006:
! 2007:
! 2008:
! 2009:
! 2010:
! 2011:
! 2012:
! 2013:
! 2014:
! 2015:
! 2016:
! 2017:
! 2018:
! 2019: Postel [Page 33]
! 2020:
! 2021:
! 2022:
! 2023: August 1982 RFC 821
! 2024: Simple Mail Transfer Protocol
! 2025:
! 2026:
! 2027:
! 2028: 4.2. SMTP REPLIES
! 2029:
! 2030: Replies to SMTP commands are devised to ensure the synchronization
! 2031: of requests and actions in the process of mail transfer, and to
! 2032: guarantee that the sender-SMTP always knows the state of the
! 2033: receiver-SMTP. Every command must generate exactly one reply.
! 2034:
! 2035: The details of the command-reply sequence are made explicit in
! 2036: Section 5.3 on Sequencing and Section 5.4 State Diagrams.
! 2037:
! 2038: An SMTP reply consists of a three digit number (transmitted as
! 2039: three alphanumeric characters) followed by some text. The number
! 2040: is intended for use by automata to determine what state to enter
! 2041: next; the text is meant for the human user. It is intended that
! 2042: the three digits contain enough encoded information that the
! 2043: sender-SMTP need not examine the text and may either discard it or
! 2044: pass it on to the user, as appropriate. In particular, the text
! 2045: may be receiver-dependent and context dependent, so there are
! 2046: likely to be varying texts for each reply code. A discussion of
! 2047: the theory of reply codes is given in Appendix E. Formally, a
! 2048: reply is defined to be the sequence: a three-digit code, <SP>,
! 2049: one line of text, and <CRLF>, or a multiline reply (as defined in
! 2050: Appendix E). Only the EXPN and HELP commands are expected to
! 2051: result in multiline replies in normal circumstances, however
! 2052: multiline replies are allowed for any command.
! 2053:
! 2054:
! 2055:
! 2056:
! 2057:
! 2058:
! 2059:
! 2060:
! 2061:
! 2062:
! 2063:
! 2064:
! 2065:
! 2066:
! 2067:
! 2068:
! 2069:
! 2070:
! 2071:
! 2072:
! 2073:
! 2074:
! 2075:
! 2076:
! 2077: [Page 34] Postel
! 2078:
! 2079:
! 2080:
! 2081: RFC 821 August 1982
! 2082: Simple Mail Transfer Protocol
! 2083:
! 2084:
! 2085:
! 2086: 4.2.1. REPLY CODES BY FUNCTION GROUPS
! 2087:
! 2088: 500 Syntax error, command unrecognized
! 2089: [This may include errors such as command line too long]
! 2090: 501 Syntax error in parameters or arguments
! 2091: 502 Command not implemented
! 2092: 503 Bad sequence of commands
! 2093: 504 Command parameter not implemented
! 2094:
! 2095: 211 System status, or system help reply
! 2096: 214 Help message
! 2097: [Information on how to use the receiver or the meaning of a
! 2098: particular non-standard command; this reply is useful only
! 2099: to the human user]
! 2100:
! 2101: 220 <domain> Service ready
! 2102: 221 <domain> Service closing transmission channel
! 2103: 421 <domain> Service not available,
! 2104: closing transmission channel
! 2105: [This may be a reply to any command if the service knows it
! 2106: must shut down]
! 2107:
! 2108: 250 Requested mail action okay, completed
! 2109: 251 User not local; will forward to <forward-path>
! 2110: 450 Requested mail action not taken: mailbox unavailable
! 2111: [E.g., mailbox busy]
! 2112: 550 Requested action not taken: mailbox unavailable
! 2113: [E.g., mailbox not found, no access]
! 2114: 451 Requested action aborted: error in processing
! 2115: 551 User not local; please try <forward-path>
! 2116: 452 Requested action not taken: insufficient system storage
! 2117: 552 Requested mail action aborted: exceeded storage allocation
! 2118: 553 Requested action not taken: mailbox name not allowed
! 2119: [E.g., mailbox syntax incorrect]
! 2120: 354 Start mail input; end with <CRLF>.<CRLF>
! 2121: 554 Transaction failed
! 2122:
! 2123:
! 2124:
! 2125:
! 2126:
! 2127:
! 2128:
! 2129:
! 2130:
! 2131:
! 2132:
! 2133:
! 2134:
! 2135: Postel [Page 35]
! 2136:
! 2137:
! 2138:
! 2139: August 1982 RFC 821
! 2140: Simple Mail Transfer Protocol
! 2141:
! 2142:
! 2143:
! 2144: 4.2.2. NUMERIC ORDER LIST OF REPLY CODES
! 2145:
! 2146: 211 System status, or system help reply
! 2147: 214 Help message
! 2148: [Information on how to use the receiver or the meaning of a
! 2149: particular non-standard command; this reply is useful only
! 2150: to the human user]
! 2151: 220 <domain> Service ready
! 2152: 221 <domain> Service closing transmission channel
! 2153: 250 Requested mail action okay, completed
! 2154: 251 User not local; will forward to <forward-path>
! 2155:
! 2156: 354 Start mail input; end with <CRLF>.<CRLF>
! 2157:
! 2158: 421 <domain> Service not available,
! 2159: closing transmission channel
! 2160: [This may be a reply to any command if the service knows it
! 2161: must shut down]
! 2162: 450 Requested mail action not taken: mailbox unavailable
! 2163: [E.g., mailbox busy]
! 2164: 451 Requested action aborted: local error in processing
! 2165: 452 Requested action not taken: insufficient system storage
! 2166:
! 2167: 500 Syntax error, command unrecognized
! 2168: [This may include errors such as command line too long]
! 2169: 501 Syntax error in parameters or arguments
! 2170: 502 Command not implemented
! 2171: 503 Bad sequence of commands
! 2172: 504 Command parameter not implemented
! 2173: 550 Requested action not taken: mailbox unavailable
! 2174: [E.g., mailbox not found, no access]
! 2175: 551 User not local; please try <forward-path>
! 2176: 552 Requested mail action aborted: exceeded storage allocation
! 2177: 553 Requested action not taken: mailbox name not allowed
! 2178: [E.g., mailbox syntax incorrect]
! 2179: 554 Transaction failed
! 2180:
! 2181:
! 2182:
! 2183:
! 2184:
! 2185:
! 2186:
! 2187:
! 2188:
! 2189:
! 2190:
! 2191:
! 2192:
! 2193: [Page 36] Postel
! 2194:
! 2195:
! 2196:
! 2197: RFC 821 August 1982
! 2198: Simple Mail Transfer Protocol
! 2199:
! 2200:
! 2201:
! 2202: 4.3. SEQUENCING OF COMMANDS AND REPLIES
! 2203:
! 2204: The communication between the sender and receiver is intended to
! 2205: be an alternating dialogue, controlled by the sender. As such,
! 2206: the sender issues a command and the receiver responds with a
! 2207: reply. The sender must wait for this response before sending
! 2208: further commands.
! 2209:
! 2210: One important reply is the connection greeting. Normally, a
! 2211: receiver will send a 220 "Service ready" reply when the connection
! 2212: is completed. The sender should wait for this greeting message
! 2213: before sending any commands.
! 2214:
! 2215: Note: all the greeting type replies have the official name of
! 2216: the server host as the first word following the reply code.
! 2217:
! 2218: For example,
! 2219:
! 2220: 220 <SP> USC-ISIF.ARPA <SP> Service ready <CRLF>
! 2221:
! 2222: The table below lists alternative success and failure replies for
! 2223: each command. These must be strictly adhered to; a receiver may
! 2224: substitute text in the replies, but the meaning and action implied
! 2225: by the code numbers and by the specific command reply sequence
! 2226: cannot be altered.
! 2227:
! 2228: COMMAND-REPLY SEQUENCES
! 2229:
! 2230: Each command is listed with its possible replies. The prefixes
! 2231: used before the possible replies are "P" for preliminary (not
! 2232: used in SMTP), "I" for intermediate, "S" for success, "F" for
! 2233: failure, and "E" for error. The 421 reply (service not
! 2234: available, closing transmission channel) may be given to any
! 2235: command if the SMTP-receiver knows it must shut down. This
! 2236: listing forms the basis for the State Diagrams in Section 4.4.
! 2237:
! 2238: CONNECTION ESTABLISHMENT
! 2239: S: 220
! 2240: F: 421
! 2241: HELO
! 2242: S: 250
! 2243: E: 500, 501, 504, 421
! 2244: MAIL
! 2245: S: 250
! 2246: F: 552, 451, 452
! 2247: E: 500, 501, 421
! 2248:
! 2249:
! 2250:
! 2251: Postel [Page 37]
! 2252:
! 2253:
! 2254:
! 2255: August 1982 RFC 821
! 2256: Simple Mail Transfer Protocol
! 2257:
! 2258:
! 2259:
! 2260: RCPT
! 2261: S: 250, 251
! 2262: F: 550, 551, 552, 553, 450, 451, 452
! 2263: E: 500, 501, 503, 421
! 2264: DATA
! 2265: I: 354 -> data -> S: 250
! 2266: F: 552, 554, 451, 452
! 2267: F: 451, 554
! 2268: E: 500, 501, 503, 421
! 2269: RSET
! 2270: S: 250
! 2271: E: 500, 501, 504, 421
! 2272: SEND
! 2273: S: 250
! 2274: F: 552, 451, 452
! 2275: E: 500, 501, 502, 421
! 2276: SOML
! 2277: S: 250
! 2278: F: 552, 451, 452
! 2279: E: 500, 501, 502, 421
! 2280: SAML
! 2281: S: 250
! 2282: F: 552, 451, 452
! 2283: E: 500, 501, 502, 421
! 2284: VRFY
! 2285: S: 250, 251
! 2286: F: 550, 551, 553
! 2287: E: 500, 501, 502, 504, 421
! 2288: EXPN
! 2289: S: 250
! 2290: F: 550
! 2291: E: 500, 501, 502, 504, 421
! 2292: HELP
! 2293: S: 211, 214
! 2294: E: 500, 501, 502, 504, 421
! 2295: NOOP
! 2296: S: 250
! 2297: E: 500, 421
! 2298: QUIT
! 2299: S: 221
! 2300: E: 500
! 2301: TURN
! 2302: S: 250
! 2303: F: 502
! 2304: E: 500, 503
! 2305:
! 2306:
! 2307:
! 2308:
! 2309: [Page 38] Postel
! 2310:
! 2311:
! 2312:
! 2313: RFC 821 August 1982
! 2314: Simple Mail Transfer Protocol
! 2315:
! 2316:
! 2317:
! 2318: 4.4. STATE DIAGRAMS
! 2319:
! 2320: Following are state diagrams for a simple-minded SMTP
! 2321: implementation. Only the first digit of the reply codes is used.
! 2322: There is one state diagram for each group of SMTP commands. The
! 2323: command groupings were determined by constructing a model for each
! 2324: command and then collecting together the commands with
! 2325: structurally identical models.
! 2326:
! 2327: For each command there are three possible outcomes: "success"
! 2328: (S), "failure" (F), and "error" (E). In the state diagrams below
! 2329: we use the symbol B for "begin", and the symbol W for "wait for
! 2330: reply".
! 2331:
! 2332: First, the diagram that represents most of the SMTP commands:
! 2333:
! 2334:
! 2335: 1,3 +---+
! 2336: ----------->| E |
! 2337: | +---+
! 2338: |
! 2339: +---+ cmd +---+ 2 +---+
! 2340: | B |---------->| W |---------->| S |
! 2341: +---+ +---+ +---+
! 2342: |
! 2343: | 4,5 +---+
! 2344: ----------->| F |
! 2345: +---+
! 2346:
! 2347:
! 2348: This diagram models the commands:
! 2349:
! 2350: HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP,
! 2351: NOOP, QUIT, TURN.
! 2352:
! 2353:
! 2354:
! 2355:
! 2356:
! 2357:
! 2358:
! 2359:
! 2360:
! 2361:
! 2362:
! 2363:
! 2364:
! 2365:
! 2366:
! 2367: Postel [Page 39]
! 2368:
! 2369:
! 2370:
! 2371: August 1982 RFC 821
! 2372: Simple Mail Transfer Protocol
! 2373:
! 2374:
! 2375:
! 2376: A more complex diagram models the DATA command:
! 2377:
! 2378:
! 2379: +---+ DATA +---+ 1,2 +---+
! 2380: | B |---------->| W |-------------------->| E |
! 2381: +---+ +---+ ------------>+---+
! 2382: 3| |4,5 |
! 2383: | | |
! 2384: -------------- ----- |
! 2385: | | | +---+
! 2386: | ---------- -------->| S |
! 2387: | | | | +---+
! 2388: | | ------------
! 2389: | | | |
! 2390: V 1,3| |2 |
! 2391: +---+ data +---+ --------------->+---+
! 2392: | |---------->| W | | F |
! 2393: +---+ +---+-------------------->+---+
! 2394: 4,5
! 2395:
! 2396:
! 2397: Note that the "data" here is a series of lines sent from the
! 2398: sender to the receiver with no response expected until the last
! 2399: line is sent.
! 2400:
! 2401:
! 2402:
! 2403:
! 2404:
! 2405:
! 2406:
! 2407:
! 2408:
! 2409:
! 2410:
! 2411:
! 2412:
! 2413:
! 2414:
! 2415:
! 2416:
! 2417:
! 2418:
! 2419:
! 2420:
! 2421:
! 2422:
! 2423:
! 2424:
! 2425: [Page 40] Postel
! 2426:
! 2427:
! 2428:
! 2429: RFC 821 August 1982
! 2430: Simple Mail Transfer Protocol
! 2431:
! 2432:
! 2433:
! 2434: 4.5. DETAILS
! 2435:
! 2436: 4.5.1. MINIMUM IMPLEMENTATION
! 2437:
! 2438: In order to make SMTP workable, the following minimum
! 2439: implementation is required for all receivers:
! 2440:
! 2441: COMMANDS -- HELO
! 2442: MAIL
! 2443: RCPT
! 2444: DATA
! 2445: RSET
! 2446: NOOP
! 2447: QUIT
! 2448:
! 2449: 4.5.2. TRANSPARENCY
! 2450:
! 2451: Without some provision for data transparency the character
! 2452: sequence "<CRLF>.<CRLF>" ends the mail text and cannot be sent
! 2453: by the user. In general, users are not aware of such
! 2454: "forbidden" sequences. To allow all user composed text to be
! 2455: transmitted transparently the following procedures are used.
! 2456:
! 2457: 1. Before sending a line of mail text the sender-SMTP checks
! 2458: the first character of the line. If it is a period, one
! 2459: additional period is inserted at the beginning of the line.
! 2460:
! 2461: 2. When a line of mail text is received by the receiver-SMTP
! 2462: it checks the line. If the line is composed of a single
! 2463: period it is the end of mail. If the first character is a
! 2464: period and there are other characters on the line, the first
! 2465: character is deleted.
! 2466:
! 2467: The mail data may contain any of the 128 ASCII characters. All
! 2468: characters are to be delivered to the recipient's mailbox
! 2469: including format effectors and other control characters. If
! 2470: the transmission channel provides an 8-bit byte (octets) data
! 2471: stream, the 7-bit ASCII codes are transmitted right justified
! 2472: in the octets with the high order bits cleared to zero.
! 2473:
! 2474: In some systems it may be necessary to transform the data as
! 2475: it is received and stored. This may be necessary for hosts
! 2476: that use a different character set than ASCII as their local
! 2477: character set, or that store data in records rather than
! 2478:
! 2479:
! 2480:
! 2481:
! 2482:
! 2483: Postel [Page 41]
! 2484:
! 2485:
! 2486:
! 2487: August 1982 RFC 821
! 2488: Simple Mail Transfer Protocol
! 2489:
! 2490:
! 2491:
! 2492: strings. If such transforms are necessary, they must be
! 2493: reversible -- especially if such transforms are applied to
! 2494: mail being relayed.
! 2495:
! 2496: 4.5.3. SIZES
! 2497:
! 2498: There are several objects that have required minimum maximum
! 2499: sizes. That is, every implementation must be able to receive
! 2500: objects of at least these sizes, but must not send objects
! 2501: larger than these sizes.
! 2502:
! 2503:
! 2504: ****************************************************
! 2505: * *
! 2506: * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION *
! 2507: * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *
! 2508: * OF THESE OBJECTS SHOULD BE USED. *
! 2509: * *
! 2510: ****************************************************
! 2511:
! 2512: user
! 2513:
! 2514: The maximum total length of a user name is 64 characters.
! 2515:
! 2516: domain
! 2517:
! 2518: The maximum total length of a domain name or number is 64
! 2519: characters.
! 2520:
! 2521: path
! 2522:
! 2523: The maximum total length of a reverse-path or
! 2524: forward-path is 256 characters (including the punctuation
! 2525: and element separators).
! 2526:
! 2527: command line
! 2528:
! 2529: The maximum total length of a command line including the
! 2530: command word and the <CRLF> is 512 characters.
! 2531:
! 2532: reply line
! 2533:
! 2534: The maximum total length of a reply line including the
! 2535: reply code and the <CRLF> is 512 characters.
! 2536:
! 2537:
! 2538:
! 2539:
! 2540:
! 2541: [Page 42] Postel
! 2542:
! 2543:
! 2544:
! 2545: RFC 821 August 1982
! 2546: Simple Mail Transfer Protocol
! 2547:
! 2548:
! 2549:
! 2550: text line
! 2551:
! 2552: The maximum total length of a text line including the
! 2553: <CRLF> is 1000 characters (but not counting the leading
! 2554: dot duplicated for transparency).
! 2555:
! 2556: recipients buffer
! 2557:
! 2558: The maximum total number of recipients that must be
! 2559: buffered is 100 recipients.
! 2560:
! 2561:
! 2562: ****************************************************
! 2563: * *
! 2564: * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION *
! 2565: * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *
! 2566: * OF THESE OBJECTS SHOULD BE USED. *
! 2567: * *
! 2568: ****************************************************
! 2569:
! 2570: Errors due to exceeding these limits may be reported by using
! 2571: the reply codes, for example:
! 2572:
! 2573: 500 Line too long.
! 2574:
! 2575: 501 Path too long
! 2576:
! 2577: 552 Too many recipients.
! 2578:
! 2579: 552 Too much mail data.
! 2580:
! 2581:
! 2582:
! 2583:
! 2584:
! 2585:
! 2586:
! 2587:
! 2588:
! 2589:
! 2590:
! 2591:
! 2592:
! 2593:
! 2594:
! 2595:
! 2596:
! 2597:
! 2598:
! 2599: Postel [Page 43]
! 2600:
! 2601:
! 2602:
! 2603: August 1982 RFC 821
! 2604: Simple Mail Transfer Protocol
! 2605:
! 2606:
! 2607:
! 2608: APPENDIX A
! 2609:
! 2610: TCP Transport service
! 2611:
! 2612: The Transmission Control Protocol [3] is used in the ARPA
! 2613: Internet, and in any network following the US DoD standards for
! 2614: internetwork protocols.
! 2615:
! 2616: Connection Establishment
! 2617:
! 2618: The SMTP transmission channel is a TCP connection established
! 2619: between the sender process port U and the receiver process port
! 2620: L. This single full duplex connection is used as the
! 2621: transmission channel. This protocol is assigned the service
! 2622: port 25 (31 octal), that is L=25.
! 2623:
! 2624: Data Transfer
! 2625:
! 2626: The TCP connection supports the transmission of 8-bit bytes.
! 2627: The SMTP data is 7-bit ASCII characters. Each character is
! 2628: transmitted as an 8-bit byte with the high-order bit cleared to
! 2629: zero.
! 2630:
! 2631:
! 2632:
! 2633:
! 2634:
! 2635:
! 2636:
! 2637:
! 2638:
! 2639:
! 2640:
! 2641:
! 2642:
! 2643:
! 2644:
! 2645:
! 2646:
! 2647:
! 2648:
! 2649:
! 2650:
! 2651:
! 2652:
! 2653:
! 2654:
! 2655:
! 2656:
! 2657: [Page 44] Postel
! 2658:
! 2659:
! 2660:
! 2661: RFC 821 August 1982
! 2662: Simple Mail Transfer Protocol
! 2663:
! 2664:
! 2665:
! 2666: APPENDIX B
! 2667:
! 2668: NCP Transport service
! 2669:
! 2670: The ARPANET Host-to-Host Protocol [4] (implemented by the Network
! 2671: Control Program) may be used in the ARPANET.
! 2672:
! 2673: Connection Establishment
! 2674:
! 2675: The SMTP transmission channel is established via NCP between
! 2676: the sender process socket U and receiver process socket L. The
! 2677: Initial Connection Protocol [5] is followed resulting in a pair
! 2678: of simplex connections. This pair of connections is used as
! 2679: the transmission channel. This protocol is assigned the
! 2680: contact socket 25 (31 octal), that is L=25.
! 2681:
! 2682: Data Transfer
! 2683:
! 2684: The NCP data connections are established in 8-bit byte mode.
! 2685: The SMTP data is 7-bit ASCII characters. Each character is
! 2686: transmitted as an 8-bit byte with the high-order bit cleared to
! 2687: zero.
! 2688:
! 2689:
! 2690:
! 2691:
! 2692:
! 2693:
! 2694:
! 2695:
! 2696:
! 2697:
! 2698:
! 2699:
! 2700:
! 2701:
! 2702:
! 2703:
! 2704:
! 2705:
! 2706:
! 2707:
! 2708:
! 2709:
! 2710:
! 2711:
! 2712:
! 2713:
! 2714:
! 2715: Postel [Page 45]
! 2716:
! 2717:
! 2718:
! 2719: August 1982 RFC 821
! 2720: Simple Mail Transfer Protocol
! 2721:
! 2722:
! 2723:
! 2724: APPENDIX C
! 2725:
! 2726: NITS
! 2727:
! 2728: The Network Independent Transport Service [6] may be used.
! 2729:
! 2730: Connection Establishment
! 2731:
! 2732: The SMTP transmission channel is established via NITS between
! 2733: the sender process and receiver process. The sender process
! 2734: executes the CONNECT primitive, and the waiting receiver
! 2735: process executes the ACCEPT primitive.
! 2736:
! 2737: Data Transfer
! 2738:
! 2739: The NITS connection supports the transmission of 8-bit bytes.
! 2740: The SMTP data is 7-bit ASCII characters. Each character is
! 2741: transmitted as an 8-bit byte with the high-order bit cleared to
! 2742: zero.
! 2743:
! 2744:
! 2745:
! 2746:
! 2747:
! 2748:
! 2749:
! 2750:
! 2751:
! 2752:
! 2753:
! 2754:
! 2755:
! 2756:
! 2757:
! 2758:
! 2759:
! 2760:
! 2761:
! 2762:
! 2763:
! 2764:
! 2765:
! 2766:
! 2767:
! 2768:
! 2769:
! 2770:
! 2771:
! 2772:
! 2773: [Page 46] Postel
! 2774:
! 2775:
! 2776:
! 2777: RFC 821 August 1982
! 2778: Simple Mail Transfer Protocol
! 2779:
! 2780:
! 2781:
! 2782: APPENDIX D
! 2783:
! 2784: X.25 Transport service
! 2785:
! 2786: It may be possible to use the X.25 service [7] as provided by the
! 2787: Public Data Networks directly, however, it is suggested that a
! 2788: reliable end-to-end protocol such as TCP be used on top of X.25
! 2789: connections.
! 2790:
! 2791:
! 2792:
! 2793:
! 2794:
! 2795:
! 2796:
! 2797:
! 2798:
! 2799:
! 2800:
! 2801:
! 2802:
! 2803:
! 2804:
! 2805:
! 2806:
! 2807:
! 2808:
! 2809:
! 2810:
! 2811:
! 2812:
! 2813:
! 2814:
! 2815:
! 2816:
! 2817:
! 2818:
! 2819:
! 2820:
! 2821:
! 2822:
! 2823:
! 2824:
! 2825:
! 2826:
! 2827:
! 2828:
! 2829:
! 2830:
! 2831: Postel [Page 47]
! 2832:
! 2833:
! 2834:
! 2835: August 1982 RFC 821
! 2836: Simple Mail Transfer Protocol
! 2837:
! 2838:
! 2839:
! 2840: APPENDIX E
! 2841:
! 2842: Theory of Reply Codes
! 2843:
! 2844: The three digits of the reply each have a special significance.
! 2845: The first digit denotes whether the response is good, bad or
! 2846: incomplete. An unsophisticated sender-SMTP will be able to
! 2847: determine its next action (proceed as planned, redo, retrench,
! 2848: etc.) by simply examining this first digit. A sender-SMTP that
! 2849: wants to know approximately what kind of error occurred (e.g.,
! 2850: mail system error, command syntax error) may examine the second
! 2851: digit, reserving the third digit for the finest gradation of
! 2852: information.
! 2853:
! 2854: There are five values for the first digit of the reply code:
! 2855:
! 2856: 1yz Positive Preliminary reply
! 2857:
! 2858: The command has been accepted, but the requested action
! 2859: is being held in abeyance, pending confirmation of the
! 2860: information in this reply. The sender-SMTP should send
! 2861: another command specifying whether to continue or abort
! 2862: the action.
! 2863:
! 2864: [Note: SMTP does not have any commands that allow this
! 2865: type of reply, and so does not have the continue or
! 2866: abort commands.]
! 2867:
! 2868: 2yz Positive Completion reply
! 2869:
! 2870: The requested action has been successfully completed. A
! 2871: new request may be initiated.
! 2872:
! 2873: 3yz Positive Intermediate reply
! 2874:
! 2875: The command has been accepted, but the requested action
! 2876: is being held in abeyance, pending receipt of further
! 2877: information. The sender-SMTP should send another command
! 2878: specifying this information. This reply is used in
! 2879: command sequence groups.
! 2880:
! 2881: 4yz Transient Negative Completion reply
! 2882:
! 2883: The command was not accepted and the requested action did
! 2884: not occur. However, the error condition is temporary and
! 2885: the action may be requested again. The sender should
! 2886:
! 2887:
! 2888:
! 2889: [Page 48] Postel
! 2890:
! 2891:
! 2892:
! 2893: RFC 821 August 1982
! 2894: Simple Mail Transfer Protocol
! 2895:
! 2896:
! 2897:
! 2898: return to the beginning of the command sequence (if any).
! 2899: It is difficult to assign a meaning to "transient" when
! 2900: two different sites (receiver- and sender- SMTPs) must
! 2901: agree on the interpretation. Each reply in this category
! 2902: might have a different time value, but the sender-SMTP is
! 2903: encouraged to try again. A rule of thumb to determine if
! 2904: a reply fits into the 4yz or the 5yz category (see below)
! 2905: is that replies are 4yz if they can be repeated without
! 2906: any change in command form or in properties of the sender
! 2907: or receiver. (E.g., the command is repeated identically
! 2908: and the receiver does not put up a new implementation.)
! 2909:
! 2910: 5yz Permanent Negative Completion reply
! 2911:
! 2912: The command was not accepted and the requested action did
! 2913: not occur. The sender-SMTP is discouraged from repeating
! 2914: the exact request (in the same sequence). Even some
! 2915: "permanent" error conditions can be corrected, so the
! 2916: human user may want to direct the sender-SMTP to
! 2917: reinitiate the command sequence by direct action at some
! 2918: point in the future (e.g., after the spelling has been
! 2919: changed, or the user has altered the account status).
! 2920:
! 2921: The second digit encodes responses in specific categories:
! 2922:
! 2923: x0z Syntax -- These replies refer to syntax errors,
! 2924: syntactically correct commands that don't fit any
! 2925: functional category, and unimplemented or superfluous
! 2926: commands.
! 2927:
! 2928: x1z Information -- These are replies to requests for
! 2929: information, such as status or help.
! 2930:
! 2931: x2z Connections -- These are replies referring to the
! 2932: transmission channel.
! 2933:
! 2934: x3z Unspecified as yet.
! 2935:
! 2936: x4z Unspecified as yet.
! 2937:
! 2938: x5z Mail system -- These replies indicate the status of
! 2939: the receiver mail system vis-a-vis the requested
! 2940: transfer or other mail system action.
! 2941:
! 2942: The third digit gives a finer gradation of meaning in each
! 2943: category specified by the second digit. The list of replies
! 2944:
! 2945:
! 2946:
! 2947: Postel [Page 49]
! 2948:
! 2949:
! 2950:
! 2951: August 1982 RFC 821
! 2952: Simple Mail Transfer Protocol
! 2953:
! 2954:
! 2955:
! 2956: illustrates this. Each reply text is recommended rather than
! 2957: mandatory, and may even change according to the command with
! 2958: which it is associated. On the other hand, the reply codes
! 2959: must strictly follow the specifications in this section.
! 2960: Receiver implementations should not invent new codes for
! 2961: slightly different situations from the ones described here, but
! 2962: rather adapt codes already defined.
! 2963:
! 2964: For example, a command such as NOOP whose successful execution
! 2965: does not offer the sender-SMTP any new information will return
! 2966: a 250 reply. The response is 502 when the command requests an
! 2967: unimplemented non-site-specific action. A refinement of that
! 2968: is the 504 reply for a command that is implemented, but that
! 2969: requests an unimplemented parameter.
! 2970:
! 2971: The reply text may be longer than a single line; in these cases
! 2972: the complete text must be marked so the sender-SMTP knows when it
! 2973: can stop reading the reply. This requires a special format to
! 2974: indicate a multiple line reply.
! 2975:
! 2976: The format for multiline replies requires that every line,
! 2977: except the last, begin with the reply code, followed
! 2978: immediately by a hyphen, "-" (also known as minus), followed by
! 2979: text. The last line will begin with the reply code, followed
! 2980: immediately by <SP>, optionally some text, and <CRLF>.
! 2981:
! 2982: For example:
! 2983: 123-First line
! 2984: 123-Second line
! 2985: 123-234 text beginning with numbers
! 2986: 123 The last line
! 2987:
! 2988: In many cases the sender-SMTP then simply needs to search for
! 2989: the reply code followed by <SP> at the beginning of a line, and
! 2990: ignore all preceding lines. In a few cases, there is important
! 2991: data for the sender in the reply "text". The sender will know
! 2992: these cases from the current context.
! 2993:
! 2994:
! 2995:
! 2996:
! 2997:
! 2998:
! 2999:
! 3000:
! 3001:
! 3002:
! 3003:
! 3004:
! 3005: [Page 50] Postel
! 3006:
! 3007:
! 3008:
! 3009: RFC 821 August 1982
! 3010: Simple Mail Transfer Protocol
! 3011:
! 3012:
! 3013:
! 3014: APPENDIX F
! 3015:
! 3016: Scenarios
! 3017:
! 3018: This section presents complete scenarios of several types of SMTP
! 3019: sessions.
! 3020:
! 3021: A Typical SMTP Transaction Scenario
! 3022:
! 3023: This SMTP example shows mail sent by Smith at host USC-ISIF, to
! 3024: Jones, Green, and Brown at host BBN-UNIX. Here we assume that
! 3025: host USC-ISIF contacts host BBN-UNIX directly. The mail is
! 3026: accepted for Jones and Brown. Green does not have a mailbox at
! 3027: host BBN-UNIX.
! 3028:
! 3029: -------------------------------------------------------------
! 3030:
! 3031: R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
! 3032: S: HELO USC-ISIF.ARPA
! 3033: R: 250 BBN-UNIX.ARPA
! 3034:
! 3035: S: MAIL FROM:<[email protected]>
! 3036: R: 250 OK
! 3037:
! 3038: S: RCPT TO:<[email protected]>
! 3039: R: 250 OK
! 3040:
! 3041: S: RCPT TO:<[email protected]>
! 3042: R: 550 No such user here
! 3043:
! 3044: S: RCPT TO:<[email protected]>
! 3045: R: 250 OK
! 3046:
! 3047: S: DATA
! 3048: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3049: S: Blah blah blah...
! 3050: S: ...etc. etc. etc.
! 3051: S: .
! 3052: R: 250 OK
! 3053:
! 3054: S: QUIT
! 3055: R: 221 BBN-UNIX.ARPA Service closing transmission channel
! 3056:
! 3057: Scenario 1
! 3058:
! 3059: -------------------------------------------------------------
! 3060:
! 3061:
! 3062:
! 3063: Postel [Page 51]
! 3064:
! 3065:
! 3066:
! 3067: August 1982 RFC 821
! 3068: Simple Mail Transfer Protocol
! 3069:
! 3070:
! 3071:
! 3072: Aborted SMTP Transaction Scenario
! 3073:
! 3074: -------------------------------------------------------------
! 3075:
! 3076: R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready
! 3077: S: HELO ISI-VAXA.ARPA
! 3078: R: 250 MIT-Multics.ARPA
! 3079:
! 3080: S: MAIL FROM:<[email protected]>
! 3081: R: 250 OK
! 3082:
! 3083: S: RCPT TO:<[email protected]>
! 3084: R: 250 OK
! 3085:
! 3086: S: RCPT TO:<[email protected]>
! 3087: R: 550 No such user here
! 3088:
! 3089: S: RSET
! 3090: R: 250 OK
! 3091:
! 3092: S: QUIT
! 3093: R: 221 MIT-Multics.ARPA Service closing transmission channel
! 3094:
! 3095: Scenario 2
! 3096:
! 3097: -------------------------------------------------------------
! 3098:
! 3099:
! 3100:
! 3101:
! 3102:
! 3103:
! 3104:
! 3105:
! 3106:
! 3107:
! 3108:
! 3109:
! 3110:
! 3111:
! 3112:
! 3113:
! 3114:
! 3115:
! 3116:
! 3117:
! 3118:
! 3119:
! 3120:
! 3121: [Page 52] Postel
! 3122:
! 3123:
! 3124:
! 3125: RFC 821 August 1982
! 3126: Simple Mail Transfer Protocol
! 3127:
! 3128:
! 3129:
! 3130: Relayed Mail Scenario
! 3131:
! 3132: -------------------------------------------------------------
! 3133:
! 3134: Step 1 -- Source Host to Relay Host
! 3135:
! 3136: R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready
! 3137: S: HELO MIT-AI.ARPA
! 3138: R: 250 USC-ISIE.ARPA
! 3139:
! 3140: S: MAIL FROM:<[email protected]>
! 3141: R: 250 OK
! 3142:
! 3143: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3144: R: 250 OK
! 3145:
! 3146: S: DATA
! 3147: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3148: S: Date: 2 Nov 81 22:33:44
! 3149: S: From: John Q. Public <[email protected]>
! 3150: S: Subject: The Next Meeting of the Board
! 3151: S: To: [email protected]
! 3152: S:
! 3153: S: Bill:
! 3154: S: The next meeting of the board of directors will be
! 3155: S: on Tuesday.
! 3156: S: John.
! 3157: S: .
! 3158: R: 250 OK
! 3159:
! 3160: S: QUIT
! 3161: R: 221 USC-ISIE.ARPA Service closing transmission channel
! 3162:
! 3163:
! 3164:
! 3165:
! 3166:
! 3167:
! 3168:
! 3169:
! 3170:
! 3171:
! 3172:
! 3173:
! 3174:
! 3175:
! 3176:
! 3177:
! 3178:
! 3179: Postel [Page 53]
! 3180:
! 3181:
! 3182:
! 3183: August 1982 RFC 821
! 3184: Simple Mail Transfer Protocol
! 3185:
! 3186:
! 3187:
! 3188: Step 2 -- Relay Host to Destination Host
! 3189:
! 3190: R: 220 BBN-VAX.ARPA Simple Mail Transfer Service Ready
! 3191: S: HELO USC-ISIE.ARPA
! 3192: R: 250 BBN-VAX.ARPA
! 3193:
! 3194: S: MAIL FROM:<@USC-ISIE.ARPA:[email protected]>
! 3195: R: 250 OK
! 3196:
! 3197: S: RCPT TO:<[email protected]>
! 3198: R: 250 OK
! 3199:
! 3200: S: DATA
! 3201: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3202: S: Received: from MIT-AI.ARPA by USC-ISIE.ARPA ;
! 3203: 2 Nov 81 22:40:10 UT
! 3204: S: Date: 2 Nov 81 22:33:44
! 3205: S: From: John Q. Public <[email protected]>
! 3206: S: Subject: The Next Meeting of the Board
! 3207: S: To: [email protected]
! 3208: S:
! 3209: S: Bill:
! 3210: S: The next meeting of the board of directors will be
! 3211: S: on Tuesday.
! 3212: S: John.
! 3213: S: .
! 3214: R: 250 OK
! 3215:
! 3216: S: QUIT
! 3217: R: 221 USC-ISIE.ARPA Service closing transmission channel
! 3218:
! 3219: Scenario 3
! 3220:
! 3221: -------------------------------------------------------------
! 3222:
! 3223:
! 3224:
! 3225:
! 3226:
! 3227:
! 3228:
! 3229:
! 3230:
! 3231:
! 3232:
! 3233:
! 3234:
! 3235:
! 3236:
! 3237: [Page 54] Postel
! 3238:
! 3239:
! 3240:
! 3241: RFC 821 August 1982
! 3242: Simple Mail Transfer Protocol
! 3243:
! 3244:
! 3245:
! 3246: Verifying and Sending Scenario
! 3247:
! 3248: -------------------------------------------------------------
! 3249:
! 3250: R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
! 3251: S: HELO MIT-MC.ARPA
! 3252: R: 250 SU-SCORE.ARPA
! 3253:
! 3254: S: VRFY Crispin
! 3255: R: 250 Mark Crispin <[email protected]>
! 3256:
! 3257: S: SEND FROM:<[email protected]>
! 3258: R: 250 OK
! 3259:
! 3260: S: RCPT TO:<[email protected]>
! 3261: R: 250 OK
! 3262:
! 3263: S: DATA
! 3264: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3265: S: Blah blah blah...
! 3266: S: ...etc. etc. etc.
! 3267: S: .
! 3268: R: 250 OK
! 3269:
! 3270: S: QUIT
! 3271: R: 221 SU-SCORE.ARPA Service closing transmission channel
! 3272:
! 3273: Scenario 4
! 3274:
! 3275: -------------------------------------------------------------
! 3276:
! 3277:
! 3278:
! 3279:
! 3280:
! 3281:
! 3282:
! 3283:
! 3284:
! 3285:
! 3286:
! 3287:
! 3288:
! 3289:
! 3290:
! 3291:
! 3292:
! 3293:
! 3294:
! 3295: Postel [Page 55]
! 3296:
! 3297:
! 3298:
! 3299: August 1982 RFC 821
! 3300: Simple Mail Transfer Protocol
! 3301:
! 3302:
! 3303:
! 3304: Sending and Mailing Scenarios
! 3305:
! 3306: First the user's name is verified, then an attempt is made to
! 3307: send to the user's terminal. When that fails, the messages is
! 3308: mailed to the user's mailbox.
! 3309:
! 3310: -------------------------------------------------------------
! 3311:
! 3312: R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
! 3313: S: HELO MIT-MC.ARPA
! 3314: R: 250 SU-SCORE.ARPA
! 3315:
! 3316: S: VRFY Crispin
! 3317: R: 250 Mark Crispin <[email protected]>
! 3318:
! 3319: S: SEND FROM:<[email protected]>
! 3320: R: 250 OK
! 3321:
! 3322: S: RCPT TO:<[email protected]>
! 3323: R: 450 User not active now
! 3324:
! 3325: S: RSET
! 3326: R: 250 OK
! 3327:
! 3328: S: MAIL FROM:<[email protected]>
! 3329: R: 250 OK
! 3330:
! 3331: S: RCPT TO:<[email protected]>
! 3332: R: 250 OK
! 3333:
! 3334: S: DATA
! 3335: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3336: S: Blah blah blah...
! 3337: S: ...etc. etc. etc.
! 3338: S: .
! 3339: R: 250 OK
! 3340:
! 3341: S: QUIT
! 3342: R: 221 SU-SCORE.ARPA Service closing transmission channel
! 3343:
! 3344: Scenario 5
! 3345:
! 3346: -------------------------------------------------------------
! 3347:
! 3348:
! 3349:
! 3350:
! 3351:
! 3352:
! 3353: [Page 56] Postel
! 3354:
! 3355:
! 3356:
! 3357: RFC 821 August 1982
! 3358: Simple Mail Transfer Protocol
! 3359:
! 3360:
! 3361:
! 3362: Doing the preceding scenario more efficiently.
! 3363:
! 3364: -------------------------------------------------------------
! 3365:
! 3366: R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
! 3367: S: HELO MIT-MC.ARPA
! 3368: R: 250 SU-SCORE.ARPA
! 3369:
! 3370: S: VRFY Crispin
! 3371: R: 250 Mark Crispin <[email protected]>
! 3372:
! 3373: S: SOML FROM:<[email protected]>
! 3374: R: 250 OK
! 3375:
! 3376: S: RCPT TO:<[email protected]>
! 3377: R: 250 User not active now, so will do mail.
! 3378:
! 3379: S: DATA
! 3380: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3381: S: Blah blah blah...
! 3382: S: ...etc. etc. etc.
! 3383: S: .
! 3384: R: 250 OK
! 3385:
! 3386: S: QUIT
! 3387: R: 221 SU-SCORE.ARPA Service closing transmission channel
! 3388:
! 3389: Scenario 6
! 3390:
! 3391: -------------------------------------------------------------
! 3392:
! 3393:
! 3394:
! 3395:
! 3396:
! 3397:
! 3398:
! 3399:
! 3400:
! 3401:
! 3402:
! 3403:
! 3404:
! 3405:
! 3406:
! 3407:
! 3408:
! 3409:
! 3410:
! 3411: Postel [Page 57]
! 3412:
! 3413:
! 3414:
! 3415: August 1982 RFC 821
! 3416: Simple Mail Transfer Protocol
! 3417:
! 3418:
! 3419:
! 3420: Mailing List Scenario
! 3421:
! 3422: First each of two mailing lists are expanded in separate sessions
! 3423: with different hosts. Then the message is sent to everyone that
! 3424: appeared on either list (but no duplicates) via a relay host.
! 3425:
! 3426: -------------------------------------------------------------
! 3427:
! 3428: Step 1 -- Expanding the First List
! 3429:
! 3430: R: 220 MIT-AI.ARPA Simple Mail Transfer Service Ready
! 3431: S: HELO SU-SCORE.ARPA
! 3432: R: 250 MIT-AI.ARPA
! 3433:
! 3434: S: EXPN Example-People
! 3435: R: 250-<[email protected]>
! 3436: R: 250-Fred Fonebone <[email protected]>
! 3437: R: 250-Xenon Y. Zither <[email protected]>
! 3438: R: 250-Quincy Smith <@USC-ISIF.ARPA:[email protected]>
! 3439: R: 250-<[email protected]>
! 3440: R: 250 <[email protected]>
! 3441:
! 3442: S: QUIT
! 3443: R: 221 MIT-AI.ARPA Service closing transmission channel
! 3444:
! 3445:
! 3446:
! 3447:
! 3448:
! 3449:
! 3450:
! 3451:
! 3452:
! 3453:
! 3454:
! 3455:
! 3456:
! 3457:
! 3458:
! 3459:
! 3460:
! 3461:
! 3462:
! 3463:
! 3464:
! 3465:
! 3466:
! 3467:
! 3468:
! 3469: [Page 58] Postel
! 3470:
! 3471:
! 3472:
! 3473: RFC 821 August 1982
! 3474: Simple Mail Transfer Protocol
! 3475:
! 3476:
! 3477:
! 3478: Step 2 -- Expanding the Second List
! 3479:
! 3480: R: 220 MIT-MC.ARPA Simple Mail Transfer Service Ready
! 3481: S: HELO SU-SCORE.ARPA
! 3482: R: 250 MIT-MC.ARPA
! 3483:
! 3484: S: EXPN Interested-Parties
! 3485: R: 250-Al Calico <[email protected]>
! 3486: R: 250-<[email protected]>
! 3487: R: 250-Quincy Smith <@USC-ISIF.ARPA:[email protected]>
! 3488: R: 250-<[email protected]>
! 3489: R: 250 <[email protected]>
! 3490:
! 3491: S: QUIT
! 3492: R: 221 MIT-MC.ARPA Service closing transmission channel
! 3493:
! 3494:
! 3495:
! 3496:
! 3497:
! 3498:
! 3499:
! 3500:
! 3501:
! 3502:
! 3503:
! 3504:
! 3505:
! 3506:
! 3507:
! 3508:
! 3509:
! 3510:
! 3511:
! 3512:
! 3513:
! 3514:
! 3515:
! 3516:
! 3517:
! 3518:
! 3519:
! 3520:
! 3521:
! 3522:
! 3523:
! 3524:
! 3525:
! 3526:
! 3527: Postel [Page 59]
! 3528:
! 3529:
! 3530:
! 3531: August 1982 RFC 821
! 3532: Simple Mail Transfer Protocol
! 3533:
! 3534:
! 3535:
! 3536: Step 3 -- Mailing to All via a Relay Host
! 3537:
! 3538: R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready
! 3539: S: HELO SU-SCORE.ARPA
! 3540: R: 250 USC-ISIE.ARPA
! 3541:
! 3542: S: MAIL FROM:<[email protected]>
! 3543: R: 250 OK
! 3544: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3545: R: 250 OK
! 3546: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3547: R: 250 OK
! 3548: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3549: R: 250 OK
! 3550: S: RCPT
! 3551: TO:<@USC-ISIE.ARPA,@USC-ISIF.ARPA:[email protected]>
! 3552: R: 250 OK
! 3553: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3554: R: 250 OK
! 3555: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3556: R: 250 OK
! 3557: S: RCPT TO:<@USC-ISIE.ARPA:[email protected]>
! 3558: R: 250 OK
! 3559:
! 3560: S: DATA
! 3561: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3562: S: Blah blah blah...
! 3563: S: ...etc. etc. etc.
! 3564: S: .
! 3565: R: 250 OK
! 3566:
! 3567: S: QUIT
! 3568: R: 221 USC-ISIE.ARPA Service closing transmission channel
! 3569:
! 3570: Scenario 7
! 3571:
! 3572: -------------------------------------------------------------
! 3573:
! 3574:
! 3575:
! 3576:
! 3577:
! 3578:
! 3579:
! 3580:
! 3581:
! 3582:
! 3583:
! 3584:
! 3585: [Page 60] Postel
! 3586:
! 3587:
! 3588:
! 3589: RFC 821 August 1982
! 3590: Simple Mail Transfer Protocol
! 3591:
! 3592:
! 3593:
! 3594: Forwarding Scenarios
! 3595:
! 3596: -------------------------------------------------------------
! 3597:
! 3598: R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready
! 3599: S: HELO LBL-UNIX.ARPA
! 3600: R: 250 USC-ISIF.ARPA
! 3601:
! 3602: S: MAIL FROM:<[email protected]>
! 3603: R: 250 OK
! 3604:
! 3605: S: RCPT TO:<[email protected]>
! 3606: R: 251 User not local; will forward to <[email protected]>
! 3607:
! 3608: S: DATA
! 3609: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3610: S: Blah blah blah...
! 3611: S: ...etc. etc. etc.
! 3612: S: .
! 3613: R: 250 OK
! 3614:
! 3615: S: QUIT
! 3616: R: 221 USC-ISIF.ARPA Service closing transmission channel
! 3617:
! 3618: Scenario 8
! 3619:
! 3620: -------------------------------------------------------------
! 3621:
! 3622:
! 3623:
! 3624:
! 3625:
! 3626:
! 3627:
! 3628:
! 3629:
! 3630:
! 3631:
! 3632:
! 3633:
! 3634:
! 3635:
! 3636:
! 3637:
! 3638:
! 3639:
! 3640:
! 3641:
! 3642:
! 3643: Postel [Page 61]
! 3644:
! 3645:
! 3646:
! 3647: August 1982 RFC 821
! 3648: Simple Mail Transfer Protocol
! 3649:
! 3650:
! 3651:
! 3652: -------------------------------------------------------------
! 3653:
! 3654: Step 1 -- Trying the Mailbox at the First Host
! 3655:
! 3656: R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready
! 3657: S: HELO LBL-UNIX.ARPA
! 3658: R: 250 USC-ISIF.ARPA
! 3659:
! 3660: S: MAIL FROM:<[email protected]>
! 3661: R: 250 OK
! 3662:
! 3663: S: RCPT TO:<[email protected]>
! 3664: R: 251 User not local; will forward to <[email protected]>
! 3665:
! 3666: S: RSET
! 3667: R: 250 OK
! 3668:
! 3669: S: QUIT
! 3670: R: 221 USC-ISIF.ARPA Service closing transmission channel
! 3671:
! 3672: Step 2 -- Delivering the Mail at the Second Host
! 3673:
! 3674: R: 220 USC-ISI.ARPA Simple Mail Transfer Service Ready
! 3675: S: HELO LBL-UNIX.ARPA
! 3676: R: 250 USC-ISI.ARPA
! 3677:
! 3678: S: MAIL FROM:<[email protected]>
! 3679: R: 250 OK
! 3680:
! 3681: S: RCPT TO:<[email protected]>
! 3682: R: OK
! 3683:
! 3684: S: DATA
! 3685: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3686: S: Blah blah blah...
! 3687: S: ...etc. etc. etc.
! 3688: S: .
! 3689: R: 250 OK
! 3690:
! 3691: S: QUIT
! 3692: R: 221 USC-ISI.ARPA Service closing transmission channel
! 3693:
! 3694: Scenario 9
! 3695:
! 3696: -------------------------------------------------------------
! 3697:
! 3698:
! 3699:
! 3700:
! 3701: [Page 62] Postel
! 3702:
! 3703:
! 3704:
! 3705: RFC 821 August 1982
! 3706: Simple Mail Transfer Protocol
! 3707:
! 3708:
! 3709:
! 3710: Too Many Recipients Scenario
! 3711:
! 3712: -------------------------------------------------------------
! 3713:
! 3714: R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready
! 3715: S: HELO USC-ISIF.ARPA
! 3716: R: 250 BERKELEY.ARPA
! 3717:
! 3718: S: MAIL FROM:<[email protected]>
! 3719: R: 250 OK
! 3720:
! 3721: S: RCPT TO:<[email protected]>
! 3722: R: 250 OK
! 3723:
! 3724: S: RCPT TO:<[email protected]>
! 3725: R: 552 Recipient storage full, try again in another transaction
! 3726:
! 3727: S: DATA
! 3728: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3729: S: Blah blah blah...
! 3730: S: ...etc. etc. etc.
! 3731: S: .
! 3732: R: 250 OK
! 3733:
! 3734: S: MAIL FROM:<[email protected]>
! 3735: R: 250 OK
! 3736:
! 3737: S: RCPT TO:<[email protected]>
! 3738: R: 250 OK
! 3739:
! 3740: S: DATA
! 3741: R: 354 Start mail input; end with <CRLF>.<CRLF>
! 3742: S: Blah blah blah...
! 3743: S: ...etc. etc. etc.
! 3744: S: .
! 3745: R: 250 OK
! 3746:
! 3747: S: QUIT
! 3748: R: 221 BERKELEY.ARPA Service closing transmission channel
! 3749:
! 3750: Scenario 10
! 3751:
! 3752: -------------------------------------------------------------
! 3753:
! 3754: Note that a real implementation must handle many recipients as
! 3755: specified in Section 4.5.3.
! 3756:
! 3757:
! 3758:
! 3759: Postel [Page 63]
! 3760:
! 3761:
! 3762:
! 3763: August 1982 RFC 821
! 3764: Simple Mail Transfer Protocol
! 3765:
! 3766:
! 3767:
! 3768: GLOSSARY
! 3769:
! 3770: ASCII
! 3771:
! 3772: American Standard Code for Information Interchange [1].
! 3773:
! 3774: command
! 3775:
! 3776: A request for a mail service action sent by the sender-SMTP to the
! 3777: receiver-SMTP.
! 3778:
! 3779: domain
! 3780:
! 3781: The hierarchially structured global character string address of a
! 3782: host computer in the mail system.
! 3783:
! 3784: end of mail data indication
! 3785:
! 3786: A special sequence of characters that indicates the end of the
! 3787: mail data. In particular, the five characters carriage return,
! 3788: line feed, period, carriage return, line feed, in that order.
! 3789:
! 3790: host
! 3791:
! 3792: A computer in the internetwork environment on which mailboxes or
! 3793: SMTP processes reside.
! 3794:
! 3795: line
! 3796:
! 3797: A a sequence of ASCII characters ending with a <CRLF>.
! 3798:
! 3799: mail data
! 3800:
! 3801: A sequence of ASCII characters of arbitrary length, which conforms
! 3802: to the standard set in the Standard for the Format of ARPA
! 3803: Internet Text Messages (RFC 822 [2]).
! 3804:
! 3805: mailbox
! 3806:
! 3807: A character string (address) which identifies a user to whom mail
! 3808: is to be sent. Mailbox normally consists of the host and user
! 3809: specifications. The standard mailbox naming convention is defined
! 3810: to be "user@domain". Additionally, the "container" in which mail
! 3811: is stored.
! 3812:
! 3813:
! 3814:
! 3815:
! 3816:
! 3817: [Page 64] Postel
! 3818:
! 3819:
! 3820:
! 3821: RFC 821 August 1982
! 3822: Simple Mail Transfer Protocol
! 3823:
! 3824:
! 3825:
! 3826: receiver-SMTP process
! 3827:
! 3828: A process which transfers mail in cooperation with a sender-SMTP
! 3829: process. It waits for a connection to be established via the
! 3830: transport service. It receives SMTP commands from the
! 3831: sender-SMTP, sends replies, and performs the specified operations.
! 3832:
! 3833: reply
! 3834:
! 3835: A reply is an acknowledgment (positive or negative) sent from
! 3836: receiver to sender via the transmission channel in response to a
! 3837: command. The general form of a reply is a completion code
! 3838: (including error codes) followed by a text string. The codes are
! 3839: for use by programs and the text is usually intended for human
! 3840: users.
! 3841:
! 3842: sender-SMTP process
! 3843:
! 3844: A process which transfers mail in cooperation with a receiver-SMTP
! 3845: process. A local language may be used in the user interface
! 3846: command/reply dialogue. The sender-SMTP initiates the transport
! 3847: service connection. It initiates SMTP commands, receives replies,
! 3848: and governs the transfer of mail.
! 3849:
! 3850: session
! 3851:
! 3852: The set of exchanges that occur while the transmission channel is
! 3853: open.
! 3854:
! 3855: transaction
! 3856:
! 3857: The set of exchanges required for one message to be transmitted
! 3858: for one or more recipients.
! 3859:
! 3860: transmission channel
! 3861:
! 3862: A full-duplex communication path between a sender-SMTP and a
! 3863: receiver-SMTP for the exchange of commands, replies, and mail
! 3864: text.
! 3865:
! 3866: transport service
! 3867:
! 3868: Any reliable stream-oriented data communication services. For
! 3869: example, NCP, TCP, NITS.
! 3870:
! 3871:
! 3872:
! 3873:
! 3874:
! 3875: Postel [Page 65]
! 3876:
! 3877:
! 3878:
! 3879: August 1982 RFC 821
! 3880: Simple Mail Transfer Protocol
! 3881:
! 3882:
! 3883:
! 3884: user
! 3885:
! 3886: A human being (or a process on behalf of a human being) wishing to
! 3887: obtain mail transfer service. In addition, a recipient of
! 3888: computer mail.
! 3889:
! 3890: word
! 3891:
! 3892: A sequence of printing characters.
! 3893:
! 3894: <CRLF>
! 3895:
! 3896: The characters carriage return and line feed (in that order).
! 3897:
! 3898: <SP>
! 3899:
! 3900: The space character.
! 3901:
! 3902:
! 3903:
! 3904:
! 3905:
! 3906:
! 3907:
! 3908:
! 3909:
! 3910:
! 3911:
! 3912:
! 3913:
! 3914:
! 3915:
! 3916:
! 3917:
! 3918:
! 3919:
! 3920:
! 3921:
! 3922:
! 3923:
! 3924:
! 3925:
! 3926:
! 3927:
! 3928:
! 3929:
! 3930:
! 3931:
! 3932:
! 3933: [Page 66] Postel
! 3934:
! 3935:
! 3936:
! 3937: RFC 821 August 1982
! 3938: Simple Mail Transfer Protocol
! 3939:
! 3940:
! 3941:
! 3942: REFERENCES
! 3943:
! 3944: [1] ASCII
! 3945:
! 3946: ASCII, "USA Code for Information Interchange", United States of
! 3947: America Standards Institute, X3.4, 1968. Also in: Feinler, E.
! 3948: and J. Postel, eds., "ARPANET Protocol Handbook", NIC 7104, for
! 3949: the Defense Communications Agency by SRI International, Menlo
! 3950: Park, California, Revised January 1978.
! 3951:
! 3952: [2] RFC 822
! 3953:
! 3954: Crocker, D., "Standard for the Format of ARPA Internet Text
! 3955: Messages," RFC 822, Department of Electrical Engineering,
! 3956: University of Delaware, August 1982.
! 3957:
! 3958: [3] TCP
! 3959:
! 3960: Postel, J., ed., "Transmission Control Protocol - DARPA Internet
! 3961: Program Protocol Specification", RFC 793, USC/Information Sciences
! 3962: Institute, NTIS AD Number A111091, September 1981. Also in:
! 3963: Feinler, E. and J. Postel, eds., "Internet Protocol Transition
! 3964: Workbook", SRI International, Menlo Park, California, March 1982.
! 3965:
! 3966: [4] NCP
! 3967:
! 3968: McKenzie,A., "Host/Host Protocol for the ARPA Network", NIC 8246,
! 3969: January 1972. Also in: Feinler, E. and J. Postel, eds., "ARPANET
! 3970: Protocol Handbook", NIC 7104, for the Defense Communications
! 3971: Agency by SRI International, Menlo Park, California, Revised
! 3972: January 1978.
! 3973:
! 3974: [5] Initial Connection Protocol
! 3975:
! 3976: Postel, J., "Official Initial Connection Protocol", NIC 7101,
! 3977: 11 June 1971. Also in: Feinler, E. and J. Postel, eds., "ARPANET
! 3978: Protocol Handbook", NIC 7104, for the Defense Communications
! 3979: Agency by SRI International, Menlo Park, California, Revised
! 3980: January 1978.
! 3981:
! 3982: [6] NITS
! 3983:
! 3984: PSS/SG3, "A Network Independent Transport Service", Study Group 3,
! 3985: The Post Office PSS Users Group, February 1980. Available from
! 3986: the DCPU, National Physical Laboratory, Teddington, UK.
! 3987:
! 3988:
! 3989:
! 3990:
! 3991: Postel [Page 67]
! 3992:
! 3993:
! 3994:
! 3995: August 1982 RFC 821
! 3996: Simple Mail Transfer Protocol
! 3997:
! 3998:
! 3999:
! 4000: [7] X.25
! 4001:
! 4002: CCITT, "Recommendation X.25 - Interface Between Data Terminal
! 4003: Equipment (DTE) and Data Circuit-terminating Equipment (DCE) for
! 4004: Terminals Operating in the Packet Mode on Public Data Networks,"
! 4005: CCITT Orange Book, Vol. VIII.2, International Telephone and
! 4006: Telegraph Consultative Committee, Geneva, 1976.
! 4007:
! 4008:
! 4009:
! 4010:
! 4011:
! 4012:
! 4013:
! 4014:
! 4015:
! 4016:
! 4017:
! 4018:
! 4019:
! 4020:
! 4021:
! 4022:
! 4023:
! 4024:
! 4025:
! 4026:
! 4027:
! 4028:
! 4029:
! 4030:
! 4031:
! 4032:
! 4033:
! 4034:
! 4035:
! 4036:
! 4037:
! 4038:
! 4039:
! 4040:
! 4041:
! 4042:
! 4043:
! 4044:
! 4045:
! 4046:
! 4047:
! 4048:
! 4049: [Page 68] Postel
! 4050:
! 4051: