rfc2821.txt | klensin-changed.txt | |||
---|---|---|---|---|
Network Working Group J. Klensin, Editor | Network Working Group J. Klensin | |||
Request for Comments: 2821 AT&T Laboratories | ||||
Updates: 1123 | Obsoletes: 2821 (if approved) | |||
Category: Standards Track | Intended status: Standards Track | |||
Expires: October 17, 2008 | ||||
Simple Mail Transfer Protocol | Simple Mail Transfer Protocol | |||
draft-klensin-rfc2821bis-10.txt | ||||
Status of this Memo | Status of this Memo | |||
This document specifies an Internet standards track protocol for the | By submitting this Internet-Draft, each author represents that any | |||
Internet community, and requests discussion and suggestions for | applicable patent or other IPR claims of which he or she is aware | |||
improvements. Please refer to the current edition of the "Internet | have been or will be disclosed, and any of which he or she becomes | |||
Official Protocol Standards" (STD 1) for the standardization state | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
and status of this protocol. Distribution of this memo is unlimited. | ||||
Copyright Notice | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | ||||
other groups may also distribute working documents as Internet- | ||||
Drafts. | ||||
Copyright (C) The Internet Society (2001). All Rights Reserved. | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | ||||
time. It is inappropriate to use Internet-Drafts as reference | ||||
material or to cite them other than as "work in progress." | ||||
Abstract | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | ||||
This document is a self-contained specification of the basic protocol | The list of Internet-Draft Shadow Directories can be accessed at | |||
for the Internet electronic mail transport. It consolidates, updates | http://www.ietf.org/shadow.html. | |||
and clarifies, but doesn't add new or change existing functionality | ||||
of the following: | ||||
- the original SMTP (Simple Mail Transfer Protocol) specification of | This Internet-Draft will expire on October 17, 2008. | |||
RFC 821 [30], | ||||
- domain name system requirements and implications for mail | Abstract | |||
transport from RFC 1035 [22] and RFC 974 [27], | ||||
- the clarifications and applicability statements in RFC 1123 [2], | This document is a specification of the basic protocol for Internet | |||
and | electronic mail transport. It consolidates, updates, and clarifies | |||
several previous documents, making all or parts of most of them | ||||
obsolete. It covers the SMTP extension mechanisms and best practices | ||||
for the contemporary Internet, but does not provide details about | ||||
particular extensions. Although SMTP was designed as a mail | ||||
transport and delivery protocol, this specification also contains | ||||
information that is important to its use as a "mail submission" | ||||
protocol for "split-UA" mail reading systems and mobile environments. | ||||
- material drawn from the SMTP Extension mechanisms [19]. | Table of Contents | |||
It obsoletes RFC 821, RFC 974, and updates RFC 1123 (replaces the | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
mail transport materials of RFC 1123). However, RFC 821 specifies | 1.1. Context and Notes for this Draft . . . . . . . . . . . . . 6 | |||
some features that were not in significant use in the Internet by the | 1.2. Mailing List . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
mid-1990s and (in appendices) some additional transport models. | 1.3. Transport of electronic mail . . . . . . . . . . . . . . . 6 | |||
Those sections are omitted here in the interest of clarity and | 1.4. History and context for this document . . . . . . . . . . 6 | |||
brevity; readers needing them should refer to RFC 821. | 2. The SMTP Model . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.1. Basic Structure . . . . . . . . . . . . . . . . . . . . . 8 | ||||
2.2. The Extension Model . . . . . . . . . . . . . . . . . . . 10 | ||||
2.2.1. Background . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
2.2.2. Definition and Registration of Extensions . . . . . . 11 | ||||
2.2.3. Special Issues with Extensions . . . . . . . . . . . . 12 | ||||
2.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
2.3.1. Mail Objects . . . . . . . . . . . . . . . . . . . . . 12 | ||||
2.3.2. Senders and Receivers . . . . . . . . . . . . . . . . 13 | ||||
2.3.3. Mail Agents and Message Stores . . . . . . . . . . . . 13 | ||||
2.3.4. Host . . . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
2.3.5. Domain Names . . . . . . . . . . . . . . . . . . . . . 14 | ||||
2.3.6. Buffer and State Table . . . . . . . . . . . . . . . . 15 | ||||
2.3.7. Commands and Replies . . . . . . . . . . . . . . . . . 15 | ||||
2.3.8. Lines . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
2.3.9. Message Content and Mail Data . . . . . . . . . . . . 16 | ||||
2.3.10. Originator, Delivery, Relay, and Gateway Systems . . . 16 | ||||
2.3.11. Mailbox and Address . . . . . . . . . . . . . . . . . 16 | ||||
2.4. General Syntax Principles and Transaction Model . . . . . 17 | ||||
3. The SMTP Procedures: An Overview . . . . . . . . . . . . . . . 18 | ||||
3.1. Session Initiation . . . . . . . . . . . . . . . . . . . . 19 | ||||
3.2. Client Initiation . . . . . . . . . . . . . . . . . . . . 19 | ||||
3.3. Mail Transactions . . . . . . . . . . . . . . . . . . . . 20 | ||||
3.4. Forwarding for Address Correction or Updating . . . . . . 22 | ||||
3.5. Commands for Debugging Addresses . . . . . . . . . . . . . 23 | ||||
3.5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
3.5.2. VRFY Normal Response . . . . . . . . . . . . . . . . . 25 | ||||
3.5.3. Meaning of VRFY or EXPN Success Response . . . . . . . 26 | ||||
3.5.4. Semantics and Applications of EXPN . . . . . . . . . . 27 | ||||
3.6. Relaying and Mail Routing . . . . . . . . . . . . . . . . 27 | ||||
3.6.1. Source Routes and Relaying . . . . . . . . . . . . . . 27 | ||||
3.6.2. Mail eXchange Records and Relaying . . . . . . . . . . 27 | ||||
3.6.3. Message Submission Servers as Relays . . . . . . . . . 28 | ||||
3.7. Mail Gatewaying . . . . . . . . . . . . . . . . . . . . . 29 | ||||
3.7.1. Header Fields in Gatewaying . . . . . . . . . . . . . 29 | ||||
3.7.2. Received Lines in Gatewaying . . . . . . . . . . . . . 30 | ||||
3.7.3. Addresses in Gatewaying . . . . . . . . . . . . . . . 30 | ||||
3.7.4. Other Header Fields in Gatewaying . . . . . . . . . . 30 | ||||
3.7.5. Envelopes in Gatewaying . . . . . . . . . . . . . . . 30 | ||||
3.8. Terminating Sessions and Connections . . . . . . . . . . . 31 | ||||
3.9. Mailing Lists and Aliases . . . . . . . . . . . . . . . . 31 | ||||
3.9.1. Alias . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
3.9.2. List . . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
4. The SMTP Specifications . . . . . . . . . . . . . . . . . . . 33 | ||||
4.1. SMTP Commands . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
4.1.1. Command Semantics and Syntax . . . . . . . . . . . . . 33 | ||||
4.1.2. Command Argument Syntax . . . . . . . . . . . . . . . 41 | ||||
4.1.3. Address Literals . . . . . . . . . . . . . . . . . . . 43 | ||||
4.1.4. Order of Commands . . . . . . . . . . . . . . . . . . 44 | ||||
4.1.5. Private-use Commands . . . . . . . . . . . . . . . . . 46 | ||||
4.2. SMTP Replies . . . . . . . . . . . . . . . . . . . . . . . 46 | ||||
4.2.1. Reply Code Severities and Theory . . . . . . . . . . . 48 | ||||
4.2.2. Reply Codes by Function Groups . . . . . . . . . . . . 50 | ||||
4.2.3. Reply Codes in Numeric Order . . . . . . . . . . . . . 52 | ||||
4.2.4. Reply Code 502 . . . . . . . . . . . . . . . . . . . . 53 | ||||
4.2.5. Reply Codes After DATA and the Subsequent | ||||
<CRLF>.<CRLF> . . . . . . . . . . . . . . . . . . . . 53 | ||||
4.3. Sequencing of Commands and Replies . . . . . . . . . . . . 54 | ||||
4.3.1. Sequencing Overview . . . . . . . . . . . . . . . . . 54 | ||||
4.3.2. Command-Reply Sequences . . . . . . . . . . . . . . . 55 | ||||
4.4. Trace Information . . . . . . . . . . . . . . . . . . . . 57 | ||||
4.5. Additional Implementation Issues . . . . . . . . . . . . . 61 | ||||
4.5.1. Minimum Implementation . . . . . . . . . . . . . . . . 61 | ||||
4.5.2. Transparency . . . . . . . . . . . . . . . . . . . . . 62 | ||||
4.5.3. Sizes and Timeouts . . . . . . . . . . . . . . . . . . 62 | ||||
4.5.3.1. Size limits and minimums . . . . . . . . . . . . . 62 | ||||
4.5.3.1.1. local-part . . . . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.2. domain . . . . . . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.3. path . . . . . . . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.4. command line . . . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.5. reply line . . . . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.6. text line . . . . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.7. message content . . . . . . . . . . . . . . . 63 | ||||
4.5.3.1.8. recipients buffer . . . . . . . . . . . . . . 64 | ||||
4.5.3.1.9. Treatment When Limits Exceeded . . . . . . . . 64 | ||||
4.5.3.1.10. Too Many Recipients code . . . . . . . . . . . 64 | ||||
4.5.3.2. Timeouts . . . . . . . . . . . . . . . . . . . . . 65 | ||||
4.5.3.2.1. Initial 220 Message: 5 minutes . . . . . . . . 65 | ||||
4.5.3.2.2. MAIL Command: 5 minutes . . . . . . . . . . . 66 | ||||
4.5.3.2.3. RCPT Command: 5 minutes . . . . . . . . . . . 66 | ||||
4.5.3.2.4. DATA Initiation: 2 minutes . . . . . . . . . . 66 | ||||
4.5.3.2.5. Data Block: 3 minutes . . . . . . . . . . . . 66 | ||||
4.5.3.2.6. DATA Termination: 10 minutes. . . . . . . . . 66 | ||||
4.5.3.2.7. Server Timeout: 5 minutes. . . . . . . . . . . 66 | ||||
4.5.4. Retry Strategies . . . . . . . . . . . . . . . . . . . 66 | ||||
4.5.5. Messages with a null reverse-path . . . . . . . . . . 68 | ||||
5. Address Resolution and Mail Handling . . . . . . . . . . . . . 69 | ||||
5.1. Locating the Target Host . . . . . . . . . . . . . . . . . 69 | ||||
5.2. IPv6 and MX Records . . . . . . . . . . . . . . . . . . . 71 | ||||
6. Problem Detection and Handling . . . . . . . . . . . . . . . . 71 | ||||
6.1. Reliable Delivery and Replies by Email . . . . . . . . . . 72 | ||||
6.2. Unwanted, unsolicited, and "attack" messages . . . . . . . 73 | ||||
6.3. Loop Detection . . . . . . . . . . . . . . . . . . . . . . 73 | ||||
6.4. Compensating for Irregularities . . . . . . . . . . . . . 74 | ||||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 75 | ||||
7.1. Mail Security and Spoofing . . . . . . . . . . . . . . . . 75 | ||||
7.2. "Blind" Copies . . . . . . . . . . . . . . . . . . . . . . 76 | ||||
7.3. VRFY, EXPN, and Security . . . . . . . . . . . . . . . . . 77 | ||||
7.4. Mail Rerouting Based on the 251 and 551 Response Codes . . 77 | ||||
7.5. Information Disclosure in Announcements . . . . . . . . . 78 | ||||
7.6. Information Disclosure in Trace Fields . . . . . . . . . . 78 | ||||
7.7. Information Disclosure in Message Forwarding . . . . . . . 78 | ||||
7.8. Resistance to Attacks . . . . . . . . . . . . . . . . . . 78 | ||||
7.9. Scope of Operation of SMTP Servers . . . . . . . . . . . . 79 | ||||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 79 | ||||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 80 | ||||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 81 | ||||
10.1. Normative References . . . . . . . . . . . . . . . . . . . 81 | ||||
10.2. Informative References . . . . . . . . . . . . . . . . . . 82 | ||||
Appendix A. TCP Transport Service . . . . . . . . . . . . . . . . 84 | ||||
Appendix B. Generating SMTP Commands from RFC 822 Header | ||||
Fields . . . . . . . . . . . . . . . . . . . . . . . 85 | ||||
Appendix C. Source Routes . . . . . . . . . . . . . . . . . . . . 86 | ||||
Appendix D. Scenarios . . . . . . . . . . . . . . . . . . . . . . 87 | ||||
D.1. A Typical SMTP Transaction Scenario . . . . . . . . . . . 87 | ||||
D.2. Aborted SMTP Transaction Scenario . . . . . . . . . . . . 88 | ||||
D.3. Relayed Mail Scenario . . . . . . . . . . . . . . . . . . 88 | ||||
D.4. Verifying and Sending Scenario . . . . . . . . . . . . . . 90 | ||||
Appendix E. Other Gateway Issues . . . . . . . . . . . . . . . . 91 | ||||
Appendix F. Deprecated Features of RFC 821 . . . . . . . . . . . 91 | ||||
F.1. TURN . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 | ||||
F.2. Source Routing . . . . . . . . . . . . . . . . . . . . . . 91 | ||||
F.3. HELO . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 | ||||
F.4. #-literals . . . . . . . . . . . . . . . . . . . . . . . . 92 | ||||
F.5. Dates and Years . . . . . . . . . . . . . . . . . . . . . 92 | ||||
F.6. Sending versus Mailing . . . . . . . . . . . . . . . . . . 92 | ||||
Appendix G. Change log . . . . . . . . . . . . . . . . . . . . . 92 | ||||
G.1. Changes from RFC 2821 to the initial (-00) version of | ||||
this draft . . . . . . . . . . . . . . . . . . . . . . . . 93 | ||||
G.2. Changes from version -00 to -01 . . . . . . . . . . . . . 93 | ||||
G.3. Changes from version -01 to -02 . . . . . . . . . . . . . 94 | ||||
G.4. Changes from version -02 to -03 . . . . . . . . . . . . . 95 | ||||
G.5. Changes from version -02 to -03 . . . . . . . . . . . . . 95 | ||||
G.6. Changes from version -03 to -04 . . . . . . . . . . . . . 95 | ||||
G.7. Changes from version -04 to -05 . . . . . . . . . . . . . 96 | ||||
G.8. Changes from version -05 to -06 . . . . . . . . . . . . . 96 | ||||
G.9. Changes from version -06 to -07 . . . . . . . . . . . . . 96 | ||||
G.10. Changes from version -07 to -08 . . . . . . . . . . . . . 97 | ||||
G.11. Changes from version -08 to -09 . . . . . . . . . . . . . 97 | ||||
G.12. Changes from version -09 to -10 . . . . . . . . . . . . . 97 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 97 | ||||
Intellectual Property and Copyright Statements . . . . . . . . . . 98 | ||||
It also includes some additional material from RFC 1123 that required | 1. Introduction | |||
amplification. This material has been identified in multiple ways, | ||||
mostly by tracking flaming on various lists and newsgroups and | ||||
problems of unusual readings or interpretations that have appeared as | ||||
the SMTP extensions have been deployed. Where this specification | ||||
moves beyond consolidation and actually differs from earlier | ||||
documents, it supersedes them technically as well as textually. | ||||
Although SMTP was designed as a mail transport and delivery protocol, | [[RFC Editor: Please remove the next two subsections, i.e., | |||
this specification also contains information that is important to its | Section 1.1 and Section 1.2]] | |||
use as a 'mail submission' protocol, as recommended for POP [3, 26] | ||||
and IMAP [6]. Additional submission issues are discussed in RFC 2476 | ||||
[15]. | ||||
Section 2.3 provides definitions of terms specific to this document. | 1.1. Context and Notes for this Draft | |||
Except when the historical terminology is necessary for clarity, this | ||||
document uses the current 'client' and 'server' terminology to | ||||
identify the sending and receiving SMTP processes, respectively. | ||||
A companion document [32] discusses message headers, message bodies | This version of the I-D is generated after the second IETF Last Call | |||
and formats and structures for them, and their relationship. | (on the changes in draft-klensin-rfc2821bis-08) and additional small | |||
changes to provide the IESG and RFC Editor a clean copy for final | ||||
approval, editing and publication. | ||||
Table of Contents | 1.2. Mailing List | |||
1. Introduction .................................................. 4 | This document is being discussed on the historical SMTP mailing list, | |||
2. The SMTP Model ................................................ 5 | ietf-smtp, maintained at imc.org. | |||
2.1 Basic Structure .............................................. 5 | ||||
2.2 The Extension Model .......................................... 7 | ||||
2.2.1 Background ................................................. 7 | ||||
2.2.2 Definition and Registration of Extensions .................. 8 | ||||
2.3 Terminology .................................................. 9 | ||||
2.3.1 Mail Objects ............................................... 10 | ||||
2.3.2 Senders and Receivers ...................................... 10 | ||||
2.3.3 Mail Agents and Message Stores ............................. 10 | ||||
2.3.4 Host ....................................................... 11 | ||||
2.3.5 Domain ..................................................... 11 | ||||
2.3.6 Buffer and State Table ..................................... 11 | ||||
2.3.7 Lines ...................................................... 12 | ||||
2.3.8 Originator, Delivery, Relay, and Gateway Systems ........... 12 | ||||
2.3.9 Message Content and Mail Data .............................. 13 | ||||
2.3.10 Mailbox and Address ....................................... 13 | ||||
2.3.11 Reply ..................................................... 13 | ||||
2.4 General Syntax Principles and Transaction Model .............. 13 | ||||
3. The SMTP Procedures: An Overview .............................. 15 | ||||
3.1 Session Initiation ........................................... 15 | ||||
3.2 Client Initiation ............................................ 16 | ||||
3.3 Mail Transactions ............................................ 16 | ||||
3.4 Forwarding for Address Correction or Updating ................ 19 | ||||
3.5 Commands for Debugging Addresses ............................. 20 | ||||
3.5.1 Overview ................................................... 20 | ||||
3.5.2 VRFY Normal Response ....................................... 22 | ||||
3.5.3 Meaning of VRFY or EXPN Success Response ................... 22 | ||||
3.5.4 Semantics and Applications of EXPN ......................... 23 | ||||
3.6 Domains ...................................................... 23 | ||||
3.7 Relaying ..................................................... 24 | ||||
3.8 Mail Gatewaying .............................................. 25 | ||||
3.8.1 Header Fields in Gatewaying ................................ 26 | ||||
3.8.2 Received Lines in Gatewaying ............................... 26 | ||||
3.8.3 Addresses in Gatewaying .................................... 26 | ||||
3.8.4 Other Header Fields in Gatewaying .......................... 27 | ||||
3.8.5 Envelopes in Gatewaying .................................... 27 | ||||
3.9 Terminating Sessions and Connections ......................... 27 | ||||
3.10 Mailing Lists and Aliases ................................... 28 | ||||
3.10.1 Alias ..................................................... 28 | ||||
3.10.2 List ...................................................... 28 | ||||
4. The SMTP Specifications ....................................... 29 | ||||
4.1 SMTP Commands ................................................ 29 | ||||
4.1.1 Command Semantics and Syntax ............................... 29 | ||||
4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO) ................... 29 | ||||
4.1.1.2 MAIL (MAIL) .............................................. 31 | ||||
4.1.1.3 RECIPIENT (RCPT) ......................................... 31 | ||||
4.1.1.4 DATA (DATA) .............................................. 33 | ||||
4.1.1.5 RESET (RSET) ............................................. 34 | ||||
4.1.1.6 VERIFY (VRFY) ............................................ 35 | ||||
4.1.1.7 EXPAND (EXPN) ............................................ 35 | ||||
4.1.1.8 HELP (HELP) .............................................. 35 | ||||
4.1.1.9 NOOP (NOOP) .............................................. 35 | ||||
4.1.1.10 QUIT (QUIT) ............................................. 36 | ||||
4.1.2 Command Argument Syntax .................................... 36 | ||||
4.1.3 Address Literals ........................................... 38 | ||||
4.1.4 Order of Commands .......................................... 39 | ||||
4.1.5 Private-use Commands ....................................... 40 | ||||
4.2 SMTP Replies ................................................ 40 | ||||
4.2.1 Reply Code Severities and Theory ........................... 42 | ||||
4.2.2 Reply Codes by Function Groups ............................. 44 | ||||
4.2.3 Reply Codes in Numeric Order .............................. 45 | ||||
4.2.4 Reply Code 502 ............................................. 46 | ||||
4.2.5 Reply Codes After DATA and the Subsequent <CRLF>.<CRLF> .... 46 | ||||
4.3 Sequencing of Commands and Replies ........................... 47 | ||||
4.3.1 Sequencing Overview ........................................ 47 | ||||
4.3.2 Command-Reply Sequences .................................... 48 | ||||
4.4 Trace Information ............................................ 49 | ||||
4.5 Additional Implementation Issues ............................. 53 | ||||
4.5.1 Minimum Implementation ..................................... 53 | ||||
4.5.2 Transparency ............................................... 53 | ||||
4.5.3 Sizes and Timeouts ......................................... 54 | ||||
4.5.3.1 Size limits and minimums ................................. 54 | ||||
4.5.3.2 Timeouts ................................................. 56 | ||||
4.5.4 Retry Strategies ........................................... 57 | ||||
4.5.4.1 Sending Strategy ......................................... 58 | ||||
4.5.4.2 Receiving Strategy ....................................... 59 | ||||
4.5.5 Messages with a null reverse-path .......................... 59 | ||||
5. Address Resolution and Mail Handling .......................... 60 | ||||
6. Problem Detection and Handling ................................ 62 | ||||
6.1 Reliable Delivery and Replies by Email ....................... 62 | ||||
6.2 Loop Detection ............................................... 63 | ||||
6.3 Compensating for Irregularities .............................. 63 | ||||
7. Security Considerations ....................................... 64 | ||||
7.1 Mail Security and Spoofing ................................... 64 | ||||
7.2 "Blind" Copies ............................................... 65 | ||||
7.3 VRFY, EXPN, and Security ..................................... 65 | ||||
7.4 Information Disclosure in Announcements ...................... 66 | ||||
7.5 Information Disclosure in Trace Fields ....................... 66 | ||||
7.6 Information Disclosure in Message Forwarding ................. 67 | ||||
7.7 Scope of Operation of SMTP Servers ........................... 67 | ||||
8. IANA Considerations ........................................... 67 | ||||
9. References .................................................... 68 | ||||
10. Editor's Address ............................................. 70 | ||||
11. Acknowledgments .............................................. 70 | ||||
Appendices ....................................................... 71 | ||||
A. TCP Transport Service ......................................... 71 | ||||
B. Generating SMTP Commands from RFC 822 Headers ................. 71 | ||||
C. Source Routes ................................................. 72 | ||||
D. Scenarios ..................................................... 73 | ||||
E. Other Gateway Issues .......................................... 76 | ||||
F. Deprecated Features of RFC 821 ................................ 76 | ||||
Full Copyright Statement ......................................... 79 | ||||
1. Introduction | 1.3. Transport of electronic mail | |||
The objective of the Simple Mail Transfer Protocol (SMTP) is to | The objective of the Simple Mail Transfer Protocol (SMTP) is to | |||
transfer mail reliably and efficiently. | transfer mail reliably and efficiently. | |||
SMTP is independent of the particular transmission subsystem and | SMTP is independent of the particular transmission subsystem and | |||
requires only a reliable ordered data stream channel. While this | requires only a reliable ordered data stream channel. While this | |||
document specifically discusses transport over TCP, other transports | document specifically discusses transport over TCP, other transports | |||
are possible. Appendices to RFC 821 describe some of them. | are possible. Appendices to RFC 821 describe some of them. | |||
An important feature of SMTP is its capability to transport mail | An important feature of SMTP is its capability to transport mail | |||
across networks, usually referred to as "SMTP mail relaying" (see | across multiple networks, usually referred to as "SMTP mail relaying" | |||
section 3.8). A network consists of the mutually-TCP-accessible | (see Section 3.6). A network consists of the mutually-TCP-accessible | |||
hosts on the public Internet, the mutually-TCP-accessible hosts on a | hosts on the public Internet, the mutually-TCP-accessible hosts on a | |||
firewall-isolated TCP/IP Intranet, or hosts in some other LAN or WAN | firewall-isolated TCP/IP Intranet, or hosts in some other LAN or WAN | |||
environment utilizing a non-TCP transport-level protocol. Using | environment utilizing a non-TCP transport-level protocol. Using | |||
SMTP, a process can transfer mail to another process on the same | SMTP, a process can transfer mail to another process on the same | |||
network or to some other network via a relay or gateway process | network or to some other network via a relay or gateway process | |||
accessible to both networks. | accessible to both networks. | |||
In this way, a mail message may pass through a number of intermediate | In this way, a mail message may pass through a number of intermediate | |||
relay or gateway hosts on its path from sender to ultimate recipient. | relay or gateway hosts on its path from sender to ultimate recipient. | |||
The Mail eXchanger mechanisms of the domain name system [22, 27] (and | The Mail eXchanger mechanisms of the domain name system (RFC1035 [7], | |||
section 5 of this document) are used to identify the appropriate | RFC974 [19], and Section 5 of this document) are used to identify the | |||
next-hop destination for a message being transported. | appropriate next-hop destination for a message being transported. | |||
1.4. History and context for this document | ||||
This document is a specification of the basic protocol for the | ||||
Internet electronic mail transport. It consolidates, updates and | ||||
clarifies, but doesn't add new or change existing functionality of | ||||
the following: | ||||
o the original SMTP (Simple Mail Transfer Protocol) specification of | ||||
RFC821 [8], | ||||
o domain name system requirements and implications for mail | ||||
transport from RFC1035 [7] and RFC974 [19], | ||||
o the clarifications and applicability statements in RFC1123 [3], | ||||
and | ||||
o material drawn from the SMTP Extension mechanisms in RFC1869 [25]. | ||||
o Editorial and clarification changes to RFC 2821 [33] to bring that | ||||
specification to Draft Standard. | ||||
It obsoletes RFC 821, RFC 974, RFC 1869, and RFC 2821 and updates RFC | ||||
1123 (replacing the mail transport materials of RFC 1123). However, | ||||
RFC 821 specifies some features that were not in significant use in | ||||
the Internet by the mid-1990s and (in appendices) some additional | ||||
transport models. Those sections are omitted here in the interest of | ||||
clarity and brevity; readers needing them should refer to RFC 821. | ||||
It also includes some additional material from RFC 1123 that required | ||||
amplification. This material has been identified in multiple ways, | ||||
mostly by tracking flaming on various lists and newsgroups and | ||||
problems of unusual readings or interpretations that have appeared as | ||||
the SMTP extensions have been deployed. Where this specification | ||||
moves beyond consolidation and actually differs from earlier | ||||
documents, it supersedes them technically as well as textually. | ||||
Although SMTP was designed as a mail transport and delivery protocol, | ||||
this specification also contains information that is important to its | ||||
use as a "mail submission" protocol, as recommended for POP (RFC937 | ||||
[17], RFC1939 [26]) and IMAP (RFC3501 [38]) . In general, the | ||||
separate mail submission protocol specified in RFC4409 [42] is now | ||||
preferred to direct use of SMTP; more discussion of that subject | ||||
appears in that document. | ||||
Section 2.3 provides definitions of terms specific to this document. | ||||
Except when the historical terminology is necessary for clarity, this | ||||
document uses the current 'client' and 'server' terminology to | ||||
identify the sending and receiving SMTP processes, respectively. | ||||
A companion document RFC2822 [11] discusses message header sections | ||||
and bodies and specifies formats and structures for them. | ||||
2. The SMTP Model | 2. The SMTP Model | |||
2.1 Basic Structure | 2.1. Basic Structure | |||
The SMTP design can be pictured as: | The SMTP design can be pictured as: | |||
+----------+ +----------+ | +----------+ +----------+ | |||
+------+ | | | | | +------+ | | | | | |||
| User |<-->| | SMTP | | | | User |<-->| | SMTP | | | |||
+------+ | Client- |Commands/Replies| Server- | | +------+ | Client- |Commands/Replies| Server- | | |||
+------+ | SMTP |<-------------->| SMTP | +------+ | +------+ | SMTP |<-------------->| SMTP | +------+ | |||
| File |<-->| | and Mail | |<-->| File | | | File |<-->| | and Mail | |<-->| File | | |||
|System| | | | | |System| | |System| | | | | |System| | |||
+------+ +----------+ +----------+ +------+ | +------+ +----------+ +----------+ +------+ | |||
SMTP client SMTP server | SMTP client SMTP server | |||
When an SMTP client has a message to transmit, it establishes a two- | When an SMTP client has a message to transmit, it establishes a two- | |||
way transmission channel to an SMTP server. The responsibility of an | way transmission channel to an SMTP server. The responsibility of an | |||
SMTP client is to transfer mail messages to one or more SMTP servers, | SMTP client is to transfer mail messages to one or more SMTP servers, | |||
or report its failure to do so. | or report its failure to do so. | |||
The means by which a mail message is presented to an SMTP client, and | The means by which a mail message is presented to an SMTP client, and | |||
how that client determines the domain name(s) to which mail messages | how that client determines the identifier(s) ("names") of the | |||
are to be transferred is a local matter, and is not addressed by this | domain(s) to which mail messages are to be transferred is a local | |||
document. In some cases, the domain name(s) transferred to, or | matter, and is not addressed by this document. In some cases, the | |||
determined by, an SMTP client will identify the final destination(s) | designated domain(s), or those determined by an SMTP client, will | |||
of the mail message. In other cases, common with SMTP clients | identify the final destination(s) of the mail message. In other | |||
associated with implementations of the POP [3, 26] or IMAP [6] | cases, common with SMTP clients associated with implementations of | |||
protocols, or when the SMTP client is inside an isolated transport | the POP (RFC937 [17], RFC1939 [26]) or IMAP (RFC3501 [38]) protocols, | |||
service environment, the domain name determined will identify an | or when the SMTP client is inside an isolated transport service | |||
intermediate destination through which all mail messages are to be | environment, the domain determined will identify an intermediate | |||
relayed. SMTP clients that transfer all traffic, regardless of the | destination through which all mail messages are to be relayed. SMTP | |||
target domain names associated with the individual messages, or that | clients that transfer all traffic regardless of the target domains | |||
do not maintain queues for retrying message transmissions that | associated with the individual messages, or that do not maintain | |||
initially cannot be completed, may otherwise conform to this | queues for retrying message transmissions that initially cannot be | |||
specification but are not considered fully-capable. Fully-capable | completed, may otherwise conform to this specification but are not | |||
SMTP implementations, including the relays used by these less capable | considered fully-capable. Fully-capable SMTP implementations, | |||
ones, and their destinations, are expected to support all of the | including the relays used by these less capable ones, and their | |||
queuing, retrying, and alternate address functions discussed in this | destinations, are expected to support all of the queuing, retrying, | |||
specification. | and alternate address functions discussed in this specification. In | |||
many situations and configurations, the less-capable clients | ||||
discussed above SHOULD be using the message submission protocol (RFC | ||||
4409 [42]) rather than SMTP. | ||||
The means by which an SMTP client, once it has determined a target | The means by which an SMTP client, once it has determined a target | |||
domain name, determines the identity of an SMTP server to which a | domain, determines the identity of an SMTP server to which a copy of | |||
copy of a message is to be transferred, and then performs that | a message is to be transferred, and then performs that transfer, is | |||
transfer, is covered by this document. To effect a mail transfer to | covered by this document. To effect a mail transfer to an SMTP | |||
an SMTP server, an SMTP client establishes a two-way transmission | server, an SMTP client establishes a two-way transmission channel to | |||
channel to that SMTP server. An SMTP client determines the address | that SMTP server. An SMTP client determines the address of an | |||
of an appropriate host running an SMTP server by resolving a | appropriate host running an SMTP server by resolving a destination | |||
destination domain name to either an intermediate Mail eXchanger host | domain name to either an intermediate Mail eXchanger host or a final | |||
or a final target host. | target host. | |||
An SMTP server may be either the ultimate destination or an | An SMTP server may be either the ultimate destination or an | |||
intermediate "relay" (that is, it may assume the role of an SMTP | intermediate "relay" (that is, it may assume the role of an SMTP | |||
client after receiving the message) or "gateway" (that is, it may | client after receiving the message) or "gateway" (that is, it may | |||
transport the message further using some protocol other than SMTP). | transport the message further using some protocol other than SMTP). | |||
SMTP commands are generated by the SMTP client and sent to the SMTP | SMTP commands are generated by the SMTP client and sent to the SMTP | |||
server. SMTP replies are sent from the SMTP server to the SMTP | server. SMTP replies are sent from the SMTP server to the SMTP | |||
client in response to the commands. | client in response to the commands. | |||
In other words, message transfer can occur in a single connection | In other words, message transfer can occur in a single connection | |||
between the original SMTP-sender and the final SMTP-recipient, or can | between the original SMTP-sender and the final SMTP-recipient, or can | |||
occur in a series of hops through intermediary systems. In either | occur in a series of hops through intermediary systems. In either | |||
case, a formal handoff of responsibility for the message occurs: the | case, once the server has issued a success response at the end of the | |||
protocol requires that a server accept responsibility for either | mail data, a formal handoff of responsibility for the message occurs: | |||
delivering a message or properly reporting the failure to do so. | the protocol requires that a server MUST accept responsibility for | |||
either delivering the message or properly reporting the failure to do | ||||
so (see Section 6.1, Section 6.2, Section 7.8, below). | ||||
Once the transmission channel is established and initial handshaking | Once the transmission channel is established and initial handshaking | |||
completed, the SMTP client normally initiates a mail transaction. | completed, the SMTP client normally initiates a mail transaction. | |||
Such a transaction consists of a series of commands to specify the | Such a transaction consists of a series of commands to specify the | |||
originator and destination of the mail and transmission of the | originator and destination of the mail and transmission of the | |||
message content (including any headers or other structure) itself. | message content (including any lines in the header section or other | |||
When the same message is sent to multiple recipients, this protocol | structure) itself. When the same message is sent to multiple | |||
encourages the transmission of only one copy of the data for all | recipients, this protocol encourages the transmission of only one | |||
recipients at the same destination (or intermediate relay) host. | copy of the data for all recipients at the same destination (or | |||
intermediate relay) host. | ||||
The server responds to each command with a reply; replies may | The server responds to each command with a reply; replies may | |||
indicate that the command was accepted, that additional commands are | indicate that the command was accepted, that additional commands are | |||
expected, or that a temporary or permanent error condition exists. | expected, or that a temporary or permanent error condition exists. | |||
Commands specifying the sender or recipients may include server- | Commands specifying the sender or recipients may include server- | |||
permitted SMTP service extension requests as discussed in section | permitted SMTP service extension requests as discussed in | |||
2.2. The dialog is purposely lock-step, one-at-a-time, although this | Section 2.2. The dialog is purposely lock-step, one-at-a-time, | |||
can be modified by mutually-agreed extension requests such as command | although this can be modified by mutually-agreed extension requests | |||
pipelining [13]. | such as command pipelining (RFC2920 [34]). | |||
Once a given mail message has been transmitted, the client may either | Once a given mail message has been transmitted, the client may either | |||
request that the connection be shut down or may initiate other mail | request that the connection be shut down or may initiate other mail | |||
transactions. In addition, an SMTP client may use a connection to an | transactions. In addition, an SMTP client may use a connection to an | |||
SMTP server for ancillary services such as verification of email | SMTP server for ancillary services such as verification of email | |||
addresses or retrieval of mailing list subscriber addresses. | addresses or retrieval of mailing list subscriber addresses. | |||
As suggested above, this protocol provides mechanisms for the | As suggested above, this protocol provides mechanisms for the | |||
transmission of mail. This transmission normally occurs directly | transmission of mail. Historically, this transmission normally | |||
from the sending user's host to the receiving user's host when the | occurred directly from the sending user's host to the receiving | |||
two hosts are connected to the same transport service. When they are | user's host when the two hosts are connected to the same transport | |||
not connected to the same transport service, transmission occurs via | service. When they are not connected to the same transport service, | |||
one or more relay SMTP servers. An intermediate host that acts as | transmission occurs via one or more relay SMTP servers. A very | |||
either an SMTP relay or as a gateway into some other transmission | common case in the Internet today involves submission of the original | |||
environment is usually selected through the use of the domain name | message to an intermediate, "message submission" server, which is | |||
service (DNS) Mail eXchanger mechanism. | similar to a relay but has some additional properties; such servers | |||
are discussed in Section 2.3.10 and at some length in RFC4409 [42] . | ||||
An intermediate host that acts as either an SMTP relay or as a | ||||
gateway into some other transmission environment is usually selected | ||||
through the use of the domain name service (DNS) Mail eXchanger | ||||
mechanism. | ||||
Usually, intermediate hosts are determined via the DNS MX record, not | Usually, intermediate hosts are determined via the DNS MX record, not | |||
by explicit "source" routing (see section 5 and appendices C and | by explicit "source" routing (see Section 5 and Appendix C and | |||
F.2). | Appendix F.2). | |||
2.2 The Extension Model | 2.2. The Extension Model | |||
2.2.1 Background | 2.2.1. Background | |||
In an effort that started in 1990, approximately a decade after RFC | In an effort that started in 1990, approximately a decade after RFC | |||
821 was completed, the protocol was modified with a "service | 821 was completed, the protocol was modified with a "service | |||
extensions" model that permits the client and server to agree to | extensions" model that permits the client and server to agree to | |||
utilize shared functionality beyond the original SMTP requirements. | utilize shared functionality beyond the original SMTP requirements. | |||
The SMTP extension mechanism defines a means whereby an extended SMTP | The SMTP extension mechanism defines a means whereby an extended SMTP | |||
client and server may recognize each other, and the server can inform | client and server may recognize each other, and the server can inform | |||
the client as to the service extensions that it supports. | the client as to the service extensions that it supports. | |||
Contemporary SMTP implementations MUST support the basic extension | Contemporary SMTP implementations MUST support the basic extension | |||
skipping to change at page 8, line 5 | skipping to change at page 11, line 5 | |||
Unless the different characteristics of HELO must be identified for | Unless the different characteristics of HELO must be identified for | |||
interoperability purposes, this document discusses only EHLO. | interoperability purposes, this document discusses only EHLO. | |||
SMTP is widely deployed and high-quality implementations have proven | SMTP is widely deployed and high-quality implementations have proven | |||
to be very robust. However, the Internet community now considers | to be very robust. However, the Internet community now considers | |||
some services to be important that were not anticipated when the | some services to be important that were not anticipated when the | |||
protocol was first designed. If support for those services is to be | protocol was first designed. If support for those services is to be | |||
added, it must be done in a way that permits older implementations to | added, it must be done in a way that permits older implementations to | |||
continue working acceptably. The extension framework consists of: | continue working acceptably. The extension framework consists of: | |||
- The SMTP command EHLO, superseding the earlier HELO, | o The SMTP command EHLO, superseding the earlier HELO, | |||
- a registry of SMTP service extensions, | o a registry of SMTP service extensions, | |||
- additional parameters to the SMTP MAIL and RCPT commands, and | o additional parameters to the SMTP MAIL and RCPT commands, and | |||
- optional replacements for commands defined in this protocol, such | o optional replacements for commands defined in this protocol, such | |||
as for DATA in non-ASCII transmissions [33]. | as for DATA in non-ASCII transmissions (RFC3030 [36]). | |||
SMTP's strength comes primarily from its simplicity. Experience with | SMTP's strength comes primarily from its simplicity. Experience with | |||
many protocols has shown that protocols with few options tend towards | many protocols has shown that protocols with few options tend towards | |||
ubiquity, whereas protocols with many options tend towards obscurity. | ubiquity, whereas protocols with many options tend towards obscurity. | |||
Each and every extension, regardless of its benefits, must be | Each and every extension, regardless of its benefits, must be | |||
carefully scrutinized with respect to its implementation, deployment, | carefully scrutinized with respect to its implementation, deployment, | |||
and interoperability costs. In many cases, the cost of extending the | and interoperability costs. In many cases, the cost of extending the | |||
SMTP service will likely outweigh the benefit. | SMTP service will likely outweigh the benefit. | |||
2.2.2 Definition and Registration of Extensions | 2.2.2. Definition and Registration of Extensions | |||
The IANA maintains a registry of SMTP service extensions. A | The IANA maintains a registry of SMTP service extensions. A | |||
corresponding EHLO keyword value is associated with each extension. | corresponding EHLO keyword value is associated with each extension. | |||
Each service extension registered with the IANA must be defined in a | Each service extension registered with the IANA must be defined in a | |||
formal standards-track or IESG-approved experimental protocol | formal standards-track or IESG-approved experimental protocol | |||
document. The definition must include: | document. The definition must include: | |||
- the textual name of the SMTP service extension; | o the textual name of the SMTP service extension; | |||
- the EHLO keyword value associated with the extension; | o the EHLO keyword value associated with the extension; | |||
- the syntax and possible values of parameters associated with the | o the syntax and possible values of parameters associated with the | |||
EHLO keyword value; | EHLO keyword value; | |||
- any additional SMTP verbs associated with the extension | o any additional SMTP verbs associated with the extension | |||
(additional verbs will usually be, but are not required to be, the | (additional verbs will usually be, but are not required to be, the | |||
same as the EHLO keyword value); | same as the EHLO keyword value); | |||
- any new parameters the extension associates with the MAIL or RCPT | o any new parameters the extension associates with the MAIL or RCPT | |||
verbs; | verbs; | |||
- a description of how support for the extension affects the | o a description of how support for the extension affects the | |||
behavior of a server and client SMTP; and, | behavior of a server and client SMTP; and, | |||
- the increment by which the extension is increasing the maximum | o the increment by which the extension is increasing the maximum | |||
length of the commands MAIL and/or RCPT, over that specified in | length of the commands MAIL and/or RCPT, over that specified in | |||
this standard. | this standard. | |||
In addition, any EHLO keyword value starting with an upper or lower | In addition, any EHLO keyword value starting with an upper or lower | |||
case "X" refers to a local SMTP service extension used exclusively | case "X" refers to a local SMTP service extension used exclusively | |||
through bilateral agreement. Keywords beginning with "X" MUST NOT be | through bilateral agreement. Keywords beginning with "X" MUST NOT be | |||
used in a registered service extension. Conversely, keyword values | used in a registered service extension. Conversely, keyword values | |||
presented in the EHLO response that do not begin with "X" MUST | presented in the EHLO response that do not begin with "X" MUST | |||
correspond to a standard, standards-track, or IESG-approved | correspond to a standard, standards-track, or IESG-approved | |||
experimental SMTP service extension registered with IANA. A | experimental SMTP service extension registered with IANA. A | |||
conforming server MUST NOT offer non-"X"-prefixed keyword values that | conforming server MUST NOT offer non-"X"-prefixed keyword values that | |||
are not described in a registered extension. | are not described in a registered extension. | |||
Additional verbs and parameter names are bound by the same rules as | Additional verbs and parameter names are bound by the same rules as | |||
EHLO keywords; specifically, verbs beginning with "X" are local | EHLO keywords; specifically, verbs beginning with "X" are local | |||
extensions that may not be registered or standardized. Conversely, | extensions that may not be registered or standardized. Conversely, | |||
verbs not beginning with "X" must always be registered. | verbs not beginning with "X" must always be registered. | |||
2.3 Terminology | 2.2.3. Special Issues with Extensions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described below. | ||||
1. MUST This word, or the terms "REQUIRED" or "SHALL", mean that | ||||
the definition is an absolute requirement of the specification. | ||||
2. MUST NOT This phrase, or the phrase "SHALL NOT", mean that the | Extensions that change fairly basic properties of SMTP operation are | |||
definition is an absolute prohibition of the specification. | permitted. The text in other sections of this document must be | |||
understood in that context. In particular, extensions can change the | ||||
minimum limits specified in Section 4.5.3, can change the ASCII | ||||
character set requirement as mentioned above, or can introduce some | ||||
optional modes of message handling. | ||||
3. SHOULD This word, or the adjective "RECOMMENDED", mean that | In particular, if an extension implies that the delivery path | |||
there may exist valid reasons in particular circumstances to | normally supports special features of that extension, and an | |||
ignore a particular item, but the full implications must be | intermediate SMTP system finds a next hop that does not support the | |||
understood and carefully weighed before choosing a different | required extension, it MAY choose, based on the specific extension | |||
course. | and circumstances, to requeue the message and try later and/or try an | |||
alternate MX host. If this strategy is employed, the timeout to fall | ||||
back to an unextended format (if one is available) SHOULD be less | ||||
than the normal timeout for bouncing as undeliverable (e.g., if | ||||
normal timeout is three days, the requeue timeout before attempting | ||||
to transmit the mail without the extension might be one day). | ||||
4. SHOULD NOT This phrase, or the phrase "NOT RECOMMENDED" mean | 2.3. Terminology | |||
that there may exist valid reasons in particular circumstances | ||||
when the particular behavior is acceptable or even useful, but the | ||||
full implications should be understood and the case carefully | ||||
weighed before implementing any behavior described with this | ||||
label. | ||||
5. MAY This word, or the adjective "OPTIONAL", mean that an item is | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
truly optional. One vendor may choose to include the item because | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
a particular marketplace requires it or because the vendor feels | document are to be interpreted as described in RFC 2119 [1]. As each | |||
that it enhances the product while another vendor may omit the | of these terms was intentionally and carefully chosen to improve the | |||
same item. An implementation which does not include a particular | interoperability of email, each use of these terms is to be treated | |||
option MUST be prepared to interoperate with another | as a conformance requirement. | |||
implementation which does include the option, though perhaps with | ||||
reduced functionality. In the same vein an implementation which | ||||
does include a particular option MUST be prepared to interoperate | ||||
with another implementation which does not include the option | ||||
(except, of course, for the feature the option provides.) | ||||
2.3.1 Mail Objects | 2.3.1. Mail Objects | |||
SMTP transports a mail object. A mail object contains an envelope | SMTP transports a mail object. A mail object contains an envelope | |||
and content. | and content. | |||
The SMTP envelope is sent as a series of SMTP protocol units | The SMTP envelope is sent as a series of SMTP protocol units | |||
(described in section 3). It consists of an originator address (to | (described in Section 3). It consists of an originator address (to | |||
which error reports should be directed); one or more recipient | which error reports should be directed); one or more recipient | |||
addresses; and optional protocol extension material. Historically, | addresses; and optional protocol extension material. Historically, | |||
variations on the recipient address specification command (RCPT TO) | variations on the reverse path (originator) address specification | |||
could be used to specify alternate delivery modes, such as immediate | command (MAIL) could be used to specify alternate delivery modes, | |||
display; those variations have now been deprecated (see appendix F, | such as immediate display; those variations have now been deprecated | |||
section F.6). | (see Appendix F and Appendix F.6). | |||
The SMTP content is sent in the SMTP DATA protocol unit and has two | The SMTP content is sent in the SMTP DATA protocol unit and has two | |||
parts: the headers and the body. If the content conforms to other | parts: the header section and the body. If the content conforms to | |||
contemporary standards, the headers form a collection of field/value | other contemporary standards, the header section consists of a | |||
pairs structured as in the message format specification [32]; the | collection of header fields, each consisting of a header name, a | |||
body, if structured, is defined according to MIME [12]. The content | colon, and data, structured as in the message format specification | |||
is textual in nature, expressed using the US-ASCII repertoire [1]. | (RFC2822 [11]); the body, if structured, is defined according to MIME | |||
Although SMTP extensions (such as "8BITMIME" [20]) may relax this | (RFC2045 [28]). The content is textual in nature, expressed using | |||
restriction for the content body, the content headers are always | the US-ASCII repertoire [2]. Although SMTP extensions (such as | |||
encoded using the US-ASCII repertoire. A MIME extension [23] defines | "8BITMIME", RFC1652 [23]) may relax this restriction for the content | |||
an algorithm for representing header values outside the US-ASCII | body, the content header fields are always encoded using the US-ASCII | |||
repertoire, while still encoding them using the US-ASCII repertoire. | repertoire. Two MIME extensions (RFC2047 [29] and RFC2231 [32]) | |||
define an algorithm for representing header values outside the US- | ||||
ASCII repertoire, while still encoding them using the US-ASCII | ||||
repertoire. | ||||
2.3.2 Senders and Receivers | 2.3.2. Senders and Receivers | |||
In RFC 821, the two hosts participating in an SMTP transaction were | In RFC 821, the two hosts participating in an SMTP transaction were | |||
described as the "SMTP-sender" and "SMTP-receiver". This document | described as the "SMTP-sender" and "SMTP-receiver". This document | |||
has been changed to reflect current industry terminology and hence | has been changed to reflect current industry terminology and hence | |||
refers to them as the "SMTP client" (or sometimes just "the client") | refers to them as the "SMTP client" (or sometimes just "the client") | |||
and "SMTP server" (or just "the server"), respectively. Since a | and "SMTP server" (or just "the server"), respectively. Since a | |||
given host may act both as server and client in a relay situation, | given host may act both as server and client in a relay situation, | |||
"receiver" and "sender" terminology is still used where needed for | "receiver" and "sender" terminology is still used where needed for | |||
clarity. | clarity. | |||
2.3.3 Mail Agents and Message Stores | 2.3.3. Mail Agents and Message Stores | |||
Additional mail system terminology became common after RFC 821 was | Additional mail system terminology became common after RFC 821 was | |||
published and, where convenient, is used in this specification. In | published and, where convenient, is used in this specification. In | |||
particular, SMTP servers and clients provide a mail transport service | particular, SMTP servers and clients provide a mail transport service | |||
and therefore act as "Mail Transfer Agents" (MTAs). "Mail User | and therefore act as "Mail Transfer Agents" (MTAs). "Mail User | |||
Agents" (MUAs or UAs) are normally thought of as the sources and | Agents" (MUAs or UAs) are normally thought of as the sources and | |||
targets of mail. At the source, an MUA might collect mail to be | targets of mail. At the source, an MUA might collect mail to be | |||
transmitted from a user and hand it off to an MTA; the final | transmitted from a user and hand it off to an MTA; the final | |||
("delivery") MTA would be thought of as handing the mail off to an | ("delivery") MTA would be thought of as handing the mail off to an | |||
MUA (or at least transferring responsibility to it, e.g., by | MUA (or at least transferring responsibility to it, e.g., by | |||
depositing the message in a "message store"). However, while these | depositing the message in a "message store"). However, while these | |||
terms are used with at least the appearance of great precision in | terms are used with at least the appearance of great precision in | |||
other environments, the implied boundaries between MUAs and MTAs | other environments, the implied boundaries between MUAs and MTAs | |||
often do not accurately match common, and conforming, practices with | often do not accurately match common, and conforming, practices with | |||
Internet mail. Hence, the reader should be cautious about inferring | Internet mail. Hence, the reader should be cautious about inferring | |||
the strong relationships and responsibilities that might be implied | the strong relationships and responsibilities that might be implied | |||
if these terms were used elsewhere. | if these terms were used elsewhere. | |||
2.3.4 Host | 2.3.4. Host | |||
For the purposes of this specification, a host is a computer system | For the purposes of this specification, a host is a computer system | |||
attached to the Internet (or, in some cases, to a private TCP/IP | attached to the Internet (or, in some cases, to a private TCP/IP | |||
network) and supporting the SMTP protocol. Hosts are known by names | network) and supporting the SMTP protocol. Hosts are known by names | |||
(see "domain"); identifying them by numerical address is discouraged. | (see the next section); they SHOULD NOT be identified by numerical | |||
addresses, i.e., by address literals as described in Section 4.1.2. | ||||
2.3.5 Domain | 2.3.5. Domain Names | |||
A domain (or domain name) consists of one or more dot-separated | A domain name (or often just a "domain") consists of one or more | |||
components. These components ("labels" in DNS terminology [22]) are | components, separated by dots if more than one appears. In the case | |||
restricted for SMTP purposes to consist of a sequence of letters, | of a top-level domain used by itself in an email address, a single | |||
digits, and hyphens drawn from the ASCII character set [1]. Domain | string is used without any dots. This makes the requirement, | |||
names are used as names of hosts and of other entities in the domain | described in more detail below, that only fully-qualified domain | |||
name hierarchy. For example, a domain may refer to an alias (label | names appear in SMTP transactions on the public Internet, | |||
of a CNAME RR) or the label of Mail eXchanger records to be used to | particularly important where top-level domains are involved. These | |||
deliver mail instead of representing a host name. See [22] and | components ("labels" in DNS terminology, RFC1035 [7]) are restricted | |||
section 5 of this specification. | for SMTP purposes to consist of a sequence of letters, digits, and | |||
hyphens drawn from the ASCII character set [2]. Domain names are | ||||
used as names of hosts and of other entities in the domain name | ||||
hierarchy. For example, a domain may refer to an alias (label of a | ||||
CNAME RR) or the label of Mail eXchanger records to be used to | ||||
deliver mail instead of representing a host name. See RFC1035 [7] | ||||
and Section 5 of this specification. | ||||
The domain name, as described in this document and in [22], is the | The domain name, as described in this document and in RFC1035 [7], is | |||
entire, fully-qualified name (often referred to as an "FQDN"). A | the entire, fully-qualified name (often referred to as an "FQDN"). A | |||
domain name that is not in FQDN form is no more than a local alias. | domain name that is not in FQDN form is no more than a local alias. | |||
Local aliases MUST NOT appear in any SMTP transaction. | Local aliases MUST NOT appear in any SMTP transaction. | |||
2.3.6 Buffer and State Table | Only resolvable, fully-qualified, domain names (FQDNs) are permitted | |||
when domain names are used in SMTP. In other words, names that can | ||||
be resolved to MX RRs or address (i.e. A or AAAA) RRs (as discussed | ||||
in Section 5) are permitted, as are CNAME RRs whose targets can be | ||||
resolved, in turn, to MX or address RRs. Local nicknames or | ||||
unqualified names MUST NOT be used. There are two exceptions to the | ||||
rule requiring FQDNs: | ||||
o The domain name given in the EHLO command MUST be either a primary | ||||
host name (a domain name that resolves to an address RR) or, if | ||||
the host has no name, an address literal as described in | ||||
Section 4.1.3 and discussed further in the EHLO discussion of | ||||
Section 4.1.4. | ||||
o The reserved mailbox name "postmaster" may be used in a RCPT | ||||
command without domain qualification (see Section 4.1.1.3) and | ||||
MUST be accepted if so used. | ||||
2.3.6. Buffer and State Table | ||||
SMTP sessions are stateful, with both parties carefully maintaining a | SMTP sessions are stateful, with both parties carefully maintaining a | |||
common view of the current state. In this document we model this | common view of the current state. In this document we model this | |||
state by a virtual "buffer" and a "state table" on the server which | state by a virtual "buffer" and a "state table" on the server which | |||
may be used by the client to, for example, "clear the buffer" or | may be used by the client to, for example, "clear the buffer" or | |||
"reset the state table," causing the information in the buffer to be | "reset the state table," causing the information in the buffer to be | |||
discarded and the state to be returned to some previous state. | discarded and the state to be returned to some previous state. | |||
2.3.7 Lines | 2.3.7. Commands and Replies | |||
SMTP commands and, unless altered by a service extension, message | SMTP commands and, unless altered by a service extension, message | |||
data, are transmitted in "lines". Lines consist of zero or more data | data, are transmitted from the sender to the receiver via the | |||
characters terminated by the sequence ASCII character "CR" (hex value | transmission channel in "lines". | |||
0D) followed immediately by ASCII character "LF" (hex value 0A). | ||||
This termination sequence is denoted as <CRLF> in this document. | An SMTP reply is an acknowledgment (positive or negative) sent in | |||
Conforming implementations MUST NOT recognize or generate any other | "lines" from receiver to sender via the transmission channel in | |||
character or character sequence as a line terminator. Limits MAY be | response to a command. The general form of a reply is a numeric | |||
imposed on line lengths by servers (see section 4.5.3). | completion code (indicating failure or success) usually followed by a | |||
text string. The codes are for use by programs and the text is | ||||
usually intended for human users. RFC 3463 [37], specifies further | ||||
structuring of the reply strings, including the use of supplemental | ||||
and more specific completion codes. | ||||
2.3.8. Lines | ||||
Lines consist of zero or more data characters terminated by the | ||||
sequence ASCII character "CR" (hex value 0D) followed immediately by | ||||
ASCII character "LF" (hex value 0A). This termination sequence is | ||||
denoted as <CRLF> in this document. Conforming implementations MUST | ||||
NOT recognize or generate any other character or character sequence | ||||
as a line terminator. Limits MAY be imposed on line lengths by | ||||
servers (see Section 4). | ||||
In addition, the appearance of "bare" "CR" or "LF" characters in text | In addition, the appearance of "bare" "CR" or "LF" characters in text | |||
(i.e., either without the other) has a long history of causing | (i.e., either without the other) has a long history of causing | |||
problems in mail implementations and applications that use the mail | problems in mail implementations and applications that use the mail | |||
system as a tool. SMTP client implementations MUST NOT transmit | system as a tool. SMTP client implementations MUST NOT transmit | |||
these characters except when they are intended as line terminators | these characters except when they are intended as line terminators | |||
and then MUST, as indicated above, transmit them only as a <CRLF> | and then MUST, as indicated above, transmit them only as a <CRLF> | |||
sequence. | sequence. | |||
2.3.8 Originator, Delivery, Relay, and Gateway Systems | 2.3.9. Message Content and Mail Data | |||
The terms "message content" and "mail data" are used interchangeably | ||||
in this document to describe the material transmitted after the DATA | ||||
command is accepted and before the end of data indication is | ||||
transmitted. Message content includes the message header section and | ||||
the possibly-structured message body. The MIME specification | ||||
(RFC2045 [28]) provides the standard mechanisms for structured | ||||
message bodies. | ||||
2.3.10. Originator, Delivery, Relay, and Gateway Systems | ||||
This specification makes a distinction among four types of SMTP | This specification makes a distinction among four types of SMTP | |||
systems, based on the role those systems play in transmitting | systems, based on the role those systems play in transmitting | |||
electronic mail. An "originating" system (sometimes called an SMTP | electronic mail. An "originating" system (sometimes called an SMTP | |||
originator) introduces mail into the Internet or, more generally, | originator) introduces mail into the Internet or, more generally, | |||
into a transport service environment. A "delivery" SMTP system is | into a transport service environment. A "delivery" SMTP system is | |||
one that receives mail from a transport service environment and | one that receives mail from a transport service environment and | |||
passes it to a mail user agent or deposits it in a message store | passes it to a mail user agent or deposits it in a message store | |||
which a mail user agent is expected to subsequently access. A | which a mail user agent is expected to subsequently access. A | |||
"relay" SMTP system (usually referred to just as a "relay") receives | "relay" SMTP system (usually referred to just as a "relay") receives | |||
skipping to change at page 12, line 47 | skipping to change at page 16, line 38 | |||
server for further relaying or for delivery. | server for further relaying or for delivery. | |||
A "gateway" SMTP system (usually referred to just as a "gateway") | A "gateway" SMTP system (usually referred to just as a "gateway") | |||
receives mail from a client system in one transport environment and | receives mail from a client system in one transport environment and | |||
transmits it to a server system in another transport environment. | transmits it to a server system in another transport environment. | |||
Differences in protocols or message semantics between the transport | Differences in protocols or message semantics between the transport | |||
environments on either side of a gateway may require that the gateway | environments on either side of a gateway may require that the gateway | |||
system perform transformations to the message that are not permitted | system perform transformations to the message that are not permitted | |||
to SMTP relay systems. For the purposes of this specification, | to SMTP relay systems. For the purposes of this specification, | |||
firewalls that rewrite addresses should be considered as gateways, | firewalls that rewrite addresses should be considered as gateways, | |||
even if SMTP is used on both sides of them (see [11]). | even if SMTP is used on both sides of them (see RFC2979 [35]). | |||
2.3.9 Message Content and Mail Data | ||||
The terms "message content" and "mail data" are used interchangeably | ||||
in this document to describe the material transmitted after the DATA | ||||
command is accepted and before the end of data indication is | ||||
transmitted. Message content includes message headers and the | ||||
possibly-structured message body. The MIME specification [12] | ||||
provides the standard mechanisms for structured message bodies. | ||||
2.3.10 Mailbox and Address | 2.3.11. Mailbox and Address | |||
As used in this specification, an "address" is a character string | As used in this specification, an "address" is a character string | |||
that identifies a user to whom mail will be sent or a location into | that identifies a user to whom mail will be sent or a location into | |||
which mail will be deposited. The term "mailbox" refers to that | which mail will be deposited. The term "mailbox" refers to that | |||
depository. The two terms are typically used interchangeably unless | depository. The two terms are typically used interchangeably unless | |||
the distinction between the location in which mail is placed (the | the distinction between the location in which mail is placed (the | |||
mailbox) and a reference to it (the address) is important. An | mailbox) and a reference to it (the address) is important. An | |||
address normally consists of user and domain specifications. The | address normally consists of user and domain specifications. The | |||
standard mailbox naming convention is defined to be "local- | standard mailbox naming convention is defined to be | |||
part@domain": contemporary usage permits a much broader set of | "local-part@domain"; contemporary usage permits a much broader set of | |||
applications than simple "user names". Consequently, and due to a | applications than simple "user names". Consequently, and due to a | |||
long history of problems when intermediate hosts have attempted to | long history of problems when intermediate hosts have attempted to | |||
optimize transport by modifying them, the local-part MUST be | optimize transport by modifying them, the local-part MUST be | |||
interpreted and assigned semantics only by the host specified in the | interpreted and assigned semantics only by the host specified in the | |||
domain part of the address. | domain part of the address. | |||
2.3.11 Reply | 2.4. General Syntax Principles and Transaction Model | |||
An SMTP reply is an acknowledgment (positive or negative) sent from | ||||
receiver to sender via the transmission channel in response to a | ||||
command. The general form of a reply is a numeric completion code | ||||
(indicating failure or success) usually followed by a text string. | ||||
The codes are for use by programs and the text is usually intended | ||||
for human users. Recent work [34] has specified further structuring | ||||
of the reply strings, including the use of supplemental and more | ||||
specific completion codes. | ||||
2.4 General Syntax Principles and Transaction Model | ||||
SMTP commands and replies have a rigid syntax. All commands begin | SMTP commands and replies have a rigid syntax. All commands begin | |||
with a command verb. All Replies begin with a three digit numeric | with a command verb. All replies begin with a three digit numeric | |||
code. In some commands and replies, arguments MUST follow the verb | code. In some commands and replies, arguments are required following | |||
or reply code. Some commands do not accept arguments (after the | the verb or reply code. Some commands do not accept arguments (after | |||
verb), and some reply codes are followed, sometimes optionally, by | the verb), and some reply codes are followed, sometimes optionally, | |||
free form text. In both cases, where text appears, it is separated | by free form text. In both cases, where text appears, it is | |||
from the verb or reply code by a space character. Complete | separated from the verb or reply code by a space character. Complete | |||
definitions of commands and replies appear in section 4. | definitions of commands and replies appear in Section 4. | |||
Verbs and argument values (e.g., "TO:" or "to:" in the RCPT command | Verbs and argument values (e.g., "TO:" or "to:" in the RCPT command | |||
and extension name keywords) are not case sensitive, with the sole | and extension name keywords) are not case sensitive, with the sole | |||
exception in this specification of a mailbox local-part (SMTP | exception in this specification of a mailbox local-part (SMTP | |||
Extensions may explicitly specify case-sensitive elements). That is, | Extensions may explicitly specify case-sensitive elements). That is, | |||
a command verb, an argument value other than a mailbox local-part, | a command verb, an argument value other than a mailbox local-part, | |||
and free form text MAY be encoded in upper case, lower case, or any | and free form text MAY be encoded in upper case, lower case, or any | |||
mixture of upper and lower case with no impact on its meaning. This | mixture of upper and lower case with no impact on its meaning. The | |||
is NOT true of a mailbox local-part. The local-part of a mailbox | local-part of a mailbox MUST BE treated as case sensitive. | |||
MUST BE treated as case sensitive. Therefore, SMTP implementations | Therefore, SMTP implementations MUST take care to preserve the case | |||
MUST take care to preserve the case of mailbox local-parts. Mailbox | of mailbox local-parts. In particular, for some hosts the user | |||
domains are not case sensitive. In particular, for some hosts the | "smith" is different from the user "Smith". However, exploiting the | |||
user "smith" is different from the user "Smith". However, exploiting | case sensitivity of mailbox local-parts impedes interoperability and | |||
the case sensitivity of mailbox local-parts impedes interoperability | is discouraged. Mailbox domains follow normal DNS rules and are | |||
and is discouraged. | hence not case sensitive. | |||
A few SMTP servers, in violation of this specification (and RFC 821) | A few SMTP servers, in violation of this specification (and RFC 821) | |||
require that command verbs be encoded by clients in upper case. | require that command verbs be encoded by clients in upper case. | |||
Implementations MAY wish to employ this encoding to accommodate those | Implementations MAY wish to employ this encoding to accommodate those | |||
servers. | servers. | |||
The argument field consists of a variable length character string | The argument clause consists of a variable length character string | |||
ending with the end of the line, i.e., with the character sequence | ending with the end of the line, i.e., with the character sequence | |||
<CRLF>. The receiver will take no action until this sequence is | <CRLF>. The receiver will take no action until this sequence is | |||
received. | received. | |||
The syntax for each command is shown with the discussion of that | The syntax for each command is shown with the discussion of that | |||
command. Common elements and parameters are shown in section 4.1.2. | command. Common elements and parameters are shown in Section 4.1.2. | |||
Commands and replies are composed of characters from the ASCII | Commands and replies are composed of characters from the ASCII | |||
character set [1]. When the transport service provides an 8-bit byte | character set [2]. When the transport service provides an 8-bit byte | |||
(octet) transmission channel, each 7-bit character is transmitted | (octet) transmission channel, each 7-bit character is transmitted | |||
right justified in an octet with the high order bit cleared to zero. | right justified in an octet with the high order bit cleared to zero. | |||
More specifically, the unextended SMTP service provides seven bit | More specifically, the unextended SMTP service provides seven bit | |||
transport only. An originating SMTP client which has not | transport only. An originating SMTP client that has not successfully | |||
successfully negotiated an appropriate extension with a particular | negotiated an appropriate extension with a particular server (see the | |||
server MUST NOT transmit messages with information in the high-order | next paragraph) MUST NOT transmit messages with information in the | |||
bit of octets. If such messages are transmitted in violation of this | high-order bit of octets. If such messages are transmitted in | |||
rule, receiving SMTP servers MAY clear the high-order bit or reject | violation of this rule, receiving SMTP servers MAY clear the high- | |||
the message as invalid. In general, a relay SMTP SHOULD assume that | order bit or reject the message as invalid. In general, a relay SMTP | |||
the message content it has received is valid and, assuming that the | SHOULD assume that the message content it has received is valid and, | |||
envelope permits doing so, relay it without inspecting that content. | assuming that the envelope permits doing so, relay it without | |||
Of course, if the content is mislabeled and the data path cannot | inspecting that content. Of course, if the content is mislabeled and | |||
accept the actual content, this may result in ultimate delivery of a | the data path cannot accept the actual content, this may result in | |||
severely garbled message to the recipient. Delivery SMTP systems MAY | ultimate delivery of a severely garbled message to the recipient. | |||
reject ("bounce") such messages rather than deliver them. No sending | Delivery SMTP systems MAY reject such messages, or return them as | |||
SMTP system is permitted to send envelope commands in any character | undeliverable, rather than deliver them. In the absence of a server- | |||
set other than US-ASCII; receiving systems SHOULD reject such | offered extension explicitly permitting it, a sending SMTP system is | |||
commands, normally using "500 syntax error - invalid character" | not permitted to send envelope commands in any character set other | |||
replies. | than US-ASCII. Receiving systems SHOULD reject such commands, | |||
normally using "500 syntax error - invalid character" replies. | ||||
Eight-bit message content transmission MAY be requested of the server | Eight-bit message content transmission MAY be requested of the server | |||
by a client using extended SMTP facilities, notably the "8BITMIME" | by a client using extended SMTP facilities, notably the "8BITMIME" | |||
extension [20]. 8BITMIME SHOULD be supported by SMTP servers. | extension, RFC1652 [23]. 8BITMIME SHOULD be supported by SMTP | |||
However, it MUST not be construed as authorization to transmit | servers. However, it MUST NOT be construed as authorization to | |||
unrestricted eight bit material. 8BITMIME MUST NOT be requested by | transmit unrestricted eight bit material, nor does 8BITMIME authorize | |||
senders for material with the high bit on that is not in MIME format | transmission of any envelope material in other than ASCII. 8BITMIME | |||
with an appropriate content-transfer encoding; servers MAY reject | MUST NOT be requested by senders for material with the high bit on | |||
such messages. | that is not in MIME format with an appropriate content-transfer | |||
encoding; servers MAY reject such messages. | ||||
The metalinguistic notation used in this document corresponds to the | The metalinguistic notation used in this document corresponds to the | |||
"Augmented BNF" used in other Internet mail system documents. The | "Augmented BNF" used in other Internet mail system documents. The | |||
reader who is not familiar with that syntax should consult the ABNF | reader who is not familiar with that syntax should consult the ABNF | |||
specification [8]. Metalanguage terms used in running text are | specification in RFC 5234 [5]. Metalanguage terms used in running | |||
surrounded by pointed brackets (e.g., <CRLF>) for clarity. | text are surrounded by pointed brackets (e.g., <CRLF>) for clarity. | |||
The reader is cautioned that the grammar expressed in the | ||||
metalanguage is not comprehensive. There are many instances in which | ||||
provisions in the text constrain or otherwise modify the syntax or | ||||
semantics implied by the grammar. | ||||
3. The SMTP Procedures: An Overview | 3. The SMTP Procedures: An Overview | |||
This section contains descriptions of the procedures used in SMTP: | This section contains descriptions of the procedures used in SMTP: | |||
session initiation, the mail transaction, forwarding mail, verifying | session initiation, the mail transaction, forwarding mail, verifying | |||
mailbox names and expanding mailing lists, and the opening and | mailbox names and expanding mailing lists, and the opening and | |||
closing exchanges. Comments on relaying, a note on mail domains, and | closing exchanges. Comments on relaying, a note on mail domains, and | |||
a discussion of changing roles are included at the end of this | a discussion of changing roles are included at the end of this | |||
section. Several complete scenarios are presented in appendix D. | section. Several complete scenarios are presented in Appendix D. | |||
3.1 Session Initiation | 3.1. Session Initiation | |||
An SMTP session is initiated when a client opens a connection to a | An SMTP session is initiated when a client opens a connection to a | |||
server and the server responds with an opening message. | server and the server responds with an opening message. | |||
SMTP server implementations MAY include identification of their | SMTP server implementations MAY include identification of their | |||
software and version information in the connection greeting reply | software and version information in the connection greeting reply | |||
after the 220 code, a practice that permits more efficient isolation | after the 220 code, a practice that permits more efficient isolation | |||
and repair of any problems. Implementations MAY make provision for | and repair of any problems. Implementations MAY make provision for | |||
SMTP servers to disable the software and version announcement where | SMTP servers to disable the software and version announcement where | |||
it causes security concerns. While some systems also identify their | it causes security concerns. While some systems also identify their | |||
contact point for mail problems, this is not a substitute for | contact point for mail problems, this is not a substitute for | |||
maintaining the required "postmaster" address (see section 4.5.1). | maintaining the required "postmaster" address (see Section 4). | |||
The SMTP protocol allows a server to formally reject a transaction | The SMTP protocol allows a server to formally reject a mail session | |||
while still allowing the initial connection as follows: a 554 | while still allowing the initial connection as follows: a 554 | |||
response MAY be given in the initial connection opening message | response MAY be given in the initial connection opening message | |||
instead of the 220. A server taking this approach MUST still wait | instead of the 220. A server taking this approach MUST still wait | |||
for the client to send a QUIT (see section 4.1.1.10) before closing | for the client to send a QUIT (see Section 4.1.1.10) before closing | |||
the connection and SHOULD respond to any intervening commands with | the connection and SHOULD respond to any intervening commands with | |||
"503 bad sequence of commands". Since an attempt to make an SMTP | "503 bad sequence of commands". Since an attempt to make an SMTP | |||
connection to such a system is probably in error, a server returning | connection to such a system is probably in error, a server returning | |||
a 554 response on connection opening SHOULD provide enough | a 554 response on connection opening SHOULD provide enough | |||
information in the reply text to facilitate debugging of the sending | information in the reply text to facilitate debugging of the sending | |||
system. | system. | |||
3.2 Client Initiation | 3.2. Client Initiation | |||
Once the server has sent the welcoming message and the client has | Once the server has sent the greeting (welcoming) message and the | |||
received it, the client normally sends the EHLO command to the | client has received it, the client normally sends the EHLO command to | |||
server, indicating the client's identity. In addition to opening the | the server, indicating the client's identity. In addition to opening | |||
session, use of EHLO indicates that the client is able to process | the session, use of EHLO indicates that the client is able to process | |||
service extensions and requests that the server provide a list of the | service extensions and requests that the server provide a list of the | |||
extensions it supports. Older SMTP systems which are unable to | extensions it supports. Older SMTP systems that are unable to | |||
support service extensions and contemporary clients which do not | support service extensions, and contemporary clients that do not | |||
require service extensions in the mail session being initiated, MAY | require service extensions in the mail session being initiated, MAY | |||
use HELO instead of EHLO. Servers MUST NOT return the extended | use HELO instead of EHLO. Servers MUST NOT return the extended EHLO- | |||
EHLO-style response to a HELO command. For a particular connection | style response to a HELO command. For a particular connection | |||
attempt, if the server returns a "command not recognized" response to | attempt, if the server returns a "command not recognized" response to | |||
EHLO, the client SHOULD be able to fall back and send HELO. | EHLO, the client SHOULD be able to fall back and send HELO. | |||
In the EHLO command the host sending the command identifies itself; | In the EHLO command the host sending the command identifies itself; | |||
the command may be interpreted as saying "Hello, I am <domain>" (and, | the command may be interpreted as saying "Hello, I am <domain>" (and, | |||
in the case of EHLO, "and I support service extension requests"). | in the case of EHLO, "and I support service extension requests"). | |||
3.3 Mail Transactions | 3.3. Mail Transactions | |||
There are three steps to SMTP mail transactions. The transaction | There are three steps to SMTP mail transactions. The transaction | |||
starts with a MAIL command which gives the sender identification. | starts with a MAIL command which gives the sender identification. | |||
(In general, the MAIL command may be sent only when no mail | (In general, the MAIL command may be sent only when no mail | |||
transaction is in progress; see section 4.1.4.) A series of one or | transaction is in progress; see Section 4.1.4.) A series of one or | |||
more RCPT commands follows giving the receiver information. Then a | more RCPT commands follows giving the receiver information. Then a | |||
DATA command initiates transfer of the mail data and is terminated by | DATA command initiates transfer of the mail data and is terminated by | |||
the "end of mail" data indicator, which also confirms the | the "end of mail" data indicator, which also confirms the | |||
transaction. | transaction. | |||
The first step in the procedure is the MAIL command. | The first step in the procedure is the MAIL command. | |||
MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF> | MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF> | |||
This command tells the SMTP-receiver that a new mail transaction is | This command tells the SMTP-receiver that a new mail transaction is | |||
starting and to reset all its state tables and buffers, including any | starting and to reset all its state tables and buffers, including any | |||
recipients or mail data. The <reverse-path> portion of the first or | recipients or mail data. The <reverse-path> portion of the first or | |||
only argument contains the source mailbox (between "<" and ">" | only argument contains the source mailbox (between "<" and ">" | |||
brackets), which can be used to report errors (see section 4.2 for a | brackets), which can be used to report errors (see Section 4.2 for a | |||
discussion of error reporting). If accepted, the SMTP server returns | discussion of error reporting). If accepted, the SMTP server returns | |||
a 250 OK reply. If the mailbox specification is not acceptable for | a 250 OK reply. If the mailbox specification is not acceptable for | |||
some reason, the server MUST return a reply indicating whether the | some reason, the server MUST return a reply indicating whether the | |||
failure is permanent (i.e., will occur again if the client tries to | failure is permanent (i.e., will occur again if the client tries to | |||
send the same address again) or temporary (i.e., the address might be | send the same address again) or temporary (i.e., the address might be | |||
accepted if the client tries again later). Despite the apparent | accepted if the client tries again later). Despite the apparent | |||
scope of this requirement, there are circumstances in which the | scope of this requirement, there are circumstances in which the | |||
acceptability of the reverse-path may not be determined until one or | acceptability of the reverse-path may not be determined until one or | |||
more forward-paths (in RCPT commands) can be examined. In those | more forward-paths (in RCPT commands) can be examined. In those | |||
cases, the server MAY reasonably accept the reverse-path (with a 250 | cases, the server MAY reasonably accept the reverse-path (with a 250 | |||
reply) and then report problems after the forward-paths are received | reply) and then report problems after the forward-paths are received | |||
and examined. Normally, failures produce 550 or 553 replies. | and examined. Normally, failures produce 550 or 553 replies. | |||
Historically, the <reverse-path> can contain more than just a | Historically, the <reverse-path> was permitted to contain more than | |||
mailbox, however, contemporary systems SHOULD NOT use source routing | just a mailbox, however, contemporary systems SHOULD NOT use source | |||
(see appendix C). | routing (see Appendix C). | |||
The optional <mail-parameters> are associated with negotiated SMTP | The optional <mail-parameters> are associated with negotiated SMTP | |||
service extensions (see section 2.2). | service extensions (see Section 2.2). | |||
The second step in the procedure is the RCPT command. | The second step in the procedure is the RCPT command. This step of | |||
the procedure can be repeated any number of times. | ||||
RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF> | RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF> | |||
The first or only argument to this command includes a forward-path | The first or only argument to this command includes a forward-path | |||
(normally a mailbox and domain, always surrounded by "<" and ">" | (normally a mailbox and domain, always surrounded by "<" and ">" | |||
brackets) identifying one recipient. If accepted, the SMTP server | brackets) identifying one recipient. If accepted, the SMTP server | |||
returns a 250 OK reply and stores the forward-path. If the recipient | returns a 250 OK reply and stores the forward-path. If the recipient | |||
is known not to be a deliverable address, the SMTP server returns a | is known not to be a deliverable address, the SMTP server returns a | |||
550 reply, typically with a string such as "no such user - " and the | 550 reply, typically with a string such as "no such user - " and the | |||
mailbox name (other circumstances and reply codes are possible). | mailbox name (other circumstances and reply codes are possible). | |||
This step of the procedure can be repeated any number of times. | ||||
The <forward-path> can contain more than just a mailbox. | The <forward-path> can contain more than just a mailbox. | |||
Historically, the <forward-path> can be a source routing list of | Historically, the <forward-path> was permitted to contain a source | |||
hosts and the destination mailbox, however, contemporary SMTP clients | routing list of hosts and the destination mailbox, however, | |||
SHOULD NOT utilize source routes (see appendix C). Servers MUST be | contemporary SMTP clients SHOULD NOT utilize source routes (see | |||
prepared to encounter a list of source routes in the forward path, | Appendix C). Servers MUST be prepared to encounter a list of source | |||
but SHOULD ignore the routes or MAY decline to support the relaying | routes in the forward-path, but SHOULD ignore the routes or MAY | |||
they imply. Similarly, servers MAY decline to accept mail that is | decline to support the relaying they imply. Similarly, servers MAY | |||
destined for other hosts or systems. These restrictions make a | decline to accept mail that is destined for other hosts or systems. | |||
server useless as a relay for clients that do not support full SMTP | These restrictions make a server useless as a relay for clients that | |||
functionality. Consequently, restricted-capability clients MUST NOT | do not support full SMTP functionality. Consequently, restricted- | |||
assume that any SMTP server on the Internet can be used as their mail | capability clients MUST NOT assume that any SMTP server on the | |||
processing (relaying) site. If a RCPT command appears without a | Internet can be used as their mail processing (relaying) site. If a | |||
previous MAIL command, the server MUST return a 503 "Bad sequence of | RCPT command appears without a previous MAIL command, the server MUST | |||
commands" response. The optional <rcpt-parameters> are associated | return a 503 "Bad sequence of commands" response. The optional | |||
with negotiated SMTP service extensions (see section 2.2). | <rcpt-parameters> are associated with negotiated SMTP service | |||
extensions (see Section 2.2). | ||||
Since it has been a common source of errors, it is worth noting that | ||||
spaces are not permitted on either side of the colon following FROM | ||||
in the MAIL command or TO in the RCPT command. The syntax is exactly | ||||
as given above. | ||||
The third step in the procedure is the DATA command (or some | The third step in the procedure is the DATA command (or some | |||
alternative specified in a service extension). | alternative specified in a service extension). | |||
DATA <CRLF> | DATA <CRLF> | |||
If accepted, the SMTP server returns a 354 Intermediate reply and | If accepted, the SMTP server returns a 354 Intermediate reply and | |||
considers all succeeding lines up to but not including the end of | considers all succeeding lines up to but not including the end of | |||
mail data indicator to be the message text. When the end of text is | mail data indicator to be the message text. When the end of text is | |||
successfully received and stored the SMTP-receiver sends a 250 OK | successfully received and stored, the SMTP-receiver sends a 250 OK | |||
reply. | reply. | |||
Since the mail data is sent on the transmission channel, the end of | Since the mail data is sent on the transmission channel, the end of | |||
mail data must be indicated so that the command and reply dialog can | mail data must be indicated so that the command and reply dialog can | |||
be resumed. SMTP indicates the end of the mail data by sending a | be resumed. SMTP indicates the end of the mail data by sending a | |||
line containing only a "." (period or full stop). A transparency | line containing only a "." (period or full stop). A transparency | |||
procedure is used to prevent this from interfering with the user's | procedure is used to prevent this from interfering with the user's | |||
text (see section 4.5.2). | text (see Section 4.5.2). | |||
The end of mail data indicator also confirms the mail transaction and | The end of mail data indicator also confirms the mail transaction and | |||
tells the SMTP server to now process the stored recipients and mail | tells the SMTP server to now process the stored recipients and mail | |||
data. If accepted, the SMTP server returns a 250 OK reply. The DATA | data. If accepted, the SMTP server returns a 250 OK reply. The DATA | |||
command can fail at only two points in the protocol exchange: | command can fail at only two points in the protocol exchange: | |||
- If there was no MAIL, or no RCPT, command, or all such commands | If there was no MAIL, or no RCPT, command, or all such commands were | |||
were rejected, the server MAY return a "command out of sequence" | rejected, the server MAY return a "command out of sequence" (503) or | |||
(503) or "no valid recipients" (554) reply in response to the DATA | "no valid recipients" (554) reply in response to the DATA command. | |||
command. If one of those replies (or any other 5yz reply) is | If one of those replies (or any other 5yz reply) is received, the | |||
received, the client MUST NOT send the message data; more | client MUST NOT send the message data; more generally, message data | |||
generally, message data MUST NOT be sent unless a 354 reply is | MUST NOT be sent unless a 354 reply is received. | |||
received. | ||||
- If the verb is initially accepted and the 354 reply issued, the | If the verb is initially accepted and the 354 reply issued, the DATA | |||
DATA command should fail only if the mail transaction was | command should fail only if the mail transaction was incomplete (for | |||
incomplete (for example, no recipients), or if resources were | example, no recipients), or if resources were unavailable (including, | |||
unavailable (including, of course, the server unexpectedly | of course, the server unexpectedly becoming unavailable), or if the | |||
becoming unavailable), or if the server determines that the | server determines that the message should be rejected for policy or | |||
message should be rejected for policy or other reasons. | other reasons. | |||
However, in practice, some servers do not perform recipient | However, in practice, some servers do not perform recipient | |||
verification until after the message text is received. These servers | verification until after the message text is received. These servers | |||
SHOULD treat a failure for one or more recipients as a "subsequent | SHOULD treat a failure for one or more recipients as a "subsequent | |||
failure" and return a mail message as discussed in section 6. Using | failure" and return a mail message as discussed in Section 6 and, in | |||
a "550 mailbox not found" (or equivalent) reply code after the data | particular, in Section 6.1. Using a "550 mailbox not found" (or | |||
are accepted makes it difficult or impossible for the client to | equivalent) reply code after the data are accepted makes it difficult | |||
determine which recipients failed. | or impossible for the client to determine which recipients failed. | |||
When RFC 822 format [7, 32] is being used, the mail data include the | When RFC 822 format (RFC822 [16], RFC2822 [11]) is being used, the | |||
memo header items such as Date, Subject, To, Cc, From. Server SMTP | mail data include the header fields such as those named Date, | |||
systems SHOULD NOT reject messages based on perceived defects in the | Subject, To, Cc, From. Server SMTP systems SHOULD NOT reject | |||
RFC 822 or MIME [12] message header or message body. In particular, | messages based on perceived defects in the RFC 822 or MIME (RFC2045 | |||
they MUST NOT reject messages in which the numbers of Resent-fields | [28]) message header section or message body. In particular, they | |||
do not match or Resent-to appears without Resent-from and/or Resent- | MUST NOT reject messages in which the numbers of Resent- header | |||
date. | fields do not match or Resent-to appears without Resent-from and/or | |||
Resent-date. | ||||
Mail transaction commands MUST be used in the order discussed above. | Mail transaction commands MUST be used in the order discussed above. | |||
3.4 Forwarding for Address Correction or Updating | 3.4. Forwarding for Address Correction or Updating | |||
Forwarding support is most often required to consolidate and simplify | Forwarding support is most often required to consolidate and simplify | |||
addresses within, or relative to, some enterprise and less frequently | addresses within, or relative to, some enterprise and less frequently | |||
to establish addresses to link a person's prior address with current | to establish addresses to link a person's prior address with a | |||
one. Silent forwarding of messages (without server notification to | current one. Silent forwarding of messages (without server | |||
the sender), for security or non-disclosure purposes, is common in | notification to the sender), for security or non-disclosure purposes, | |||
the contemporary Internet. | is common in the contemporary Internet. | |||
In both the enterprise and the "new address" cases, information | In both the enterprise and the "new address" cases, information | |||
hiding (and sometimes security) considerations argue against exposure | hiding (and sometimes security) considerations argue against exposure | |||
of the "final" address through the SMTP protocol as a side-effect of | of the "final" address through the SMTP protocol as a side-effect of | |||
the forwarding activity. This may be especially important when the | the forwarding activity. This may be especially important when the | |||
final address may not even be reachable by the sender. Consequently, | final address may not even be reachable by the sender. Consequently, | |||
the "forwarding" mechanisms described in section 3.2 of RFC 821, and | the "forwarding" mechanisms described in section 3.2 of RFC 821, and | |||
especially the 251 (corrected destination) and 551 reply codes from | especially the 251 (corrected destination) and 551 reply codes from | |||
RCPT must be evaluated carefully by implementers and, when they are | RCPT must be evaluated carefully by implementers and, when they are | |||
available, by those configuring systems. | available, by those configuring systems (see also Section 7.4). | |||
In particular: | In particular: | |||
* Servers MAY forward messages when they are aware of an address | o Servers MAY forward messages when they are aware of an address | |||
change. When they do so, they MAY either provide address-updating | change. When they do so, they MAY either provide address-updating | |||
information with a 251 code, or may forward "silently" and return | information with a 251 code, or may forward "silently" and return | |||
a 250 code. But, if a 251 code is used, they MUST NOT assume that | a 250 code. However, if a 251 code is used, they MUST NOT assume | |||
the client will actually update address information or even return | that the client will actually update address information or even | |||
that information to the user. | return that information to the user. | |||
Alternately, | Alternately, | |||
* Servers MAY reject or bounce messages when they are not | o Servers MAY reject messages or return them as nondeliverable when | |||
deliverable when addressed. When they do so, they MAY either | they cannot be delivered precisely as addressed. When they do so, | |||
provide address-updating information with a 551 code, or may | they MAY either provide address-updating information with a 551 | |||
reject the message as undeliverable with a 550 code and no | code, or may reject the message as undeliverable with a 550 code | |||
address-specific information. But, if a 551 code is used, they | and no address-specific information. However, if a 551 code is | |||
MUST NOT assume that the client will actually update address | used, they MUST NOT assume that the client will actually update | |||
information or even return that information to the user. | address information or even return that information to the user. | |||
SMTP server implementations that support the 251 and/or 551 reply | SMTP server implementations that support the 251 and/or 551 reply | |||
codes are strongly encouraged to provide configuration mechanisms so | codes SHOULD provide configuration mechanisms so that sites which | |||
that sites which conclude that they would undesirably disclose | conclude that they would undesirably disclose information can disable | |||
information can disable or restrict their use. | or restrict their use. | |||
3.5 Commands for Debugging Addresses | 3.5. Commands for Debugging Addresses | |||
3.5.1 Overview | 3.5.1. Overview | |||
SMTP provides commands to verify a user name or obtain the content of | SMTP provides commands to verify a user name or obtain the content of | |||
a mailing list. This is done with the VRFY and EXPN commands, which | a mailing list. This is done with the VRFY and EXPN commands, which | |||
have character string arguments. Implementations SHOULD support VRFY | have character string arguments. Implementations SHOULD support VRFY | |||
and EXPN (however, see section 3.5.2 and 7.3). | and EXPN (however, see Section 3.5.2 and Section 7.3). | |||
For the VRFY command, the string is a user name or a user name and | For the VRFY command, the string is a user name or a user name and | |||
domain (see below). If a normal (i.e., 250) response is returned, | domain (see below). If a normal (i.e., 250) response is returned, | |||
the response MAY include the full name of the user and MUST include | the response MAY include the full name of the user and MUST include | |||
the mailbox of the user. It MUST be in either of the following | the mailbox of the user. It MUST be in either of the following | |||
forms: | forms: | |||
User Name <local-part@domain> | User Name <local-part@domain> | |||
local-part@domain | local-part@domain | |||
When a name that is the argument to VRFY could identify more than one | When a name that is the argument to VRFY could identify more than one | |||
mailbox, the server MAY either note the ambiguity or identify the | mailbox, the server MAY either note the ambiguity or identify the | |||
alternatives. In other words, any of the following are legitimate | alternatives. In other words, any of the following are legitimate | |||
response to VRFY: | responses to VRFY: | |||
553 User ambiguous | 553 User ambiguous | |||
or | or | |||
553- Ambiguous; Possibilities are | 553- Ambiguous; Possibilities are | |||
553-Joe Smith <jsmith@foo.com> | 553-Joe Smith <jsmith@foo.example.com> | |||
553-Harry Smith <hsmith@foo.com> | 553-Harry Smith <hsmith@foo.example.com> | |||
553 Melvin Smith <dweep@foo.com> | 553 Melvin Smith <dweep@foo.example.com> | |||
or | or | |||
553-Ambiguous; Possibilities | 553-Ambiguous; Possibilities | |||
553- <jsmith@foo.com> | 553- <jsmith@foo.example.com> | |||
553- <hsmith@foo.com> | 553- <hsmith@foo.example.com> | |||
553 <dweep@foo.com> | 553 <dweep@foo.example.com> | |||
Under normal circumstances, a client receiving a 553 reply would be | Under normal circumstances, a client receiving a 553 reply would be | |||
expected to expose the result to the user. Use of exactly the forms | expected to expose the result to the user. Use of exactly the forms | |||
given, and the "user ambiguous" or "ambiguous" keywords, possibly | given, and the "user ambiguous" or "ambiguous" keywords, possibly | |||
supplemented by extended reply codes such as those described in [34], | supplemented by extended reply codes such as those described in | |||
will facilitate automated translation into other languages as needed. | RFC3463 [37], will facilitate automated translation into other | |||
Of course, a client that was highly automated or that was operating | languages as needed. Of course, a client that was highly automated | |||
in another language than English, might choose to try to translate | or that was operating in another language than English, might choose | |||
the response, to return some other indication to the user than the | to try to translate the response, to return some other indication to | |||
literal text of the reply, or to take some automated action such as | the user than the literal text of the reply, or to take some | |||
consulting a directory service for additional information before | automated action such as consulting a directory service for | |||
reporting to the user. | additional information before reporting to the user. | |||
For the EXPN command, the string identifies a mailing list, and the | For the EXPN command, the string identifies a mailing list, and the | |||
successful (i.e., 250) multiline response MAY include the full name | successful (i.e., 250) multiline response MAY include the full name | |||
of the users and MUST give the mailboxes on the mailing list. | of the users and MUST give the mailboxes on the mailing list. | |||
In some hosts the distinction between a mailing list and an alias for | In some hosts the distinction between a mailing list and an alias for | |||
a single mailbox is a bit fuzzy, since a common data structure may | a single mailbox is a bit fuzzy, since a common data structure may | |||
hold both types of entries, and it is possible to have mailing lists | hold both types of entries, and it is possible to have mailing lists | |||
containing only one mailbox. If a request is made to apply VRFY to a | containing only one mailbox. If a request is made to apply VRFY to a | |||
mailing list, a positive response MAY be given if a message so | mailing list, a positive response MAY be given if a message so | |||
skipping to change at page 21, line 44 | skipping to change at page 25, line 25 | |||
functionality, SHOULD accept the "local-part@domain" form as a "user | functionality, SHOULD accept the "local-part@domain" form as a "user | |||
name"; hosts MAY also choose to recognize other strings as "user | name"; hosts MAY also choose to recognize other strings as "user | |||
names". | names". | |||
The case of expanding a mailbox list requires a multiline reply, such | The case of expanding a mailbox list requires a multiline reply, such | |||
as: | as: | |||
C: EXPN Example-People | C: EXPN Example-People | |||
S: 250-Jon Postel <Postel@isi.edu> | S: 250-Jon Postel <Postel@isi.edu> | |||
S: 250-Fred Fonebone <Fonebone@physics.foo-u.edu> | S: 250-Fred Fonebone <Fonebone@physics.foo-u.edu> | |||
S: 250 Sam Q. Smith <SQSmith@specific.generic.com> | S: 250 Sam Q. Smith <SQSmith@specific.generic.example.com> | |||
or | or | |||
C: EXPN Executive-Washroom-List | C: EXPN Executive-Washroom-List | |||
S: 550 Access Denied to You. | S: 550 Access Denied to You. | |||
The character string arguments of the VRFY and EXPN commands cannot | The character string arguments of the VRFY and EXPN commands cannot | |||
be further restricted due to the variety of implementations of the | be further restricted due to the variety of implementations of the | |||
user name and mailbox list concepts. On some systems it may be | user name and mailbox list concepts. On some systems it may be | |||
appropriate for the argument of the EXPN command to be a file name | appropriate for the argument of the EXPN command to be a file name | |||
for a file containing a mailing list, but again there are a variety | for a file containing a mailing list, but again there are a variety | |||
of file naming conventions in the Internet. Similarly, historical | of file naming conventions in the Internet. Similarly, historical | |||
variations in what is returned by these commands are such that the | variations in what is returned by these commands are such that the | |||
response SHOULD be interpreted very carefully, if at all, and SHOULD | response SHOULD be interpreted very carefully, if at all, and SHOULD | |||
generally only be used for diagnostic purposes. | generally only be used for diagnostic purposes. | |||
3.5.2 VRFY Normal Response | 3.5.2. VRFY Normal Response | |||
When normal (2yz or 551) responses are returned from a VRFY or EXPN | When normal (2yz or 551) responses are returned from a VRFY or EXPN | |||
request, the reply normally includes the mailbox name, i.e., | request, the reply MUST include the <Mailbox> name using a | |||
"<local-part@domain>", where "domain" is a fully qualified domain | "<local-part@domain>" construction, where "domain" is a fully | |||
name, MUST appear in the syntax. In circumstances exceptional enough | qualified domain name. In circumstances exceptional enough to | |||
to justify violating the intent of this specification, free-form text | justify violating the intent of this specification, free-form text | |||
MAY be returned. In order to facilitate parsing by both computers | MAY be returned. In order to facilitate parsing by both computers | |||
and people, addresses SHOULD appear in pointed brackets. When | and people, addresses SHOULD appear in pointed brackets. When | |||
addresses, rather than free-form debugging information, are returned, | addresses, rather than free-form debugging information, are returned, | |||
EXPN and VRFY MUST return only valid domain addresses that are usable | EXPN and VRFY MUST return only valid domain addresses that are usable | |||
in SMTP RCPT commands. Consequently, if an address implies delivery | in SMTP RCPT commands. Consequently, if an address implies delivery | |||
to a program or other system, the mailbox name used to reach that | to a program or other system, the mailbox name used to reach that | |||
target MUST be given. Paths (explicit source routes) MUST NOT be | target MUST be given. Paths (explicit source routes) MUST NOT be | |||
returned by VRFY or EXPN. | returned by VRFY or EXPN. | |||
Server implementations SHOULD support both VRFY and EXPN. For | Server implementations SHOULD support both VRFY and EXPN. For | |||
security reasons, implementations MAY provide local installations a | security reasons, implementations MAY provide local installations a | |||
way to disable either or both of these commands through configuration | way to disable either or both of these commands through configuration | |||
options or the equivalent. When these commands are supported, they | options or the equivalent (see Section 7.3). When these commands are | |||
are not required to work across relays when relaying is supported. | supported, they are not required to work across relays when relaying | |||
Since they were both optional in RFC 821, they MUST be listed as | is supported. Since they were both optional in RFC 821, but VRFY was | |||
service extensions in an EHLO response, if they are supported. | made mandatory in RFC1123 [3], if EXPN is supported, it MUST be | |||
listed as a service extension in an EHLO response. VRFY MAY be | ||||
listed as a convenience but, since support for it is required, SMTP | ||||
clients are not required to check for its presence on the extension | ||||
list before using it. | ||||
3.5.3 Meaning of VRFY or EXPN Success Response | 3.5.3. Meaning of VRFY or EXPN Success Response | |||
A server MUST NOT return a 250 code in response to a VRFY or EXPN | A server MUST NOT return a 250 code in response to a VRFY or EXPN | |||
command unless it has actually verified the address. In particular, | command unless it has actually verified the address. In particular, | |||
a server MUST NOT return 250 if all it has done is to verify that the | a server MUST NOT return 250 if all it has done is to verify that the | |||
syntax given is valid. In that case, 502 (Command not implemented) | syntax given is valid. In that case, 502 (Command not implemented) | |||
or 500 (Syntax error, command unrecognized) SHOULD be returned. As | or 500 (Syntax error, command unrecognized) SHOULD be returned. As | |||
stated elsewhere, implementation (in the sense of actually validating | stated elsewhere, implementation (in the sense of actually validating | |||
addresses and returning information) of VRFY and EXPN are strongly | addresses and returning information) of VRFY and EXPN are strongly | |||
recommended. Hence, implementations that return 500 or 502 for VRFY | recommended. Hence, implementations that return 500 or 502 for VRFY | |||
are not in full compliance with this specification. | are not in full compliance with this specification. | |||
There may be circumstances where an address appears to be valid but | There may be circumstances where an address appears to be valid but | |||
cannot reasonably be verified in real time, particularly when a | cannot reasonably be verified in real time, particularly when a | |||
server is acting as a mail exchanger for another server or domain. | server is acting as a mail exchanger for another server or domain. | |||
"Apparent validity" in this case would normally involve at least | "Apparent validity" in this case would normally involve at least | |||
syntax checking and might involve verification that any domains | syntax checking and might involve verification that any domains | |||
specified were ones to which the host expected to be able to relay | specified were ones to which the host expected to be able to relay | |||
mail. In these situations, reply code 252 SHOULD be returned. These | mail. In these situations, reply code 252 SHOULD be returned. These | |||
cases parallel the discussion of RCPT verification discussed in | cases parallel the discussion of RCPT verification discussed in | |||
section 2.1. Similarly, the discussion in section 3.4 applies to the | Section 2.1. Similarly, the discussion in Section 3.4 applies to the | |||
use of reply codes 251 and 551 with VRFY (and EXPN) to indicate | use of reply codes 251 and 551 with VRFY (and EXPN) to indicate | |||
addresses that are recognized but that would be forwarded or bounced | addresses that are recognized but that would be forwarded or rejected | |||
were mail received for them. Implementations generally SHOULD be | were mail received for them. Implementations generally SHOULD be | |||
more aggressive about address verification in the case of VRFY than | more aggressive about address verification in the case of VRFY than | |||
in the case of RCPT, even if it takes a little longer to do so. | in the case of RCPT, even if it takes a little longer to do so. | |||
3.5.4 Semantics and Applications of EXPN | 3.5.4. Semantics and Applications of EXPN | |||
EXPN is often very useful in debugging and understanding problems | EXPN is often very useful in debugging and understanding problems | |||
with mailing lists and multiple-target-address aliases. Some systems | with mailing lists and multiple-target-address aliases. Some systems | |||
have attempted to use source expansion of mailing lists as a means of | have attempted to use source expansion of mailing lists as a means of | |||
eliminating duplicates. The propagation of aliasing systems with | eliminating duplicates. The propagation of aliasing systems with | |||
mail on the Internet, for hosts (typically with MX and CNAME DNS | mail on the Internet, for hosts (typically with MX and CNAME DNS | |||
records), for mailboxes (various types of local host aliases), and in | records), for mailboxes (various types of local host aliases), and in | |||
various proxying arrangements, has made it nearly impossible for | various proxying arrangements, has made it nearly impossible for | |||
these strategies to work consistently, and mail systems SHOULD NOT | these strategies to work consistently, and mail systems SHOULD NOT | |||
attempt them. | attempt them. | |||
3.6 Domains | 3.6. Relaying and Mail Routing | |||
Only resolvable, fully-qualified, domain names (FQDNs) are permitted | ||||
when domain names are used in SMTP. In other words, names that can | ||||
be resolved to MX RRs or A RRs (as discussed in section 5) are | ||||
permitted, as are CNAME RRs whose targets can be resolved, in turn, | ||||
to MX or A RRs. Local nicknames or unqualified names MUST NOT be | ||||
used. There are two exceptions to the rule requiring FQDNs: | ||||
- The domain name given in the EHLO command MUST BE either a primary | ||||
host name (a domain name that resolves to an A RR) or, if the host | ||||
has no name, an address literal as described in section 4.1.1.1. | ||||
- The reserved mailbox name "postmaster" may be used in a RCPT | ||||
command without domain qualification (see section 4.1.1.3) and | ||||
MUST be accepted if so used. | ||||
3.7 Relaying | 3.6.1. Source Routes and Relaying | |||
In general, the availability of Mail eXchanger records in the domain | In general, the availability of Mail eXchanger records in the domain | |||
name system [22, 27] makes the use of explicit source routes in the | name system (RFC1035 [7], RFC974 [19]) makes the use of explicit | |||
Internet mail system unnecessary. Many historical problems with | source routes in the Internet mail system unnecessary. Many | |||
their interpretation have made their use undesirable. SMTP clients | historical problems with the interpretation of explicit source routes | |||
SHOULD NOT generate explicit source routes except under unusual | have made their use undesirable. SMTP clients SHOULD NOT generate | |||
circumstances. SMTP servers MAY decline to act as mail relays or to | explicit source routes except under unusual circumstances. SMTP | |||
accept addresses that specify source routes. When route information | servers MAY decline to act as mail relays or to accept addresses that | |||
is encountered, SMTP servers are also permitted to ignore the route | specify source routes. When route information is encountered, SMTP | |||
information and simply send to the final destination specified as the | servers MAY ignore the route information and simply send to the final | |||
last element in the route and SHOULD do so. There has been an | destination specified as the last element in the route and SHOULD do | |||
invalid practice of using names that do not appear in the DNS as | so. There has been an invalid practice of using names that do not | |||
destination names, with the senders counting on the intermediate | appear in the DNS as destination names, with the senders counting on | |||
hosts specified in source routing to resolve any problems. If source | the intermediate hosts specified in source routing to resolve any | |||
routes are stripped, this practice will cause failures. This is one | problems. If source routes are stripped, this practice will cause | |||
of several reasons why SMTP clients MUST NOT generate invalid source | failures. This is one of several reasons why SMTP clients MUST NOT | |||
routes or depend on serial resolution of names. | generate invalid source routes or depend on serial resolution of | |||
names. | ||||
When source routes are not used, the process described in RFC 821 for | When source routes are not used, the process described in RFC 821 for | |||
constructing a reverse-path from the forward-path is not applicable | constructing a reverse-path from the forward-path is not applicable | |||
and the reverse-path at the time of delivery will simply be the | and the reverse-path at the time of delivery will simply be the | |||
address that appeared in the MAIL command. | address that appeared in the MAIL command. | |||
3.6.2. Mail eXchange Records and Relaying | ||||
A relay SMTP server is usually the target of a DNS MX record that | A relay SMTP server is usually the target of a DNS MX record that | |||
designates it, rather than the final delivery system. The relay | designates it, rather than the final delivery system. The relay | |||
server may accept or reject the task of relaying the mail in the same | server may accept or reject the task of relaying the mail in the same | |||
way it accepts or rejects mail for a local user. If it accepts the | way it accepts or rejects mail for a local user. If it accepts the | |||
task, it then becomes an SMTP client, establishes a transmission | task, it then becomes an SMTP client, establishes a transmission | |||
channel to the next SMTP server specified in the DNS (according to | channel to the next SMTP server specified in the DNS (according to | |||
the rules in section 5), and sends it the mail. If it declines to | the rules in Section 5), and sends it the mail. If it declines to | |||
relay mail to a particular address for policy reasons, a 550 response | relay mail to a particular address for policy reasons, a 550 response | |||
SHOULD be returned. | SHOULD be returned. | |||
This specification does not deal with the verification of return | ||||
paths for use in delivery notifications. Recent work, such as that | ||||
on SPF [41] and DKIM [43] [44], has been done to provide ways to | ||||
ascertain that an address is valid or belongs to the person who | ||||
actually sent the message. A server MAY attempt to verify the return | ||||
path before using its address for delivery notifications, but methods | ||||
of doing so are not defined here nor is any particular method | ||||
recommended at this time. | ||||
3.6.3. Message Submission Servers as Relays | ||||
Many mail-sending clients exist, especially in conjunction with | Many mail-sending clients exist, especially in conjunction with | |||
facilities that receive mail via POP3 or IMAP, that have limited | facilities that receive mail via POP3 or IMAP, that have limited | |||
capability to support some of the requirements of this specification, | capability to support some of the requirements of this specification, | |||
such as the ability to queue messages for subsequent delivery | such as the ability to queue messages for subsequent delivery | |||
attempts. For these clients, it is common practice to make private | attempts. For these clients, it is common practice to make private | |||
arrangements to send all messages to a single server for processing | arrangements to send all messages to a single server for processing | |||
and subsequent distribution. SMTP, as specified here, is not ideally | and subsequent distribution. SMTP, as specified here, is not ideally | |||
suited for this role, and work is underway on standardized mail | suited for this role. A standardized mail submission protocol has | |||
submission protocols that might eventually supercede the current | been developed that is gradually superseding practices based on SMTP | |||
practices. In any event, because these arrangements are private and | (see RFC4409 [42]). In any event, because these arrangements are | |||
fall outside the scope of this specification, they are not described | private and fall outside the scope of this specification, they are | |||
here. | not described here. | |||
It is important to note that MX records can point to SMTP servers | It is important to note that MX records can point to SMTP servers | |||
which act as gateways into other environments, not just SMTP relays | which act as gateways into other environments, not just SMTP relays | |||
and final delivery systems; see sections 3.8 and 5. | and final delivery systems; see sections Section 3.7 and Section 5. | |||
If an SMTP server has accepted the task of relaying the mail and | If an SMTP server has accepted the task of relaying the mail and | |||
later finds that the destination is incorrect or that the mail cannot | later finds that the destination is incorrect or that the mail cannot | |||
be delivered for some other reason, then it MUST construct an | be delivered for some other reason, then it MUST construct an | |||
"undeliverable mail" notification message and send it to the | "undeliverable mail" notification message and send it to the | |||
originator of the undeliverable mail (as indicated by the reverse- | originator of the undeliverable mail (as indicated by the reverse- | |||
path). Formats specified for non-delivery reports by other standards | path). Formats specified for non-delivery reports by other standards | |||
(see, for example, [24, 25]) SHOULD be used if possible. | (see, for example, RFC3461 [12] and RFC3464 [13]) SHOULD be used if | |||
possible. | ||||
This notification message must be from the SMTP server at the relay | This notification message must be from the SMTP server at the relay | |||
host or the host that first determines that delivery cannot be | host or the host that first determines that delivery cannot be | |||
accomplished. Of course, SMTP servers MUST NOT send notification | accomplished. Of course, SMTP servers MUST NOT send notification | |||
messages about problems transporting notification messages. One way | messages about problems transporting notification messages. One way | |||
to prevent loops in error reporting is to specify a null reverse-path | to prevent loops in error reporting is to specify a null reverse-path | |||
in the MAIL command of a notification message. When such a message | in the MAIL command of a notification message. When such a message | |||
is transmitted the reverse-path MUST be set to null (see section | is transmitted the reverse-path MUST be set to null (see | |||
4.5.5 for additional discussion). A MAIL command with a null | Section 4.5.5 for additional discussion). A MAIL command with a null | |||
reverse-path appears as follows: | reverse-path appears as follows: | |||
MAIL FROM:<> | MAIL FROM:<> | |||
As discussed in section 2.4.1, a relay SMTP has no need to inspect or | As discussed in Section 6.4, a relay SMTP has no need to inspect or | |||
act upon the headers or body of the message data and MUST NOT do so | act upon the header section or body of the message data and MUST NOT | |||
except to add its own "Received:" header (section 4.4) and, | do so except to add its own "Received:" header field (Section 4.4) | |||
optionally, to attempt to detect looping in the mail system (see | and, optionally, to attempt to detect looping in the mail system (see | |||
section 6.2). | Section 6.3). Of course this prohibition also applies to any | |||
modifications of these header fields or text (see also Section 7.9). | ||||
3.8 Mail Gatewaying | 3.7. Mail Gatewaying | |||
While the relay function discussed above operates within the Internet | While the relay function discussed above operates within the Internet | |||
SMTP transport service environment, MX records or various forms of | SMTP transport service environment, MX records or various forms of | |||
explicit routing may require that an intermediate SMTP server perform | explicit routing may require that an intermediate SMTP server perform | |||
a translation function between one transport service and another. As | a translation function between one transport service and another. As | |||
discussed in section 2.3.8, when such a system is at the boundary | discussed in Section 2.3.10, when such a system is at the boundary | |||
between two transport service environments, we refer to it as a | between two transport service environments, we refer to it as a | |||
"gateway" or "gateway SMTP". | "gateway" or "gateway SMTP". | |||
Gatewaying mail between different mail environments, such as | Gatewaying mail between different mail environments, such as | |||
different mail formats and protocols, is complex and does not easily | different mail formats and protocols, is complex and does not easily | |||
yield to standardization. However, some general requirements may be | yield to standardization. However, some general requirements may be | |||
given for a gateway between the Internet and another mail | given for a gateway between the Internet and another mail | |||
environment. | environment. | |||
3.8.1 Header Fields in Gatewaying | 3.7.1. Header Fields in Gatewaying | |||
Header fields MAY be rewritten when necessary as messages are | Header fields MAY be rewritten when necessary as messages are | |||
gatewayed across mail environment boundaries. This may involve | gatewayed across mail environment boundaries. This may involve | |||
inspecting the message body or interpreting the local-part of the | inspecting the message body or interpreting the local-part of the | |||
destination address in spite of the prohibitions in section 2.4.1. | destination address in spite of the prohibitions in Section 6.4. | |||
Other mail systems gatewayed to the Internet often use a subset of | Other mail systems gatewayed to the Internet often use a subset of | |||
RFC 822 headers or provide similar functionality with a different | the RFC 822 header section or provide similar functionality with a | |||
syntax, but some of these mail systems do not have an equivalent to | different syntax, but some of these mail systems do not have an | |||
the SMTP envelope. Therefore, when a message leaves the Internet | equivalent to the SMTP envelope. Therefore, when a message leaves | |||
environment, it may be necessary to fold the SMTP envelope | the Internet environment, it may be necessary to fold the SMTP | |||
information into the message header. A possible solution would be to | envelope information into the message header section. A possible | |||
create new header fields to carry the envelope information (e.g., | solution would be to create new header fields to carry the envelope | |||
"X-SMTP-MAIL:" and "X-SMTP-RCPT:"); however, this would require | information (e.g., "X-SMTP-MAIL:" and "X-SMTP-RCPT:"); however, this | |||
changes in mail programs in foreign environments and might risk | would require changes in mail programs in foreign environments and | |||
disclosure of private information (see section 7.2). | might risk disclosure of private information (see Section 7.2). | |||
3.8.2 Received Lines in Gatewaying | 3.7.2. Received Lines in Gatewaying | |||
When forwarding a message into or out of the Internet environment, a | When forwarding a message into or out of the Internet environment, a | |||
gateway MUST prepend a Received: line, but it MUST NOT alter in any | gateway MUST prepend a Received: line, but it MUST NOT alter in any | |||
way a Received: line that is already in the header. | way a Received: line that is already in the header section. | |||
"Received:" fields of messages originating from other environments | "Received:" header fields of messages originating from other | |||
may not conform exactly to this specification. However, the most | environments may not conform exactly to this specification. However, | |||
important use of Received: lines is for debugging mail faults, and | the most important use of Received: lines is for debugging mail | |||
this debugging can be severely hampered by well-meaning gateways that | faults, and this debugging can be severely hampered by well-meaning | |||
try to "fix" a Received: line. As another consequence of trace | gateways that try to "fix" a Received: line. As another consequence | |||
fields arising in non-SMTP environments, receiving systems MUST NOT | of trace header fields arising in non-SMTP environments, receiving | |||
reject mail based on the format of a trace field and SHOULD be | systems MUST NOT reject mail based on the format of a trace header | |||
extremely robust in the light of unexpected information or formats in | field and SHOULD be extremely robust in the light of unexpected | |||
those fields. | information or formats in those header fields. | |||
The gateway SHOULD indicate the environment and protocol in the "via" | The gateway SHOULD indicate the environment and protocol in the "via" | |||
clauses of Received field(s) that it supplies. | clauses of Received header field(s) that it supplies. | |||
3.8.3 Addresses in Gatewaying | 3.7.3. Addresses in Gatewaying | |||
From the Internet side, the gateway SHOULD accept all valid address | From the Internet side, the gateway SHOULD accept all valid address | |||
formats in SMTP commands and in RFC 822 headers, and all valid RFC | formats in SMTP commands and in the RFC 822 header section, and all | |||
822 messages. Addresses and headers generated by gateways MUST | valid RFC 822 messages. Addresses and header fields generated by | |||
conform to applicable Internet standards (including this one and RFC | gateways MUST conform to applicable Internet standards (including | |||
822). Gateways are, of course, subject to the same rules for | this one and RFC 822). Gateways are, of course, subject to the same | |||
handling source routes as those described for other SMTP systems in | rules for handling source routes as those described for other SMTP | |||
section 3.3. | systems in Section 3.3. | |||
3.8.4 Other Header Fields in Gatewaying | 3.7.4. Other Header Fields in Gatewaying | |||
The gateway MUST ensure that all header fields of a message that it | The gateway MUST ensure that all header fields of a message that it | |||
forwards into the Internet mail environment meet the requirements for | forwards into the Internet mail environment meet the requirements for | |||
Internet mail. In particular, all addresses in "From:", "To:", | Internet mail. In particular, all addresses in "From:", "To:", | |||
"Cc:", etc., fields MUST be transformed (if necessary) to satisfy RFC | "Cc:", etc., header fields MUST be transformed (if necessary) to | |||
822 syntax, MUST reference only fully-qualified domain names, and | satisfy the standard header syntax of RFC 2822 [11], MUST reference | |||
MUST be effective and useful for sending replies. The translation | only fully-qualified domain names, and MUST be effective and useful | |||
algorithm used to convert mail from the Internet protocols to another | for sending replies. The translation algorithm used to convert mail | |||
environment's protocol SHOULD ensure that error messages from the | from the Internet protocols to another environment's protocol SHOULD | |||
foreign mail environment are delivered to the return path from the | ensure that error messages from the foreign mail environment are | |||
SMTP envelope, not to the sender listed in the "From:" field (or | delivered to the reverse path from the SMTP envelope, not to an | |||
other fields) of the RFC 822 message. | address in the "From:", "Sender:", or similar header fields of the | |||
message. | ||||
3.8.5 Envelopes in Gatewaying | 3.7.5. Envelopes in Gatewaying | |||
Similarly, when forwarding a message from another environment into | Similarly, when forwarding a message from another environment into | |||
the Internet, the gateway SHOULD set the envelope return path in | the Internet, the gateway SHOULD set the envelope return path in | |||
accordance with an error message return address, if supplied by the | accordance with an error message return address, if supplied by the | |||
foreign environment. If the foreign environment has no equivalent | foreign environment. If the foreign environment has no equivalent | |||
concept, the gateway must select and use a best approximation, with | concept, the gateway must select and use a best approximation, with | |||
the message originator's address as the default of last resort. | the message originator's address as the default of last resort. | |||
3.9 Terminating Sessions and Connections | 3.8. Terminating Sessions and Connections | |||
An SMTP connection is terminated when the client sends a QUIT | An SMTP connection is terminated when the client sends a QUIT | |||
command. The server responds with a positive reply code, after which | command. The server responds with a positive reply code, after which | |||
it closes the connection. | it closes the connection. | |||
An SMTP server MUST NOT intentionally close the connection except: | An SMTP server MUST NOT intentionally close the connection under | |||
normal operational circumstances (see Section 7.8) except: | ||||
- After receiving a QUIT command and responding with a 221 reply. | o After receiving a QUIT command and responding with a 221 reply. | |||
- After detecting the need to shut down the SMTP service and | o After detecting the need to shut down the SMTP service and | |||
returning a 421 response code. This response code can be issued | returning a 421 response code. This response code can be issued | |||
after the server receives any command or, if necessary, | after the server receives any command or, if necessary, | |||
asynchronously from command receipt (on the assumption that the | asynchronously from command receipt (on the assumption that the | |||
client will receive it after the next command is issued). | client will receive it after the next command is issued). | |||
o After a timeout, as specified in Section 4.5.3.2, occurs waiting | ||||
for the client to send a command or data. | ||||
In particular, a server that closes connections in response to | In particular, a server that closes connections in response to | |||
commands that are not understood is in violation of this | commands that are not understood is in violation of this | |||
specification. Servers are expected to be tolerant of unknown | specification. Servers are expected to be tolerant of unknown | |||
commands, issuing a 500 reply and awaiting further instructions from | commands, issuing a 500 reply and awaiting further instructions from | |||
the client. | the client. | |||
An SMTP server which is forcibly shut down via external means SHOULD | An SMTP server which is forcibly shut down via external means SHOULD | |||
attempt to send a line containing a 421 response code to the SMTP | attempt to send a line containing a 421 response code to the SMTP | |||
client before exiting. The SMTP client will normally read the 421 | client before exiting. The SMTP client will normally read the 421 | |||
response code after sending its next command. | response code after sending its next command. | |||
SMTP clients that experience a connection close, reset, or other | SMTP clients that experience a connection close, reset, or other | |||
communications failure due to circumstances not under their control | communications failure due to circumstances not under their control | |||
(in violation of the intent of this specification but sometimes | (in violation of the intent of this specification but sometimes | |||
unavoidable) SHOULD, to maintain the robustness of the mail system, | unavoidable) SHOULD, to maintain the robustness of the mail system, | |||
treat the mail transaction as if a 451 response had been received and | treat the mail transaction as if a 451 response had been received and | |||
act accordingly. | act accordingly. | |||
3.10 Mailing Lists and Aliases | 3.9. Mailing Lists and Aliases | |||
An SMTP-capable host SHOULD support both the alias and the list | An SMTP-capable host SHOULD support both the alias and the list | |||
models of address expansion for multiple delivery. When a message is | models of address expansion for multiple delivery. When a message is | |||
delivered or forwarded to each address of an expanded list form, the | delivered or forwarded to each address of an expanded list form, the | |||
return address in the envelope ("MAIL FROM:") MUST be changed to be | return address in the envelope ("MAIL FROM:") MUST be changed to be | |||
the address of a person or other entity who administers the list. | the address of a person or other entity who administers the list. | |||
However, in this case, the message header [32] MUST be left | However, in this case, the message header section (RFC2822 [11]) MUST | |||
unchanged; in particular, the "From" field of the message header is | be left unchanged; in particular, the "From" field of the header | |||
unaffected. | section is unaffected. | |||
An important mail facility is a mechanism for multi-destination | An important mail facility is a mechanism for multi-destination | |||
delivery of a single message, by transforming (or "expanding" or | delivery of a single message, by transforming (or "expanding" or | |||
"exploding") a pseudo-mailbox address into a list of destination | "exploding") a pseudo-mailbox address into a list of destination | |||
mailbox addresses. When a message is sent to such a pseudo-mailbox | mailbox addresses. When a message is sent to such a pseudo-mailbox | |||
(sometimes called an "exploder"), copies are forwarded or | (sometimes called an "exploder"), copies are forwarded or | |||
redistributed to each mailbox in the expanded list. Servers SHOULD | redistributed to each mailbox in the expanded list. Servers SHOULD | |||
simply utilize the addresses on the list; application of heuristics | simply utilize the addresses on the list; application of heuristics | |||
or other matching rules to eliminate some addresses, such as that of | or other matching rules to eliminate some addresses, such as that of | |||
the originator, is strongly discouraged. We classify such a pseudo- | the originator, is strongly discouraged. We classify such a pseudo- | |||
mailbox as an "alias" or a "list", depending upon the expansion | mailbox as an "alias" or a "list", depending upon the expansion | |||
rules. | rules. | |||
3.10.1 Alias | 3.9.1. Alias | |||
To expand an alias, the recipient mailer simply replaces the pseudo- | To expand an alias, the recipient mailer simply replaces the pseudo- | |||
mailbox address in the envelope with each of the expanded addresses | mailbox address in the envelope with each of the expanded addresses | |||
in turn; the rest of the envelope and the message body are left | in turn; the rest of the envelope and the message body are left | |||
unchanged. The message is then delivered or forwarded to each | unchanged. The message is then delivered or forwarded to each | |||
expanded address. | expanded address. | |||
3.10.2 List | 3.9.2. List | |||
A mailing list may be said to operate by "redistribution" rather than | A mailing list may be said to operate by "redistribution" rather than | |||
by "forwarding". To expand a list, the recipient mailer replaces the | by "forwarding". To expand a list, the recipient mailer replaces the | |||
pseudo-mailbox address in the envelope with all of the expanded | pseudo-mailbox address in the envelope with each of the expanded | |||
addresses. The return address in the envelope is changed so that all | addresses in turn. The return (backward-pointing) address in the | |||
error messages generated by the final deliveries will be returned to | envelope is changed so that all error messages generated by the final | |||
a list administrator, not to the message originator, who generally | deliveries will be returned to a list administrator, not to the | |||
has no control over the contents of the list and will typically find | message originator, who generally has no control over the contents of | |||
error messages annoying. | the list and will typically find error messages annoying. Note that | |||
the key difference between handling aliases (Section 3.9.1) and | ||||
forwarding (this subsection) is the change to the backward-pointing | ||||
address in this case. When a list constrains its processing to the | ||||
very limited set of modifications and actions described here, it is | ||||
attempting to emulate an MTA; such lists can be treated as a | ||||
continuation in email transit. | ||||
There exist mailing lists that perform additional, sometimes | ||||
extensive, modifications to a message and its envelope. Such mailing | ||||
lists need to be viewed as full MUAs, which accept a delivery and | ||||
post a new message. | ||||
4. The SMTP Specifications | 4. The SMTP Specifications | |||
4.1 SMTP Commands | 4.1. SMTP Commands | |||
4.1.1 Command Semantics and Syntax | 4.1.1. Command Semantics and Syntax | |||
The SMTP commands define the mail transfer or the mail system | The SMTP commands define the mail transfer or the mail system | |||
function requested by the user. SMTP commands are character strings | function requested by the user. SMTP commands are character strings | |||
terminated by <CRLF>. The commands themselves are alphabetic | terminated by <CRLF>. The commands themselves are alphabetic | |||
characters terminated by <SP> if parameters follow and <CRLF> | characters terminated by <SP> if parameters follow and <CRLF> | |||
otherwise. (In the interest of improved interoperability, SMTP | otherwise. (In the interest of improved interoperability, SMTP | |||
receivers are encouraged to tolerate trailing white space before the | receivers are SHOULD tolerate trailing white space before the | |||
terminating <CRLF>.) The syntax of the local part of a mailbox must | terminating <CRLF>.) The syntax of the local part of a mailbox MUST | |||
conform to receiver site conventions and the syntax specified in | conform to receiver site conventions and the syntax specified in | |||
section 4.1.2. The SMTP commands are discussed below. The SMTP | Section 4.1.2. The SMTP commands are discussed below. The SMTP | |||
replies are discussed in section 4.2. | replies are discussed in Section 4.2. | |||
A mail transaction involves several data objects which are | A mail transaction involves several data objects which are | |||
communicated as arguments to different commands. The reverse-path is | communicated as arguments to different commands. The reverse-path is | |||
the argument of the MAIL command, the forward-path is the argument of | the argument of the MAIL command, the forward-path is the argument of | |||
the RCPT command, and the mail data is the argument of the DATA | the RCPT command, and the mail data is the argument of the DATA | |||
command. These arguments or data objects must be transmitted and | command. These arguments or data objects must be transmitted and | |||
held pending the confirmation communicated by the end of mail data | held pending the confirmation communicated by the end of mail data | |||
indication which finalizes the transaction. The model for this is | indication which finalizes the transaction. The model for this is | |||
that distinct buffers are provided to hold the types of data objects, | that distinct buffers are provided to hold the types of data objects, | |||
that is, there is a reverse-path buffer, a forward-path buffer, and a | that is, there is a reverse-path buffer, a forward-path buffer, and a | |||
mail data buffer. Specific commands cause information to be appended | mail data buffer. Specific commands cause information to be appended | |||
to a specific buffer, or cause one or more buffers to be cleared. | to a specific buffer, or cause one or more buffers to be cleared. | |||
Several commands (RSET, DATA, QUIT) are specified as not permitting | Several commands (RSET, DATA, QUIT) are specified as not permitting | |||
parameters. In the absence of specific extensions offered by the | parameters. In the absence of specific extensions offered by the | |||
server and accepted by the client, clients MUST NOT send such | server and accepted by the client, clients MUST NOT send such | |||
parameters and servers SHOULD reject commands containing them as | parameters and servers SHOULD reject commands containing them as | |||
having invalid syntax. | having invalid syntax. | |||
4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO) | 4.1.1.1. Extended HELLO (EHLO) or HELLO (HELO) | |||
These commands are used to identify the SMTP client to the SMTP | These commands are used to identify the SMTP client to the SMTP | |||
server. The argument field contains the fully-qualified domain name | server. The argument clause contains the fully-qualified domain name | |||
of the SMTP client if one is available. In situations in which the | of the SMTP client if one is available. In situations in which the | |||
SMTP client system does not have a meaningful domain name (e.g., when | SMTP client system does not have a meaningful domain name (e.g., when | |||
its address is dynamically allocated and no reverse mapping record is | its address is dynamically allocated and no reverse mapping record is | |||
available), the client SHOULD send an address literal (see section | available), the client SHOULD send an address literal (see | |||
4.1.3), optionally followed by information that will help to identify | Section 4.1.3). | |||
the client system. y The SMTP server identifies itself to the SMTP | ||||
client in the connection greeting reply and in the response to this | RFC2821, and some earlier informal practices, encouraged following | |||
command. | the literal by information that would help to identify the client | |||
system. That convention was not widely supported and many SMTP | ||||
servers considered it an error. In the interest of interoperability, | ||||
it is probably wise for servers to be prepared for this string to | ||||
occur, but SMTP clients SHOULD NOT send it. | ||||
The SMTP server identifies itself to the SMTP client in the | ||||
connection greeting reply and in the response to this command. | ||||
A client SMTP SHOULD start an SMTP session by issuing the EHLO | A client SMTP SHOULD start an SMTP session by issuing the EHLO | |||
command. If the SMTP server supports the SMTP service extensions it | command. If the SMTP server supports the SMTP service extensions it | |||
will give a successful response, a failure response, or an error | will give a successful response, a failure response, or an error | |||
response. If the SMTP server, in violation of this specification, | response. If the SMTP server, in violation of this specification, | |||
does not support any SMTP service extensions it will generate an | does not support any SMTP service extensions it will generate an | |||
error response. Older client SMTP systems MAY, as discussed above, | error response. Older client SMTP systems MAY, as discussed above, | |||
use HELO (as specified in RFC 821) instead of EHLO, and servers MUST | use HELO (as specified in RFC 821) instead of EHLO, and servers MUST | |||
support the HELO command and reply properly to it. In any event, a | support the HELO command and reply properly to it. In any event, a | |||
client MUST issue HELO or EHLO before starting a mail transaction. | client MUST issue HELO or EHLO before starting a mail transaction. | |||
These commands, and a "250 OK" reply to one of them, confirm that | These commands, and a "250 OK" reply to one of them, confirm that | |||
both the SMTP client and the SMTP server are in the initial state, | both the SMTP client and the SMTP server are in the initial state, | |||
that is, there is no transaction in progress and all state tables and | that is, there is no transaction in progress and all state tables and | |||
buffers are cleared. | buffers are cleared. | |||
Syntax: | Syntax: | |||
ehlo = "EHLO" SP Domain CRLF | ehlo = "EHLO" SP ( Domain / address-literal ) CRLF | |||
helo = "HELO" SP Domain CRLF | helo = "HELO" SP Domain CRLF | |||
Normally, the response to EHLO will be a multiline reply. Each line | Normally, the response to EHLO will be a multiline reply. Each line | |||
of the response contains a keyword and, optionally, one or more | of the response contains a keyword and, optionally, one or more | |||
parameters. Following the normal syntax for multiline replies, these | parameters. Following the normal syntax for multiline replies, these | |||
keyworks follow the code (250) and a hyphen for all but the last | keywords follow the code (250) and a hyphen for all but the last | |||
line, and the code and a space for the last line. The syntax for a | line, and the code and a space for the last line. The syntax for a | |||
positive response, using the ABNF notation and terminal symbols of | positive response, using the ABNF notation and terminal symbols of | |||
[8], is: | RFC 5234 [5], is: | |||
ehlo-ok-rsp = ( "250" domain [ SP ehlo-greet ] CRLF ) | ehlo-ok-rsp = ( "250" SP Domain [ SP ehlo-greet ] CRLF ) | |||
/ ( "250-" domain [ SP ehlo-greet ] CRLF | / ( "250-" Domain [ SP ehlo-greet ] CRLF | |||
*( "250-" ehlo-line CRLF ) | *( "250-" ehlo-line CRLF ) | |||
"250" SP ehlo-line CRLF ) | "250" SP ehlo-line CRLF ) | |||
ehlo-greet = 1*(%d0-9 / %d11-12 / %d14-127) | ehlo-greet = 1*(%d0-9 / %d11-12 / %d14-127) | |||
; string of any characters other than CR or LF | ; string of any characters other than CR or LF | |||
ehlo-line = ehlo-keyword *( SP ehlo-param ) | ehlo-line = ehlo-keyword *( SP ehlo-param ) | |||
ehlo-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-") | ehlo-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-") | |||
; additional syntax of ehlo-params depends on | ; additional syntax of ehlo-params depends on | |||
; ehlo-keyword | ; ehlo-keyword | |||
ehlo-param = 1*(%d33-127) | ||||
ehlo-param = 1*(%d33-126) | ||||
; any CHAR excluding <SP> and all | ; any CHAR excluding <SP> and all | |||
; control characters (US-ASCII 0-31 inclusive) | ; control characters (US-ASCII 0-31 and 127 | |||
inclusive) | ||||
Although EHLO keywords may be specified in upper, lower, or mixed | Although EHLO keywords may be specified in upper, lower, or mixed | |||
case, they MUST always be recognized and processed in a case- | case, they MUST always be recognized and processed in a case- | |||
insensitive manner. This is simply an extension of practices | insensitive manner. This is simply an extension of practices | |||
specified in RFC 821 and section 2.4.1. | specified in RFC 821 and Section 2.4. | |||
4.1.1.2 MAIL (MAIL) | The EHLO response MUST contain keywords (and associated parameters if | |||
required) for all commands not listed as "required" in Section 4.5.1 | ||||
excepting only private-use commands as described in Section 4.1.5. | ||||
Private-use commands MAY be listed. | ||||
4.1.1.2. MAIL (MAIL) | ||||
This command is used to initiate a mail transaction in which the mail | This command is used to initiate a mail transaction in which the mail | |||
data is delivered to an SMTP server which may, in turn, deliver it to | data is delivered to an SMTP server which may, in turn, deliver it to | |||
one or more mailboxes or pass it on to another system (possibly using | one or more mailboxes or pass it on to another system (possibly using | |||
SMTP). The argument field contains a reverse-path and may contain | SMTP). The argument clause contains a reverse-path and may contain | |||
optional parameters. In general, the MAIL command may be sent only | optional parameters. In general, the MAIL command may be sent only | |||
when no mail transaction is in progress, see section 4.1.4. | when no mail transaction is in progress, see Section 4.1.4. | |||
The reverse-path consists of the sender mailbox. Historically, that | The reverse-path consists of the sender mailbox. Historically, that | |||
mailbox might optionally have been preceded by a list of hosts, but | mailbox might optionally have been preceded by a list of hosts, but | |||
that behavior is now deprecated (see appendix C). In some types of | that behavior is now deprecated (see Appendix C). In some types of | |||
reporting messages for which a reply is likely to cause a mail loop | reporting messages for which a reply is likely to cause a mail loop | |||
(for example, mail delivery and nondelivery notifications), the | (for example, mail delivery and nondelivery notifications), the | |||
reverse-path may be null (see section 3.7). | reverse-path may be null (see Section 3.6). | |||
This command clears the reverse-path buffer, the forward-path buffer, | This command clears the reverse-path buffer, the forward-path buffer, | |||
and the mail data buffer; and inserts the reverse-path information | and the mail data buffer; and inserts the reverse-path information | |||
from this command into the reverse-path buffer. | from this command into the reverse-path buffer. | |||
If service extensions were negotiated, the MAIL command may also | If service extensions were negotiated, the MAIL command may also | |||
carry parameters associated with a particular service extension. | carry parameters associated with a particular service extension. | |||
Syntax: | Syntax: | |||
"MAIL FROM:" ("<>" / Reverse-Path) | mail = "MAIL FROM:" Reverse-path | |||
[SP Mail-parameters] CRLF | [SP Mail-parameters] CRLF | |||
4.1.1.3 RECIPIENT (RCPT) | 4.1.1.3. RECIPIENT (RCPT) | |||
This command is used to identify an individual recipient of the mail | This command is used to identify an individual recipient of the mail | |||
data; multiple recipients are specified by multiple use of this | data; multiple recipients are specified by multiple use of this | |||
command. The argument field contains a forward-path and may contain | command. The argument clause contains a forward-path and may contain | |||
optional parameters. | optional parameters. | |||
The forward-path normally consists of the required destination | The forward-path normally consists of the required destination | |||
mailbox. Sending systems SHOULD not generate the optional list of | mailbox. Sending systems SHOULD NOT generate the optional list of | |||
hosts known as a source route. Receiving systems MUST recognize | hosts known as a source route. Receiving systems MUST recognize | |||
source route syntax but SHOULD strip off the source route | source route syntax but SHOULD strip off the source route | |||
specification and utilize the domain name associated with the mailbox | specification and utilize the domain name associated with the mailbox | |||
as if the source route had not been provided. | as if the source route had not been provided. | |||
Similarly, relay hosts SHOULD strip or ignore source routes, and | Similarly, relay hosts SHOULD strip or ignore source routes, and | |||
names MUST NOT be copied into the reverse-path. When mail reaches | names MUST NOT be copied into the reverse-path. When mail reaches | |||
its ultimate destination (the forward-path contains only a | its ultimate destination (the forward-path contains only a | |||
destination mailbox), the SMTP server inserts it into the destination | destination mailbox), the SMTP server inserts it into the destination | |||
mailbox in accordance with its host mail conventions. | mailbox in accordance with its host mail conventions. | |||
For example, mail received at relay host xyz.com with envelope | This command appends its forward-path argument to the forward-path | |||
buffer; it does not change the reverse-path buffer nor the mail data | ||||
buffer. | ||||
For example, mail received at relay host xyz.example.com with envelope | ||||
commands | commands | |||
MAIL FROM:<userx@y.foo.org> | MAIL FROM:<userx@y.foo.example.org> | |||
RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org> | RCPT TO:<@hosta.int,@jkl.example.org:userc@d.bar.example.org> | |||
will normally be sent directly on to host d.bar.org with envelope | will normally be sent directly on to host d.bar.example.org with envelope | |||
commands | commands | |||
MAIL FROM:<userx@y.foo.org> | MAIL FROM:<userx@y.foo.example.org> | |||
RCPT TO:<userc@d.bar.org> | RCPT TO:<userc@d.bar.example.org> | |||
As provided in appendix C, xyz.com MAY also choose to relay the | As provided in Appendix C, xyz.example.com MAY also choose to relay the | |||
message to hosta.int, using the envelope commands | message to hosta.int, using the envelope commands | |||
MAIL FROM:<userx@y.foo.org> | MAIL FROM:<userx@y.foo.example.org> | |||
RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org> | RCPT TO:<@hosta.int,@jkl.example.org:userc@d.bar.example.org> | |||
or to jkl.org, using the envelope commands | or to jkl.example.org, using the envelope commands | |||
MAIL FROM:<userx@y.foo.org> | MAIL FROM:<userx@y.foo.example.org> | |||
RCPT TO:<@jkl.org:userc@d.bar.org> | RCPT TO:<@jkl.example.org:userc@d.bar.example.org> | |||
Of course, since hosts are not required to relay mail at all, xyz.com | Attempting to use relaying this way is now strongly discouraged. | |||
may also reject the message entirely when the RCPT command is | ||||
received, using a 550 code (since this is a "policy reason"). | Since hosts are not required to relay mail at all, xyz.example.com MAY also | |||
reject the message entirely when the RCPT command is received, using | ||||
a 550 code (since this is a "policy reason"). | ||||
If service extensions were negotiated, the RCPT command may also | If service extensions were negotiated, the RCPT command may also | |||
carry parameters associated with a particular service extension | carry parameters associated with a particular service extension | |||
offered by the server. The client MUST NOT transmit parameters other | offered by the server. The client MUST NOT transmit parameters other | |||
than those associated with a service extension offered by the server | than those associated with a service extension offered by the server | |||
in its EHLO response. | in its EHLO response. | |||
Syntax: | Syntax: | |||
"RCPT TO:" ("<Postmaster@" domain ">" / "<Postmaster>" / Forward-Path) | ||||
[SP Rcpt-parameters] CRLF | ||||
4.1.1.4 DATA (DATA) | rcpt = "RCPT TO:" ( "<Postmaster@" Domain ">" / "<Postmaster>" / | |||
Forward-Path ) [SP Rcpt-parameters] CRLF | ||||
Note that, in a departure from the usual rules for | ||||
local-parts, the "Postmaster" string shown above is | ||||
treated as case-insensitive. | ||||
4.1.1.4. DATA (DATA) | ||||
The receiver normally sends a 354 response to DATA, and then treats | The receiver normally sends a 354 response to DATA, and then treats | |||
the lines (strings ending in <CRLF> sequences, as described in | the lines (strings ending in <CRLF> sequences, as described in | |||
section 2.3.7) following the command as mail data from the sender. | Section 2.3.7) following the command as mail data from the sender. | |||
This command causes the mail data to be appended to the mail data | This command causes the mail data to be appended to the mail data | |||
buffer. The mail data may contain any of the 128 ASCII character | buffer. The mail data may contain any of the 128 ASCII character | |||
codes, although experience has indicated that use of control | codes, although experience has indicated that use of control | |||
characters other than SP, HT, CR, and LF may cause problems and | characters other than SP, HT, CR, and LF may cause problems and | |||
SHOULD be avoided when possible. | SHOULD be avoided when possible. | |||
The mail data is terminated by a line containing only a period, that | The mail data are terminated by a line containing only a period, that | |||
is, the character sequence "<CRLF>.<CRLF>" (see section 4.5.2). This | is, the character sequence "<CRLF>.<CRLF>", where the first <CRLF> is | |||
is the end of mail data indication. Note that the first <CRLF> of | actually the terminator of the previous line (see Section 4.5.2). | |||
this terminating sequence is also the <CRLF> that ends the final line | This is the end of mail data indication. The first <CRLF> of this | |||
of the data (message text) or, if there was no data, ends the DATA | terminating sequence is also the <CRLF> that ends the final line of | |||
command itself. An extra <CRLF> MUST NOT be added, as that would | the data (message text) or, if there was no mail data, ends the DATA | |||
cause an empty line to be added to the message. The only exception | command itself (the "no mail data" case does not conform to this | |||
to this rule would arise if the message body were passed to the | specification since it would require that neither the trace header | |||
originating SMTP-sender with a final "line" that did not end in | fields required by this specification nor the message header section | |||
<CRLF>; in that case, the originating SMTP system MUST either reject | required by RFC2822 [11] be transmitted). An extra <CRLF> MUST NOT | |||
the message as invalid or add <CRLF> in order to have the receiving | be added, as that would cause an empty line to be added to the | |||
SMTP server recognize the "end of data" condition. | message. The only exception to this rule would arise if the message | |||
body were passed to the originating SMTP-sender with a final "line" | ||||
that did not end in <CRLF>; in that case, the originating SMTP system | ||||
MUST either reject the message as invalid or add <CRLF> in order to | ||||
have the receiving SMTP server recognize the "end of data" condition. | ||||
The custom of accepting lines ending only in <LF>, as a concession to | The custom of accepting lines ending only in <LF>, as a concession to | |||
non-conforming behavior on the part of some UNIX systems, has proven | non-conforming behavior on the part of some UNIX systems, has proven | |||
to cause more interoperability problems than it solves, and SMTP | to cause more interoperability problems than it solves, and SMTP | |||
server systems MUST NOT do this, even in the name of improved | server systems MUST NOT do this, even in the name of improved | |||
robustness. In particular, the sequence "<LF>.<LF>" (bare line | robustness. In particular, the sequence "<LF>.<LF>" (bare line | |||
feeds, without carriage returns) MUST NOT be treated as equivalent to | feeds, without carriage returns) MUST NOT be treated as equivalent to | |||
<CRLF>.<CRLF> as the end of mail data indication. | <CRLF>.<CRLF> as the end of mail data indication. | |||
Receipt of the end of mail data indication requires the server to | Receipt of the end of mail data indication requires the server to | |||
process the stored mail transaction information. This processing | process the stored mail transaction information. This processing | |||
consumes the information in the reverse-path buffer, the forward-path | consumes the information in the reverse-path buffer, the forward-path | |||
buffer, and the mail data buffer, and on the completion of this | buffer, and the mail data buffer, and on the completion of this | |||
command these buffers are cleared. If the processing is successful, | command these buffers are cleared. If the processing is successful, | |||
the receiver MUST send an OK reply. If the processing fails the | the receiver MUST send an OK reply. If the processing fails the | |||
receiver MUST send a failure reply. The SMTP model does not allow | receiver MUST send a failure reply. The SMTP model does not allow | |||
for partial failures at this point: either the message is accepted by | for partial failures at this point: either the message is accepted by | |||
the server for delivery and a positive response is returned or it is | the server for delivery and a positive response is returned or it is | |||
not accepted and a failure reply is returned. In sending a positive | not accepted and a failure reply is returned. In sending a positive | |||
completion reply to the end of data indication, the receiver takes | "250 OK" completion reply to the end of data indication, the receiver | |||
full responsibility for the message (see section 6.1). Errors that | takes full responsibility for the message (see Section 6.1). Errors | |||
are diagnosed subsequently MUST be reported in a mail message, as | that are diagnosed subsequently MUST be reported in a mail message, | |||
discussed in section 4.4. | as discussed in Section 4.4. | |||
When the SMTP server accepts a message either for relaying or for | When the SMTP server accepts a message either for relaying or for | |||
final delivery, it inserts a trace record (also referred to | final delivery, it inserts a trace record (also referred to | |||
interchangeably as a "time stamp line" or "Received" line) at the top | interchangeably as a "time stamp line" or "Received" line) at the top | |||
of the mail data. This trace record indicates the identity of the | of the mail data. This trace record indicates the identity of the | |||
host that sent the message, the identity of the host that received | host that sent the message, the identity of the host that received | |||
the message (and is inserting this time stamp), and the date and time | the message (and is inserting this time stamp), and the date and time | |||
the message was received. Relayed messages will have multiple time | the message was received. Relayed messages will have multiple time | |||
stamp lines. Details for formation of these lines, including their | stamp lines. Details for formation of these lines, including their | |||
syntax, is specified in section 4.4. | syntax, is specified in Section 4.4. | |||
Additional discussion about the operation of the DATA command appears | Additional discussion about the operation of the DATA command appears | |||
in section 3.3. | in Section 3.3. | |||
Syntax: | Syntax: | |||
"DATA" CRLF | ||||
4.1.1.5 RESET (RSET) | data = "DATA" CRLF | |||
4.1.1.5. RESET (RSET) | ||||
This command specifies that the current mail transaction will be | This command specifies that the current mail transaction will be | |||
aborted. Any stored sender, recipients, and mail data MUST be | aborted. Any stored sender, recipients, and mail data MUST be | |||
discarded, and all buffers and state tables cleared. The receiver | discarded, and all buffers and state tables cleared. The receiver | |||
MUST send a "250 OK" reply to a RSET command with no arguments. A | MUST send a "250 OK" reply to a RSET command with no arguments. A | |||
reset command may be issued by the client at any time. It is | reset command may be issued by the client at any time. It is | |||
effectively equivalent to a NOOP (i.e., if has no effect) if issued | effectively equivalent to a NOOP (i.e., it has no effect) if issued | |||
immediately after EHLO, before EHLO is issued in the session, after | immediately after EHLO, before EHLO is issued in the session, after | |||
an end-of-data indicator has been sent and acknowledged, or | an end-of-data indicator has been sent and acknowledged, or | |||
immediately before a QUIT. An SMTP server MUST NOT close the | immediately before a QUIT. An SMTP server MUST NOT close the | |||
connection as the result of receiving a RSET; that action is reserved | connection as the result of receiving a RSET; that action is reserved | |||
for QUIT (see section 4.1.1.10). | for QUIT (see Section 4.1.1.10). | |||
Since EHLO implies some additional processing and response by the | Since EHLO implies some additional processing and response by the | |||
server, RSET will normally be more efficient than reissuing that | server, RSET will normally be more efficient than reissuing that | |||
command, even though the formal semantics are the same. | command, even though the formal semantics are the same. | |||
There are circumstances, contrary to the intent of this | There are circumstances, contrary to the intent of this | |||
specification, in which an SMTP server may receive an indication that | specification, in which an SMTP server may receive an indication that | |||
the underlying TCP connection has been closed or reset. To preserve | the underlying TCP connection has been closed or reset. To preserve | |||
the robustness of the mail system, SMTP servers SHOULD be prepared | the robustness of the mail system, SMTP servers SHOULD be prepared | |||
for this condition and SHOULD treat it as if a QUIT had been received | for this condition and SHOULD treat it as if a QUIT had been received | |||
before the connection disappeared. | before the connection disappeared. | |||
Syntax: | Syntax: | |||
"RSET" CRLF | ||||
4.1.1.6 VERIFY (VRFY) | rset = "RSET" CRLF | |||
4.1.1.6. VERIFY (VRFY) | ||||
This command asks the receiver to confirm that the argument | This command asks the receiver to confirm that the argument | |||
identifies a user or mailbox. If it is a user name, information is | identifies a user or mailbox. If it is a user name, information is | |||
returned as specified in section 3.5. | returned as specified in Section 3.5. | |||
This command has no effect on the reverse-path buffer, the forward- | This command has no effect on the reverse-path buffer, the forward- | |||
path buffer, or the mail data buffer. | path buffer, or the mail data buffer. | |||
Syntax: | Syntax: | |||
"VRFY" SP String CRLF | ||||
4.1.1.7 EXPAND (EXPN) | vrfy = "VRFY" SP String CRLF | |||
4.1.1.7. EXPAND (EXPN) | ||||
This command asks the receiver to confirm that the argument | This command asks the receiver to confirm that the argument | |||
identifies a mailing list, and if so, to return the membership of | identifies a mailing list, and if so, to return the membership of | |||
that list. If the command is successful, a reply is returned | that list. If the command is successful, a reply is returned | |||
containing information as described in section 3.5. This reply will | containing information as described in Section 3.5. This reply will | |||
have multiple lines except in the trivial case of a one-member list. | have multiple lines except in the trivial case of a one-member list. | |||
This command has no effect on the reverse-path buffer, the forward- | This command has no effect on the reverse-path buffer, the forward- | |||
path buffer, or the mail data buffer and may be issued at any time. | path buffer, or the mail data buffer and may be issued at any time. | |||
Syntax: | Syntax: | |||
"EXPN" SP String CRLF | ||||
4.1.1.8 HELP (HELP) | expn = "EXPN" SP String CRLF | |||
4.1.1.8. HELP (HELP) | ||||
This command causes the server to send helpful information to the | This command causes the server to send helpful information to the | |||
client. The command MAY take an argument (e.g., any command name) | client. The command MAY take an argument (e.g., any command name) | |||
and return more specific information as a response. | and return more specific information as a response. | |||
This command has no effect on the reverse-path buffer, the forward- | This command has no effect on the reverse-path buffer, the forward- | |||
path buffer, or the mail data buffer and may be issued at any time. | path buffer, or the mail data buffer and may be issued at any time. | |||
SMTP servers SHOULD support HELP without arguments and MAY support it | SMTP servers SHOULD support HELP without arguments and MAY support it | |||
with arguments. | with arguments. | |||
Syntax: | Syntax: | |||
"HELP" [ SP String ] CRLF | ||||
4.1.1.9 NOOP (NOOP) | help = "HELP" [ SP String ] CRLF | |||
4.1.1.9. NOOP (NOOP) | ||||
This command does not affect any parameters or previously entered | This command does not affect any parameters or previously entered | |||
commands. It specifies no action other than that the receiver send | commands. It specifies no action other than that the receiver send a | |||
an OK reply. | "250 OK" reply. | |||
This command has no effect on the reverse-path buffer, the forward- | This command has no effect on the reverse-path buffer, the forward- | |||
path buffer, or the mail data buffer and may be issued at any time. | path buffer, or the mail data buffer and may be issued at any time. | |||
If a parameter string is specified, servers SHOULD ignore it. | If a parameter string is specified, servers SHOULD ignore it. | |||
Syntax: | Syntax: | |||
"NOOP" [ SP String ] CRLF | ||||
4.1.1.10 QUIT (QUIT) | noop = "NOOP" [ SP String ] CRLF | |||
This command specifies that the receiver MUST send an OK reply, and | 4.1.1.10. QUIT (QUIT) | |||
then close the transmission channel. | ||||
This command specifies that the receiver MUST send a "221 OK" reply, | ||||
and then close the transmission channel. | ||||
The receiver MUST NOT intentionally close the transmission channel | The receiver MUST NOT intentionally close the transmission channel | |||
until it receives and replies to a QUIT command (even if there was an | until it receives and replies to a QUIT command (even if there was an | |||
error). The sender MUST NOT intentionally close the transmission | error). The sender MUST NOT intentionally close the transmission | |||
channel until it sends a QUIT command and SHOULD wait until it | channel until it sends a QUIT command and SHOULD wait until it | |||
receives the reply (even if there was an error response to a previous | receives the reply (even if there was an error response to a previous | |||
command). If the connection is closed prematurely due to violations | command). If the connection is closed prematurely due to violations | |||
of the above or system or network failure, the server MUST cancel any | of the above or system or network failure, the server MUST cancel any | |||
pending transaction, but not undo any previously completed | pending transaction, but not undo any previously completed | |||
transaction, and generally MUST act as if the command or transaction | transaction, and generally MUST act as if the command or transaction | |||
in progress had received a temporary error (i.e., a 4yz response). | in progress had received a temporary error (i.e., a 4yz response). | |||
The QUIT command may be issued at any time. | The QUIT command may be issued at any time. Any current uncompleted | |||
mail transaction will be aborted. | ||||
Syntax: | Syntax: | |||
"QUIT" CRLF | ||||
4.1.2 Command Argument Syntax | quit = "QUIT" CRLF | |||
The syntax of the argument fields of the above commands (using the | 4.1.1.11. Mail-parameter and Rcpt-parameter Error Responses | |||
syntax specified in [8] where applicable) is given below. Some of | ||||
the productions given below are used only in conjunction with source | If the server SMTP does not recognize or cannot implement one or more | |||
routes as described in appendix C. Terminals not defined in this | of the parameters associated with a particular MAIL FROM or RCPT TO | |||
document, such as ALPHA, DIGIT, SP, CR, LF, CRLF, are as defined in | command, it will return code 555. | |||
the "core" syntax [8 (section 6)] or in the message format syntax | ||||
[32]. | If for some reason the server is temporarily unable to accommodate | |||
one or more of the parameters associated with a MAIL FROM or RCPT TO | ||||
command, and if the definition of the specific parameter does not | ||||
mandate the use of another code, it should return code 455. | ||||
Errors specific to particular parameters and their values will be | ||||
specified in the parameter's defining RFC. | ||||
4.1.2. Command Argument Syntax | ||||
The syntax of the argument clauses of the above commands (using the | ||||
syntax specified in RFC 5234 [5] where applicable) is given below. | ||||
Some of the productions given below are used only in conjunction with | ||||
source routes as described in Appendix C. Terminals not defined in | ||||
this document, such as ALPHA, DIGIT, SP, CR, LF, CRLF, are as defined | ||||
in the "core" syntax in RFC 5234 [5] (section 6)] or in the message | ||||
format syntax in RFC2822 [11]. | ||||
Reverse-path = Path / "<>" | ||||
Reverse-path = Path | ||||
Forward-path = Path | Forward-path = Path | |||
Path = "<" [ A-d-l ":" ] Mailbox ">" | Path = "<" [ A-d-l ":" ] Mailbox ">" | |||
A-d-l = At-domain *( "," A-d-l ) | ||||
; Note that this form, the so-called "source route", | A-d-l = At-domain *( "," At-domain ) | |||
; MUST BE accepted, SHOULD NOT be generated, and SHOULD be | ; Note that this form, the so-called "source | |||
; ignored. | ; route", MUST BE accepted, SHOULD NOT be | |||
At-domain = "@" domain | ; generated, and SHOULD be ignored. | |||
At-domain = "@" Domain | ||||
Mail-parameters = esmtp-param *(SP esmtp-param) | Mail-parameters = esmtp-param *(SP esmtp-param) | |||
Rcpt-parameters = esmtp-param *(SP esmtp-param) | Rcpt-parameters = esmtp-param *(SP esmtp-param) | |||
esmtp-param = esmtp-keyword ["=" esmtp-value] | esmtp-param = esmtp-keyword ["=" esmtp-value] | |||
esmtp-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-") | esmtp-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-") | |||
esmtp-value = 1*(%d33-60 / %d62-127) | ||||
; any CHAR excluding "=", SP, and control characters | esmtp-value = 1*(%d33-60 / %d62-126) | |||
; any CHAR excluding "=", SP, and control | ||||
; characters. If this string is an email address, | ||||
; i.e., a Mailbox, then the "xtext" syntax [12] | ||||
; SHOULD be used. | ||||
Keyword = Ldh-str | Keyword = Ldh-str | |||
Argument = Atom | Argument = Atom | |||
Domain = (sub-domain 1*("." sub-domain)) / address-literal | ||||
Domain = sub-domain *("." sub-domain) | ||||
sub-domain = Let-dig [Ldh-str] | sub-domain = Let-dig [Ldh-str] | |||
address-literal = "[" IPv4-address-literal / | Let-dig = ALPHA / DIGIT | |||
Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig | ||||
address-literal = "[" ( IPv4-address-literal / | ||||
IPv6-address-literal / | IPv6-address-literal / | |||
General-address-literal "]" | General-address-literal ) "]" | |||
; See section 4.1.3 | ; See Section 4.1.3 | |||
Mailbox = Local-part "@" Domain | Mailbox = Local-part "@" ( Domain / address-literal ) | |||
Local-part = Dot-string / Quoted-string | Local-part = Dot-string / Quoted-string | |||
; MAY be case-sensitive | ; MAY be case-sensitive | |||
Dot-string = Atom *("." Atom) | Dot-string = Atom *("." Atom) | |||
Atom = 1*atext | Atom = 1*atext | |||
Quoted-string = DQUOTE *qcontent DQUOTE | Quoted-string = DQUOTE *qcontentSMTP DQUOTE | |||
QcontentSMTP = qtextSMTP / quoted-pairSMTP | ||||
quoted-pairSMTP = %d92 %d32-126 | ||||
; i.e., backslash followed by any ASCII | ||||
; graphic (including itself) or SPace | ||||
qtextSMTP = %d32-33 / %d35-91 / %d93-126 | ||||
; i.e., within a quoted string, any | ||||
; ASCII graphic or space is permitted | ||||
; without blackslash-quoting except | ||||
; double-quote and the backslash itself. | ||||
String = Atom / Quoted-string | String = Atom / Quoted-string | |||
While the above definition for Local-part is relatively permissive, | While the above definition for Local-part is relatively permissive, | |||
for maximum interoperability, a host that expects to receive mail | for maximum interoperability, a host that expects to receive mail | |||
SHOULD avoid defining mailboxes where the Local-part requires (or | SHOULD avoid defining mailboxes where the Local-part requires (or | |||
uses) the Quoted-string form or where the Local-part is case- | uses) the Quoted-string form or where the Local-part is case- | |||
sensitive. For any purposes that require generating or comparing | sensitive. For any purposes that require generating or comparing | |||
Local-parts (e.g., to specific mailbox names), all quoted forms MUST | Local-parts (e.g., to specific mailbox names), all quoted forms MUST | |||
be treated as equivalent and the sending system SHOULD transmit the | be treated as equivalent and the sending system SHOULD transmit the | |||
skipping to change at page 37, line 49 | skipping to change at page 43, line 30 | |||
Systems MUST NOT define mailboxes in such a way as to require the use | Systems MUST NOT define mailboxes in such a way as to require the use | |||
in SMTP of non-ASCII characters (octets with the high order bit set | in SMTP of non-ASCII characters (octets with the high order bit set | |||
to one) or ASCII "control characters" (decimal value 0-31 and 127). | to one) or ASCII "control characters" (decimal value 0-31 and 127). | |||
These characters MUST NOT be used in MAIL or RCPT commands or other | These characters MUST NOT be used in MAIL or RCPT commands or other | |||
commands that require mailbox names. | commands that require mailbox names. | |||
Note that the backslash, "\", is a quote character, which is used to | Note that the backslash, "\", is a quote character, which is used to | |||
indicate that the next character is to be used literally (instead of | indicate that the next character is to be used literally (instead of | |||
its normal interpretation). For example, "Joe\,Smith" indicates a | its normal interpretation). For example, "Joe\,Smith" indicates a | |||
single nine character user field with the comma being the fourth | single nine character user name string with the comma being the | |||
character of the field. | fourth character of that string. | |||
To promote interoperability and consistent with long-standing | To promote interoperability and consistent with long-standing | |||
guidance about conservative use of the DNS in naming and applications | guidance about conservative use of the DNS in naming and applications | |||
(e.g., see section 2.3.1 of the base DNS document, RFC1035 [22]), | (e.g., see section 2.3.1 of the base DNS document, RFC1035 [7]), | |||
characters outside the set of alphas, digits, and hyphen MUST NOT | characters outside the set of alphabetic characters, digits, and | |||
appear in domain name labels for SMTP clients or servers. In | hyphen MUST NOT appear in domain name labels for SMTP clients or | |||
particular, the underscore character is not permitted. SMTP servers | servers. In particular, the underscore character is not permitted. | |||
that receive a command in which invalid character codes have been | SMTP servers that receive a command in which invalid character codes | |||
employed, and for which there are no other reasons for rejection, | have been employed, and for which there are no other reasons for | |||
MUST reject that command with a 501 response. | rejection, MUST reject that command with a 501 response (this rule, | |||
like others, could be overridden by appropriate SMTP extensions). | ||||
4.1.3 Address Literals | 4.1.3. Address Literals | |||
Sometimes a host is not known to the domain name system and | Sometimes a host is not known to the domain name system and | |||
communication (and, in particular, communication to report and repair | communication (and, in particular, communication to report and repair | |||
the error) is blocked. To bypass this barrier a special literal form | the error) is blocked. To bypass this barrier a special literal form | |||
of the address is allowed as an alternative to a domain name. For | of the address is allowed as an alternative to a domain name. For | |||
IPv4 addresses, this form uses four small decimal integers separated | IPv4 addresses, this form uses four small decimal integers separated | |||
by dots and enclosed by brackets such as [123.255.37.2], which | by dots and enclosed by brackets such as [123.255.37.2], which | |||
indicates an (IPv4) Internet Address in sequence-of-octets form. For | indicates an (IPv4) Internet Address in sequence-of-octets form. For | |||
IPv6 and other forms of addressing that might eventually be | IPv6 and other forms of addressing that might eventually be | |||
standardized, the form consists of a standardized "tag" that | standardized, the form consists of a standardized "tag" that | |||
identifies the address syntax, a colon, and the address itself, in a | identifies the address syntax, a colon, and the address itself, in a | |||
format specified as part of the IPv6 standards [17]. | format specified as part of the IPv6 standards (RFC4291 [6]). | |||
Specifically: | Specifically: | |||
IPv4-address-literal = Snum 3("." Snum) | IPv4-address-literal = Snum 3("." Snum) | |||
IPv6-address-literal = "IPv6:" IPv6-addr | IPv6-address-literal = "IPv6:" IPv6-addr | |||
General-address-literal = Standardized-tag ":" 1*dcontent | General-address-literal = Standardized-tag ":" 1*dcontent | |||
Standardized-tag = Ldh-str | ||||
; MUST be specified in a standards-track RFC | Standardized-tag ; MUST be specified in a standards-track RFC | |||
; and registered with IANA | ; and registered with IANA | |||
Snum = 1*3DIGIT ; representing a decimal integer | Snum = 1*3DIGIT | |||
; representing a decimal integer | ||||
; value in the range 0 through 255 | ; value in the range 0 through 255 | |||
Let-dig = ALPHA / DIGIT | ||||
Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig | ||||
IPv6-addr = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp | IPv6-addr = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp | |||
IPv6-hex = 1*4HEXDIG | IPv6-hex = 1*4HEXDIG | |||
IPv6-full = IPv6-hex 7(":" IPv6-hex) | IPv6-full = IPv6-hex 7(":" IPv6-hex) | |||
IPv6-comp = [IPv6-hex *5(":" IPv6-hex)] "::" [IPv6-hex *5(":" | IPv6-comp = [IPv6-hex *5(":" IPv6-hex)] "::" [IPv6-hex *5(":" | |||
IPv6-hex)] | IPv6-hex)] | |||
; The "::" represents at least 2 16-bit groups of zeros | ; The "::" represents at least 2 16-bit groups of | |||
; No more than 6 groups in addition to the "::" may be | ; zeros. No more than 6 groups in addition to the | |||
; present | ; "::" may be present. | |||
IPv6v4-full = IPv6-hex 5(":" IPv6-hex) ":" IPv4-address-literal | IPv6v4-full = IPv6-hex 5(":" IPv6-hex) ":" IPv4-address-literal | |||
IPv6v4-comp = [IPv6-hex *3(":" IPv6-hex)] "::" | IPv6v4-comp = [IPv6-hex *3(":" IPv6-hex)] "::" | |||
[IPv6-hex *3(":" IPv6-hex) ":"] IPv4-address-literal | [IPv6-hex *3(":" IPv6-hex) ":"] | |||
; The "::" represents at least 2 16-bit groups of zeros | IPv4-address-literal | |||
; No more than 4 groups in addition to the "::" and | ; The "::" represents at least 2 16-bit groups of | |||
; IPv4-address-literal may be present | ; zeros. No more than 4 groups in addition to the | |||
; "::" and IPv4-address-literal may be present. | ||||
4.1.4 Order of Commands | 4.1.4. Order of Commands | |||
There are restrictions on the order in which these commands may be | There are restrictions on the order in which these commands may be | |||
used. | used. | |||
A session that will contain mail transactions MUST first be | A session that will contain mail transactions MUST first be | |||
initialized by the use of the EHLO command. An SMTP server SHOULD | initialized by the use of the EHLO command. An SMTP server SHOULD | |||
accept commands for non-mail transactions (e.g., VRFY or EXPN) | accept commands for non-mail transactions (e.g., VRFY or EXPN) | |||
without this initialization. | without this initialization. | |||
An EHLO command MAY be issued by a client later in the session. If | An EHLO command MAY be issued by a client later in the session. If | |||
it is issued after the session begins, the SMTP server MUST clear all | it is issued after the session begins and the EHLO command is | |||
buffers and reset the state exactly as if a RSET command had been | acceptable to the SMTP server, the SMTP server MUST clear all buffers | |||
issued. In other words, the sequence of RSET followed immediately by | and reset the state exactly as if a RSET command had been issued. In | |||
EHLO is redundant, but not harmful other than in the performance cost | other words, the sequence of RSET followed immediately by EHLO is | |||
of executing unnecessary commands. | redundant, but not harmful other than in the performance cost of | |||
executing unnecessary commands. | ||||
If the EHLO command is not acceptable to the SMTP server, 501, 500, | If the EHLO command is not acceptable to the SMTP server, 501, 500, | |||
or 502 failure replies MUST be returned as appropriate. The SMTP | 502, or 550 failure replies MUST be returned as appropriate. The | |||
server MUST stay in the same state after transmitting these replies | SMTP server MUST stay in the same state after transmitting these | |||
that it was in before the EHLO was received. | replies that it was in before the EHLO was received. | |||
The SMTP client MUST, if possible, ensure that the domain parameter | The SMTP client MUST, if possible, ensure that the domain parameter | |||
to the EHLO command is a valid principal host name (not a CNAME or MX | to the EHLO command is a primary host name as specified for this | |||
name) for its host. If this is not possible (e.g., when the client's | command in Section 2.3.5. If this is not possible (e.g., when the | |||
address is dynamically assigned and the client does not have an | client's address is dynamically assigned and the client does not have | |||
obvious name), an address literal SHOULD be substituted for the | an obvious name), an address literal SHOULD be substituted for the | |||
domain name and supplemental information provided that will assist in | domain name. | |||
identifying the client. | ||||
An SMTP server MAY verify that the domain name parameter in the EHLO | An SMTP server MAY verify that the domain name argument in the EHLO | |||
command actually corresponds to the IP address of the client. | command actually corresponds to the IP address of the client. | |||
However, the server MUST NOT refuse to accept a message for this | However, if the verification fails the server MUST NOT refuse to | |||
reason if the verification fails: the information about verification | accept a message on that basis. Information captured in the | |||
failure is for logging and tracing only. | verification attempt is for logging and tracing purposes. Note that | |||
this prohibition applies to matching of the parameter to its IP | ||||
address only; see Section 7.9 for a more extensive discussion of | ||||
rejecting incoming connections or mail messages. | ||||
The NOOP, HELP, EXPN, VRFY, and RSET commands can be used at any time | The NOOP, HELP, EXPN, VRFY, and RSET commands can be used at any time | |||
during a session, or without previously initializing a session. SMTP | during a session, or without previously initializing a session. SMTP | |||
servers SHOULD process these normally (that is, not return a 503 | servers SHOULD process these normally (that is, not return a 503 | |||
code) even if no EHLO command has yet been received; clients SHOULD | code) even if no EHLO command has yet been received; clients SHOULD | |||
open a session with EHLO before sending these commands. | open a session with EHLO before sending these commands. | |||
If these rules are followed, the example in RFC 821 that shows "550 | If these rules are followed, the example in RFC 821 that shows "550 | |||
access denied to you" in response to an EXPN command is incorrect | access denied to you" in response to an EXPN command is incorrect | |||
unless an EHLO command precedes the EXPN or the denial of access is | unless an EHLO command precedes the EXPN or the denial of access is | |||
based on the client's IP address or other authentication or | based on the client's IP address or other authentication or | |||
authorization-determining mechanisms. | authorization-determining mechanisms. | |||
The MAIL command (or the obsolete SEND, SOML, or SAML commands) | The MAIL command (or the obsolete SEND, SOML, or SAML commands) | |||
begins a mail transaction. Once started, a mail transaction consists | begins a mail transaction. Once started, a mail transaction consists | |||
of a transaction beginning command, one or more RCPT commands, and a | of a transaction beginning command, one or more RCPT commands, and a | |||
DATA command, in that order. A mail transaction may be aborted by | DATA command, in that order. A mail transaction may be aborted by | |||
the RSET (or a new EHLO) command. There may be zero or more | the RSET, a new EHLO, or the QUIT command. There may be zero or more | |||
transactions in a session. MAIL (or SEND, SOML, or SAML) MUST NOT be | transactions in a session. MAIL (or SEND, SOML, or SAML) MUST NOT be | |||
sent if a mail transaction is already open, i.e., it should be sent | sent if a mail transaction is already open, i.e., it should be sent | |||
only if no mail transaction had been started in the session, or it | only if no mail transaction had been started in the session, or if | |||
the previous one successfully concluded with a successful DATA | the previous one successfully concluded with a successful DATA | |||
command, or if the previous one was aborted with a RSET. | command, or if the previous one was aborted, e.g., with a RSET or new | |||
EHLO. | ||||
If the transaction beginning command argument is not acceptable, a | If the transaction beginning command argument is not acceptable, a | |||
501 failure reply MUST be returned and the SMTP server MUST stay in | 501 failure reply MUST be returned and the SMTP server MUST stay in | |||
the same state. If the commands in a transaction are out of order to | the same state. If the commands in a transaction are out of order to | |||
the degree that they cannot be processed by the server, a 503 failure | the degree that they cannot be processed by the server, a 503 failure | |||
reply MUST be returned and the SMTP server MUST stay in the same | reply MUST be returned and the SMTP server MUST stay in the same | |||
state. | state. | |||
The last command in a session MUST be the QUIT command. The QUIT | The last command in a session MUST be the QUIT command. The QUIT | |||
command cannot be used at any other time in a session, but SHOULD be | command SHOULD be used by the client SMTP to request connection | |||
used by the client SMTP to request connection closure, even when no | closure, even when no session opening command was sent and accepted. | |||
session opening command was sent and accepted. | ||||
4.1.5 Private-use Commands | 4.1.5. Private-use Commands | |||
As specified in section 2.2.2, commands starting in "X" may be used | As specified in Section 2.2.2, commands starting in "X" may be used | |||
by bilateral agreement between the client (sending) and server | by bilateral agreement between the client (sending) and server | |||
(receiving) SMTP agents. An SMTP server that does not recognize such | (receiving) SMTP agents. An SMTP server that does not recognize such | |||
a command is expected to reply with "500 Command not recognized". An | a command is expected to reply with "500 Command not recognized". An | |||
extended SMTP server MAY list the feature names associated with these | extended SMTP server MAY list the feature names associated with these | |||
private commands in the response to the EHLO command. | private commands in the response to the EHLO command. | |||
Commands sent or accepted by SMTP systems that do not start with "X" | Commands sent or accepted by SMTP systems that do not start with "X" | |||
MUST conform to the requirements of section 2.2.2. | MUST conform to the requirements of Section 2.2.2. | |||
4.2 SMTP Replies | 4.2. SMTP Replies | |||
Replies to SMTP commands serve to ensure the synchronization of | Replies to SMTP commands serve to ensure the synchronization of | |||
requests and actions in the process of mail transfer and to guarantee | requests and actions in the process of mail transfer and to guarantee | |||
that the SMTP client always knows the state of the SMTP server. | that the SMTP client always knows the state of the SMTP server. | |||
Every command MUST generate exactly one reply. | Every command MUST generate exactly one reply. | |||
The details of the command-reply sequence are described in section | The details of the command-reply sequence are described in | |||
4.3. | Section 4.3. | |||
An SMTP reply consists of a three digit number (transmitted as three | An SMTP reply consists of a three digit number (transmitted as three | |||
numeric characters) followed by some text unless specified otherwise | numeric characters) followed by some text unless specified otherwise | |||
in this document. The number is for use by automata to determine | in this document. The number is for use by automata to determine | |||
what state to enter next; the text is for the human user. The three | what state to enter next; the text is for the human user. The three | |||
digits contain enough encoded information that the SMTP client need | digits contain enough encoded information that the SMTP client need | |||
not examine the text and may either discard it or pass it on to the | not examine the text and may either discard it or pass it on to the | |||
user, as appropriate. Exceptions are as noted elsewhere in this | user, as appropriate. Exceptions are as noted elsewhere in this | |||
document. In particular, the 220, 221, 251, 421, and 551 reply codes | document. In particular, the 220, 221, 251, 421, and 551 reply codes | |||
are associated with message text that must be parsed and interpreted | are associated with message text that must be parsed and interpreted | |||
by machines. In the general case, the text may be receiver dependent | by machines. In the general case, the text may be receiver dependent | |||
and context dependent, so there are likely to be varying texts for | and context dependent, so there are likely to be varying texts for | |||
each reply code. A discussion of the theory of reply codes is given | each reply code. A discussion of the theory of reply codes is given | |||
in section 4.2.1. Formally, a reply is defined to be the sequence: a | in Section 4.2.1. Formally, a reply is defined to be the sequence: a | |||
three-digit code, <SP>, one line of text, and <CRLF>, or a multiline | three-digit code, <SP>, one line of text, and <CRLF>, or a multiline | |||
reply (as defined in section 4.2.1). Since, in violation of this | reply (as defined in the same section). Since, in violation of this | |||
specification, the text is sometimes not sent, clients which do not | specification, the text is sometimes not sent, clients which do not | |||
receive it SHOULD be prepared to process the code alone (with or | receive it SHOULD be prepared to process the code alone (with or | |||
without a trailing space character). Only the EHLO, EXPN, and HELP | without a trailing space character). Only the EHLO, EXPN, and HELP | |||
commands are expected to result in multiline replies in normal | commands are expected to result in multiline replies in normal | |||
circumstances, however, multiline replies are allowed for any | circumstances, however, multiline replies are allowed for any | |||
command. | command. | |||
In ABNF, server responses are: | In ABNF, server responses are: | |||
Greeting = "220 " Domain [ SP text ] CRLF | Greeting = ( "220 " (Domain / address-literal) [ SP text ] CRLF | |||
Reply-line = Reply-code [ SP text ] CRLF | ) / | |||
( "220-" (Domain / address-literal) [ SP text ] CRLF | ||||
*( "220-" [ text ] CRLF ) | ||||
"220" [ SP text ] CRLF ) | ||||
Reply-line = *( Reply-code "-" [ text ] CRLF ) | ||||
Reply-code [ SP text ] CRLF | ||||
Reply-code = %x32-35 %x30-35 %x30-39 | ||||
where "Greeting" appears only in the 220 response that announces that | where "Greeting" appears only in the 220 response that announces that | |||
the server is opening its part of the connection. | the server is opening its part of the connection. (Other possible | |||
server responses upon connection follow the syntax of Reply-line.) | ||||
An SMTP server SHOULD send only the reply codes listed in this | An SMTP server SHOULD send only the reply codes listed in this | |||
document. An SMTP server SHOULD use the text shown in the examples | document. An SMTP server SHOULD use the text shown in the examples | |||
whenever appropriate. | whenever appropriate. | |||
An SMTP client MUST determine its actions only by the reply code, not | An SMTP client MUST determine its actions only by the reply code, not | |||
by the text (except for the "change of address" 251 and 551 and, if | by the text (except for the "change of address" 251 and 551 and, if | |||
necessary, 220, 221, and 421 replies); in the general case, any text, | necessary, 220, 221, and 421 replies); in the general case, any text, | |||
including no text at all (although senders SHOULD NOT send bare | including no text at all (although senders SHOULD NOT send bare | |||
codes), MUST be acceptable. The space (blank) following the reply | codes), MUST be acceptable. The space (blank) following the reply | |||
skipping to change at page 42, line 14 | skipping to change at page 48, line 11 | |||
The list of codes that appears below MUST NOT be construed as | The list of codes that appears below MUST NOT be construed as | |||
permanent. While the addition of new codes should be a rare and | permanent. While the addition of new codes should be a rare and | |||
significant activity, with supplemental information in the textual | significant activity, with supplemental information in the textual | |||
part of the response being preferred, new codes may be added as the | part of the response being preferred, new codes may be added as the | |||
result of new Standards or Standards-track specifications. | result of new Standards or Standards-track specifications. | |||
Consequently, a sender-SMTP MUST be prepared to handle codes not | Consequently, a sender-SMTP MUST be prepared to handle codes not | |||
specified in this document and MUST do so by interpreting the first | specified in this document and MUST do so by interpreting the first | |||
digit only. | digit only. | |||
4.2.1 Reply Code Severities and Theory | In the absence of extensions negotiated with the client, SMTP servers | |||
MUST NOT send reply codes whose first digits are other than 2, 3, 4, | ||||
or 5. Clients that receive such out-of-range codes SHOULD normally | ||||
treat them as fatal errors and terminate the mail transaction. | ||||
4.2.1. Reply Code Severities and Theory | ||||
The three digits of the reply each have a special significance. The | The three digits of the reply each have a special significance. The | |||
first digit denotes whether the response is good, bad or incomplete. | first digit denotes whether the response is good, bad or incomplete. | |||
An unsophisticated SMTP client, or one that receives an unexpected | An unsophisticated SMTP client, or one that receives an unexpected | |||
code, will be able to determine its next action (proceed as planned, | code, will be able to determine its next action (proceed as planned, | |||
redo, retrench, etc.) by examining this first digit. An SMTP client | redo, retrench, etc.) by examining this first digit. An SMTP client | |||
that wants to know approximately what kind of error occurred (e.g., | that wants to know approximately what kind of error occurred (e.g., | |||
mail system error, command syntax error) may examine the second | mail system error, command syntax error) may examine the second | |||
digit. The third digit and any supplemental information that may be | digit. The third digit and any supplemental information that may be | |||
present is reserved for the finest gradation of information. | present is reserved for the finest gradation of information. | |||
There are five values for the first digit of the reply code: | There are four values for the first digit of the reply code: | |||
1yz Positive Preliminary reply | ||||
The command has been accepted, but the requested action is being | ||||
held in abeyance, pending confirmation of the information in this | ||||
reply. The SMTP client should send another command specifying | ||||
whether to continue or abort the action. Note: unextended SMTP | ||||
does not have any commands that allow this type of reply, and so | ||||
does not have continue or abort commands. | ||||
2yz Positive Completion reply | 2yz Positive Completion reply | |||
The requested action has been successfully completed. A new | The requested action has been successfully completed. A new | |||
request may be initiated. | request may be initiated. | |||
3yz Positive Intermediate reply | 3yz Positive Intermediate reply | |||
The command has been accepted, but the requested action is being | The command has been accepted, but the requested action is being | |||
held in abeyance, pending receipt of further information. The | held in abeyance, pending receipt of further information. The | |||
SMTP client should send another command specifying this | SMTP client should send another command specifying this | |||
information. This reply is used in command sequence groups (i.e., | information. This reply is used in command sequence groups (i.e., | |||
in DATA). | in DATA). | |||
4yz Transient Negative Completion reply | 4yz Transient Negative Completion reply | |||
The command was not accepted, and the requested action did not | The command was not accepted, and the requested action did not | |||
occur. However, the error condition is temporary and the action | occur. However, the error condition is temporary and the action | |||
may be requested again. The sender should return to the beginning | may be requested again. The sender should return to the beginning | |||
of the command sequence (if any). It is difficult to assign a | of the command sequence (if any). It is difficult to assign a | |||
meaning to "transient" when two different sites (receiver- and | meaning to "transient" when two different sites (receiver- and | |||
sender-SMTP agents) must agree on the interpretation. Each reply | sender-SMTP agents) must agree on the interpretation. Each reply | |||
in this category might have a different time value, but the SMTP | in this category might have a different time value, but the SMTP | |||
client is encouraged to try again. A rule of thumb to determine | client SHOULD try again. A rule of thumb to determine whether a | |||
whether a reply fits into the 4yz or the 5yz category (see below) | reply fits into the 4yz or the 5yz category (see below) is that | |||
is that replies are 4yz if they can be successful if repeated | replies are 4yz if they can be successful if repeated without any | |||
without any change in command form or in properties of the sender | change in command form or in properties of the sender or receiver | |||
or receiver (that is, the command is repeated identically and the | (that is, the command is repeated identically and the receiver | |||
receiver does not put up a new implementation.) | does not put up a new implementation.) | |||
5yz Permanent Negative Completion reply | 5yz Permanent Negative Completion reply | |||
The command was not accepted and the requested action did not | The command was not accepted and the requested action did not | |||
occur. The SMTP client is discouraged from repeating the exact | occur. The SMTP client SHOULD NOT repeat the exact request (in | |||
request (in the same sequence). Even some "permanent" error | the same sequence). Even some "permanent" error conditions can be | |||
conditions can be corrected, so the human user may want to direct | corrected, so the human user may want to direct the SMTP client to | |||
the SMTP client to reinitiate the command sequence by direct | reinitiate the command sequence by direct action at some point in | |||
action at some point in the future (e.g., after the spelling has | the future (e.g., after the spelling has been changed, or the user | |||
been changed, or the user has altered the account status). | has altered the account status). | |||
It is worth noting that the file transfer protocol (FTP [18]) uses a | ||||
very similar code architecture and that the SMTP codes are based on | ||||
the FTP model. However, SMTP uses a one-command, one-response model | ||||
(while FTP is asynchronous) and FTP's 1yz codes are not part of the | ||||
SMTP model. | ||||
The second digit encodes responses in specific categories: | The second digit encodes responses in specific categories: | |||
x0z Syntax: These replies refer to syntax errors, syntactically | x0z Syntax: These replies refer to syntax errors, syntactically | |||
correct commands that do not fit any functional category, and | correct commands that do not fit any functional category, and | |||
unimplemented or superfluous commands. | unimplemented or superfluous commands. | |||
x1z Information: These are replies to requests for information, | x1z Information: These are replies to requests for information, such | |||
such as status or help. | as status or help. | |||
x2z Connections: These are replies referring to the transmission | x2z Connections: These are replies referring to the transmission | |||
channel. | channel. | |||
x3z Unspecified. | x3z Unspecified. | |||
x4z Unspecified. | x4z Unspecified. | |||
x5z Mail system: These replies indicate the status of the receiver | x5z Mail system: These replies indicate the status of the receiver | |||
mail system vis-a-vis the requested transfer or other mail system | mail system vis-a-vis the requested transfer or other mail system | |||
skipping to change at page 44, line 27 | skipping to change at page 50, line 27 | |||
The format for multiline replies requires that every line, except the | The format for multiline replies requires that every line, except the | |||
last, begin with the reply code, followed immediately by a hyphen, | last, begin with the reply code, followed immediately by a hyphen, | |||
"-" (also known as minus), followed by text. The last line will | "-" (also known as minus), followed by text. The last line will | |||
begin with the reply code, followed immediately by <SP>, optionally | begin with the reply code, followed immediately by <SP>, optionally | |||
some text, and <CRLF>. As noted above, servers SHOULD send the <SP> | some text, and <CRLF>. As noted above, servers SHOULD send the <SP> | |||
if subsequent text is not sent, but clients MUST be prepared for it | if subsequent text is not sent, but clients MUST be prepared for it | |||
to be omitted. | to be omitted. | |||
For example: | For example: | |||
123-First line | 250-First line | |||
123-Second line | 250-Second line | |||
123-234 text beginning with numbers | 250-234 text beginning with numbers | |||
123 The last line | 250 The last line | |||
In many cases the SMTP client then simply needs to search for a line | In a multiline reply the reply code on each of the lines MUST be the | |||
beginning with the reply code followed by <SP> or <CRLF> and ignore | same. It is reasonable for the client to rely on this, so it can | |||
all preceding lines. In a few cases, there is important data for the | make processing decisions based on the code in any line, assuming | |||
client in the reply "text". The client will be able to identify | that all others will be the same. In a few cases, there is important | |||
these cases from the current context. | data for the client in the reply "text". The client will be able to | |||
identify these cases from the current context. | ||||
4.2.2 Reply Codes by Function Groups | 4.2.2. Reply Codes by Function Groups | |||
500 Syntax error, command unrecognized (This may include errors such | ||||
as command line too long) | ||||
500 Syntax error, command unrecognized | ||||
(This may include errors such as command line too long) | ||||
501 Syntax error in parameters or arguments | 501 Syntax error in parameters or arguments | |||
502 Command not implemented (see section 4.2.4) | ||||
502 Command not implemented (see Section 4.2.4) | ||||
503 Bad sequence of commands | 503 Bad sequence of commands | |||
504 Command parameter not implemented | 504 Command parameter not implemented | |||
211 System status, or system help reply | 211 System status, or system help reply | |||
214 Help message | ||||
(Information on how to use the receiver or the meaning of a | 214 Help message (Information on how to use the receiver or the | |||
particular non-standard command; this reply is useful only | meaning of a particular non-standard command; this reply is useful | |||
to the human user) | only to the human user) | |||
220 <domain> Service ready | 220 <domain> Service ready | |||
221 <domain> Service closing transmission channel | 221 <domain> Service closing transmission channel | |||
421 <domain> Service not available, closing transmission channel | 421 <domain> Service not available, closing transmission channel | |||
(This may be a reply to any command if the service knows it | (This may be a reply to any command if the service knows it must | |||
must shut down) | shut down) | |||
250 Requested mail action okay, completed | 250 Requested mail action okay, completed | |||
251 User not local; will forward to <forward-path> | ||||
(See section 3.4) | 251 User not local; will forward to <forward-path> (See Section 3.4) | |||
252 Cannot VRFY user, but will accept message and attempt | ||||
delivery | 252 Cannot VRFY user, but will accept message and attempt delivery | |||
(See section 3.5.3) | (See Section 3.5.3) | |||
450 Requested mail action not taken: mailbox unavailable | ||||
(e.g., mailbox busy) | 455 Server unable to accommodate parameters | |||
550 Requested action not taken: mailbox unavailable | ||||
(e.g., mailbox not found, no access, or command rejected | 555 MAIL FROM/RCPT TO parameters not recognized or not implemented | |||
for policy reasons) | ||||
450 Requested mail action not taken: mailbox unavailable (e.g., | ||||
mailbox busy or temporarily blocked for policy reasons) | ||||
550 Requested action not taken: mailbox unavailable (e.g., mailbox | ||||
not found, no access, or command rejected for policy reasons) | ||||
451 Requested action aborted: error in processing | 451 Requested action aborted: error in processing | |||
551 User not local; please try <forward-path> | ||||
(See section 3.4) | 551 User not local; please try <forward-path> (See Section 3.4) | |||
452 Requested action not taken: insufficient system storage | 452 Requested action not taken: insufficient system storage | |||
552 Requested mail action aborted: exceeded storage allocation | 552 Requested mail action aborted: exceeded storage allocation | |||
553 Requested action not taken: mailbox name not allowed | ||||
(e.g., mailbox syntax incorrect) | 553 Requested action not taken: mailbox name not allowed (e.g., | |||
mailbox syntax incorrect) | ||||
354 Start mail input; end with <CRLF>.<CRLF> | 354 Start mail input; end with <CRLF>.<CRLF> | |||
554 Transaction failed (Or, in the case of a connection-opening | 554 Transaction failed (Or, in the case of a connection-opening | |||
response, "No SMTP service here") | response, "No SMTP service here") | |||
4.2.3 Reply Codes in Numeric Order | 4.2.3. Reply Codes in Numeric Order | |||
211 System status, or system help reply | 211 System status, or system help reply | |||
214 Help message | ||||
(Information on how to use the receiver or the meaning of a | 214 Help message (Information on how to use the receiver or the | |||
particular non-standard command; this reply is useful only | meaning of a particular non-standard command; this reply is useful | |||
to the human user) | only to the human user) | |||
220 <domain> Service ready | 220 <domain> Service ready | |||
221 <domain> Service closing transmission channel | 221 <domain> Service closing transmission channel | |||
250 Requested mail action okay, completed | 250 Requested mail action okay, completed | |||
251 User not local; will forward to <forward-path> | ||||
(See section 3.4) | 251 User not local; will forward to <forward-path> (See Section 3.4) | |||
252 Cannot VRFY user, but will accept message and attempt | ||||
delivery | 252 Cannot VRFY user, but will accept message and attempt delivery | |||
(See section 3.5.3) | (See Section 3.5.3) | |||
354 Start mail input; end with <CRLF>.<CRLF> | 354 Start mail input; end with <CRLF>.<CRLF> | |||
421 <domain> Service not available, closing transmission channel | 421 <domain> Service not available, closing transmission channel | |||
(This may be a reply to any command if the service knows it | (This may be a reply to any command if the service knows it must | |||
must shut down) | shut down) | |||
450 Requested mail action not taken: mailbox unavailable | ||||
(e.g., mailbox busy) | 450 Requested mail action not taken: mailbox unavailable (e.g., | |||
mailbox busy or temporarily blocked for policy reasons)) | ||||
451 Requested action aborted: local error in processing | 451 Requested action aborted: local error in processing | |||
452 Requested action not taken: insufficient system storage | 452 Requested action not taken: insufficient system storage | |||
500 Syntax error, command unrecognized | ||||
(This may include errors such as command line too long) | 455 Server unable to accommodate parameters | |||
500 Syntax error, command unrecognized (This may include errors such | ||||
as command line too long) | ||||
501 Syntax error in parameters or arguments | 501 Syntax error in parameters or arguments | |||
502 Command not implemented (see section 4.2.4) | ||||
502 Command not implemented (see Section 4.2.4) | ||||
503 Bad sequence of commands | 503 Bad sequence of commands | |||
504 Command parameter not implemented | 504 Command parameter not implemented | |||
550 Requested action not taken: mailbox unavailable | ||||
(e.g., mailbox not found, no access, or command rejected | 550 Requested action not taken: mailbox unavailable (e.g., mailbox | |||
for policy reasons) | not found, no access, or command rejected for policy reasons) | |||
551 User not local; please try <forward-path> | ||||
(See section 3.4) | 551 User not local; please try <forward-path> (See Section 3.4) | |||
552 Requested mail action aborted: exceeded storage allocation | 552 Requested mail action aborted: exceeded storage allocation | |||
553 Requested action not taken: mailbox name not allowed | ||||
(e.g., mailbox syntax incorrect) | 553 Requested action not taken: mailbox name not allowed (e.g., | |||
mailbox syntax incorrect) | ||||
554 Transaction failed (Or, in the case of a connection-opening | 554 Transaction failed (Or, in the case of a connection-opening | |||
response, "No SMTP service here") | response, "No SMTP service here") | |||
4.2.4 Reply Code 502 | 555 MAIL FROM/RCPT TO parameters not recognized or not implemented | |||
4.2.4. Reply Code 502 | ||||
Questions have been raised as to when reply code 502 (Command not | Questions have been raised as to when reply code 502 (Command not | |||
implemented) SHOULD be returned in preference to other codes. 502 | implemented) SHOULD be returned in preference to other codes. 502 | |||
SHOULD be used when the command is actually recognized by the SMTP | SHOULD be used when the command is actually recognized by the SMTP | |||
server, but not implemented. If the command is not recognized, code | server, but not implemented. If the command is not recognized, code | |||
500 SHOULD be returned. Extended SMTP systems MUST NOT list | 500 SHOULD be returned. Extended SMTP systems MUST NOT list | |||
capabilities in response to EHLO for which they will return 502 (or | capabilities in response to EHLO for which they will return 502 (or | |||
500) replies. | 500) replies. | |||
4.2.5 Reply Codes After DATA and the Subsequent <CRLF>.<CRLF> | 4.2.5. Reply Codes After DATA and the Subsequent <CRLF>.<CRLF> | |||
When an SMTP server returns a positive completion status (2yz code) | When an SMTP server returns a positive completion status (2yz code) | |||
after the DATA command is completed with <CRLF>.<CRLF>, it accepts | after the DATA command is completed with <CRLF>.<CRLF>, it accepts | |||
responsibility for: | responsibility for: | |||
- delivering the message (if the recipient mailbox exists), or | o delivering the message (if the recipient mailbox exists), or | |||
- if attempts to deliver the message fail due to transient | o if attempts to deliver the message fail due to transient | |||
conditions, retrying delivery some reasonable number of times at | conditions, retrying delivery some reasonable number of times at | |||
intervals as specified in section 4.5.4. | intervals as specified in Section 4.5.4. | |||
- if attempts to deliver the message fail due to permanent | o if attempts to deliver the message fail due to permanent | |||
conditions, or if repeated attempts to deliver the message fail | conditions, or if repeated attempts to deliver the message fail | |||
due to transient conditions, returning appropriate notification to | due to transient conditions, returning appropriate notification to | |||
the sender of the original message (using the address in the SMTP | the sender of the original message (using the address in the SMTP | |||
MAIL command). | MAIL command). | |||
When an SMTP server returns a permanent error status (5yz) code after | When an SMTP server returns a temporary error status (4yz) code after | |||
the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make | the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make a | |||
any subsequent attempt to deliver that message. The SMTP client | subsequent attempt to deliver that message. The SMTP client retains | |||
retains responsibility for delivery of that message and may either | responsibility for delivery of that message and may either return it | |||
return it to the user or requeue it for a subsequent attempt (see | to the user or requeue it for a subsequent attempt (see | |||
section 4.5.4.1). | Section 4.5.4.1). | |||
The user who originated the message SHOULD be able to interpret the | The user who originated the message SHOULD be able to interpret the | |||
return of a transient failure status (by mail message or otherwise) | return of a transient failure status (by mail message or otherwise) | |||
as a non-delivery indication, just as a permanent failure would be | as a non-delivery indication, just as a permanent failure would be | |||
interpreted. I.e., if the client SMTP successfully handles these | interpreted. If the client SMTP successfully handles these | |||
conditions, the user will not receive such a reply. | conditions, the user will not receive such a reply. | |||
When an SMTP server returns a permanent error status (5yz) code after | When an SMTP server returns a permanent error status (5yz) code after | |||
the DATA command is completely with <CRLF>.<CRLF>, it MUST NOT make | the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make | |||
any subsequent attempt to deliver the message. As with temporary | any subsequent attempt to deliver the message. As with temporary | |||
error status codes, the SMTP client retains responsibility for the | error status codes, the SMTP client retains responsibility for the | |||
message, but SHOULD not again attempt delivery to the same server | message, but SHOULD not again attempt delivery to the same server | |||
without user review and intervention of the message. | without user review of the message and response and appropriate | |||
intervention. | ||||
4.3 Sequencing of Commands and Replies | 4.3. Sequencing of Commands and Replies | |||
4.3.1 Sequencing Overview | 4.3.1. Sequencing Overview | |||
The communication between the sender and receiver is an alternating | The communication between the sender and receiver is an alternating | |||
dialogue, controlled by the sender. As such, the sender issues a | dialogue, controlled by the sender. As such, the sender issues a | |||
command and the receiver responds with a reply. Unless other | command and the receiver responds with a reply. Unless other | |||
arrangements are negotiated through service extensions, the sender | arrangements are negotiated through service extensions, the sender | |||
MUST wait for this response before sending further commands. | MUST wait for this response before sending further commands. One | |||
important reply is the connection greeting. Normally, a receiver | ||||
One important reply is the connection greeting. Normally, a receiver | ||||
will send a 220 "Service ready" reply when the connection is | will send a 220 "Service ready" reply when the connection is | |||
completed. The sender SHOULD wait for this greeting message before | completed. The sender SHOULD wait for this greeting message before | |||
sending any commands. | sending any commands. | |||
Note: all the greeting-type replies have the official name (the | Note: all the greeting-type replies have the official name (the | |||
fully-qualified primary domain name) of the server host as the first | fully-qualified primary domain name) of the server host as the first | |||
word following the reply code. Sometimes the host will have no | word following the reply code. Sometimes the host will have no | |||
meaningful name. See 4.1.3 for a discussion of alternatives in these | meaningful name. See Section 4.1.3 for a discussion of alternatives | |||
situations. | in these situations. | |||
For example, | For example, | |||
220 ISIF.USC.EDU Service ready | 220 ISIF.USC.EDU Service ready | |||
or | or | |||
220 mail.foo.com SuperSMTP v 6.1.2 Service ready | ||||
220 mail.example.example.com SuperSMTP v 6.1.2 Service ready | ||||
or | or | |||
220 [10.0.0.1] Clueless host service ready | 220 [10.0.0.1] Clueless host service ready | |||
The table below lists alternative success and failure replies for | The table below lists alternative success and failure replies for | |||
each command. These SHOULD be strictly adhered to: a receiver may | each command. These SHOULD be strictly adhered to. A receiver MAY | |||
substitute text in the replies, but the meaning and action implied by | substitute text in the replies, but the meanings and actions implied | |||
the code numbers and by the specific command reply sequence cannot be | by the code numbers and by the specific command reply sequence MUST | |||
altered. | be preserved. | |||
4.3.2 Command-Reply Sequences | 4.3.2. Command-Reply Sequences | |||
Each command is listed with its usual possible replies. The prefixes | Each command is listed with its usual possible replies. The prefixes | |||
used before the possible replies are "I" for intermediate, "S" for | used before the possible replies are "I" for intermediate, "S" for | |||
success, and "E" for error. Since some servers may generate other | success, and "E" for error. Since some servers may generate other | |||
replies under special circumstances, and to allow for future | replies under special circumstances, and to allow for future | |||
extension, SMTP clients SHOULD, when possible, interpret only the | extension, SMTP clients SHOULD, when possible, interpret only the | |||
first digit of the reply and MUST be prepared to deal with | first digit of the reply and MUST be prepared to deal with | |||
unrecognized reply codes by interpreting the first digit only. | unrecognized reply codes by interpreting the first digit only. | |||
Unless extended using the mechanisms described in section 2.2, SMTP | Unless extended using the mechanisms described in Section 2.2, SMTP | |||
servers MUST NOT transmit reply codes to an SMTP client that are | servers MUST NOT transmit reply codes to an SMTP client that are | |||
other than three digits or that do not start in a digit between 2 and | other than three digits or that do not start in a digit between 2 and | |||
5 inclusive. | 5 inclusive. | |||
These sequencing rules and, in principle, the codes themselves, can | These sequencing rules and, in principle, the codes themselves, can | |||
be extended or modified by SMTP extensions offered by the server and | be extended or modified by SMTP extensions offered by the server and | |||
accepted (requested) by the client. | accepted (requested) by the client. However, if the target is more | |||
precise granularity in the codes, rather than codes for completely | ||||
new purposes, the system described in RFC 3463 [37] SHOULD be used in | ||||
preference to the invention of new codes. | ||||
In addition to the codes listed below, any SMTP command can return | In addition to the codes listed below, any SMTP command can return | |||
any of the following codes if the corresponding unusual circumstances | any of the following codes if the corresponding unusual circumstances | |||
are encountered: | are encountered: | |||
500 For the "command line too long" case or if the command name was | 500 For the "command line too long" case or if the command name was | |||
not recognized. Note that producing a "command not recognized" | not recognized. Note that producing a "command not recognized" | |||
error in response to the required subset of these commands is a | error in response to the required subset of these commands is a | |||
violation of this specification. | violation of this specification. Similarly, producing a "command | |||
too long" message for a command line shorter than 512 characters | ||||
would violate the provisions of Section 4.5.3.1.4. | ||||
501 Syntax error in command or arguments. In order to provide for | 501 Syntax error in command or arguments. In order to provide for | |||
future extensions, commands that are specified in this document as | future extensions, commands that are specified in this document as | |||
not accepting arguments (DATA, RSET, QUIT) SHOULD return a 501 | not accepting arguments (DATA, RSET, QUIT) SHOULD return a 501 | |||
message if arguments are supplied in the absence of EHLO- | message if arguments are supplied in the absence of EHLO- | |||
advertised extensions. | advertised extensions. | |||
421 Service shutting down and closing transmission channel | 421 Service shutting down and closing transmission channel | |||
Specific sequences are: | Specific sequences are: | |||
CONNECTION ESTABLISHMENT | CONNECTION ESTABLISHMENT | |||
S: 220 | S: 220 | |||
E: 554 | E: 554 | |||
EHLO or HELO | EHLO or HELO | |||
S: 250 | S: 250 | |||
E: 504, 550 | E: 504 (a conforming implementation could return this code only | |||
in fairly obscure cases), 550, 502 (permitted only with an old- | ||||
style server that does not support EHLO) | ||||
S: 250 | S: 250 | |||
E: 552, 451, 452, 550, 553, 503 | E: 552, 451, 452, 550, 553, 503, 455, 555 | |||
RCPT | RCPT | |||
S: 250, 251 (but see section 3.4 for discussion of 251 and 551) | ||||
E: 550, 551, 552, 553, 450, 451, 452, 503, 550 | S: 250, 251 (but see Section 3.4 for discussion of 251 and 551) | |||
E: 550, 551, 552, 553, 450, 451, 452, 503, 455, 555 | ||||
DATA | DATA | |||
I: 354 -> data -> S: 250 | I: 354 -> data -> S: 250 | |||
E: 552, 554, 451, 452 | E: 552, 554, 451, 452 | |||
E: 451, 554, 503 | ||||
E: 450, 550 (rejections for policy reasons) | ||||
E: 503, 554 | ||||
RSET | RSET | |||
S: 250 | S: 250 | |||
VRFY | VRFY | |||
S: 250, 251, 252 | S: 250, 251, 252 | |||
E: 550, 551, 553, 502, 504 | E: 550, 551, 553, 502, 504 | |||
EXPN | EXPN | |||
S: 250, 252 | S: 250, 252 | |||
E: 550, 500, 502, 504 | E: 550, 500, 502, 504 | |||
HELP | HELP | |||
S: 211, 214 | S: 211, 214 | |||
E: 502, 504 | E: 502, 504 | |||
NOOP | NOOP | |||
S: 250 | S: 250 | |||
QUIT | QUIT | |||
S: 221 | S: 221 | |||
4.4 Trace Information | 4.4. Trace Information | |||
When an SMTP server receives a message for delivery or further | When an SMTP server receives a message for delivery or further | |||
processing, it MUST insert trace ("time stamp" or "Received") | processing, it MUST insert trace ("time stamp" or "Received") | |||
information at the beginning of the message content, as discussed in | information at the beginning of the message content, as discussed in | |||
section 4.1.1.4. | Section 4.1.1.4. | |||
This line MUST be structured as follows: | This line MUST be structured as follows: | |||
- The FROM field, which MUST be supplied in an SMTP environment, | o The FROM clause, which MUST be supplied in an SMTP environment, | |||
SHOULD contain both (1) the name of the source host as presented | SHOULD contain both (1) the name of the source host as presented | |||
in the EHLO command and (2) an address literal containing the IP | in the EHLO command and (2) an address literal containing the IP | |||
address of the source, determined from the TCP connection. | address of the source, determined from the TCP connection. | |||
- The ID field MAY contain an "@" as suggested in RFC 822, but this | o The ID clause MAY contain an "@" as suggested in RFC 822, but this | |||
is not required. | is not required. | |||
- The FOR field MAY contain a list of <path> entries when multiple | o If the FOR clause appears, it MUST contain exactly one <path> | |||
RCPT commands have been given. This may raise some security | entry, even when multiple RCPT commands have been given. Multiple | |||
issues and is usually not desirable; see section 7.2. | <path>s raise some security issues and have been deprecated, see | |||
Section 7.2. | ||||
An Internet mail program MUST NOT change a Received: line that was | An Internet mail program MUST NOT change or delete a Received: line | |||
previously added to the message header. SMTP servers MUST prepend | that was previously added to the message header section. SMTP | |||
Received lines to messages; they MUST NOT change the order of | servers MUST prepend Received lines to messages; they MUST NOT change | |||
existing lines or insert Received lines in any other location. | the order of existing lines or insert Received lines in any other | |||
location. | ||||
As the Internet grows, comparability of Received fields is important | As the Internet grows, comparability of Received header fields is | |||
for detecting problems, especially slow relays. SMTP servers that | important for detecting problems, especially slow relays. SMTP | |||
create Received fields SHOULD use explicit offsets in the dates | servers that create Received header fields SHOULD use explicit | |||
(e.g., -0800), rather than time zone names of any type. Local time | offsets in the dates (e.g., -0800), rather than time zone names of | |||
(with an offset) is preferred to UT when feasible. This formulation | any type. Local time (with an offset) SHOULD be used rather than UT | |||
allows slightly more information about local circumstances to be | when feasible. This formulation allows slightly more information | |||
specified. If UT is needed, the receiver need merely do some simple | about local circumstances to be specified. If UT is needed, the | |||
arithmetic to convert the values. Use of UT loses information about | receiver need merely do some simple arithmetic to convert the values. | |||
the time zone-location of the server. If it is desired to supply a | Use of UT loses information about the time zone-location of the | |||
time zone name, it SHOULD be included in a comment. | server. If it is desired to supply a time zone name, it SHOULD be | |||
included in a comment. | ||||
When the delivery SMTP server makes the "final delivery" of a | When the delivery SMTP server makes the "final delivery" of a | |||
message, it inserts a return-path line at the beginning of the mail | message, it inserts a return-path line at the beginning of the mail | |||
data. This use of return-path is required; mail systems MUST support | data. This use of return-path is required; mail systems MUST support | |||
it. The return-path line preserves the information in the <reverse- | it. The return-path line preserves the information in the <reverse- | |||
path> from the MAIL command. Here, final delivery means the message | path> from the MAIL command. Here, final delivery means the message | |||
has left the SMTP environment. Normally, this would mean it had been | has left the SMTP environment. Normally, this would mean it had been | |||
delivered to the destination user or an associated mail drop, but in | delivered to the destination user or an associated mail drop, but in | |||
some cases it may be further processed and transmitted by another | some cases it may be further processed and transmitted by another | |||
mail system. | mail system. | |||
It is possible for the mailbox in the return path to be different | It is possible for the mailbox in the return path to be different | |||
from the actual sender's mailbox, for example, if error responses are | from the actual sender's mailbox, for example, if error responses are | |||
to be delivered to a special error handling mailbox rather than to | to be delivered to a special error handling mailbox rather than to | |||
the message sender. When mailing lists are involved, this | the message sender. When mailing lists are involved, this | |||
arrangement is common and useful as a means of directing errors to | arrangement is common and useful as a means of directing errors to | |||
the list maintainer rather than the message originator. | the list maintainer rather than the message originator. | |||
The text above implies that the final mail data will begin with a | The text above implies that the final mail data will begin with a | |||
return path line, followed by one or more time stamp lines. These | return path line, followed by one or more time stamp lines. These | |||
lines will be followed by the mail data headers and body [32]. | lines will be followed by the rest of the mail data: first the | |||
balance of the mail header section and then the body (RFC2822 [11]). | ||||
It is sometimes difficult for an SMTP server to determine whether or | It is sometimes difficult for an SMTP server to determine whether or | |||
not it is making final delivery since forwarding or other operations | not it is making final delivery since forwarding or other operations | |||
may occur after the message is accepted for delivery. Consequently, | may occur after the message is accepted for delivery. Consequently, | |||
any further (forwarding, gateway, or relay) systems MAY remove the | any further (forwarding, gateway, or relay) systems MAY remove the | |||
return path and rebuild the MAIL command as needed to ensure that | return path and rebuild the MAIL command as needed to ensure that | |||
exactly one such line appears in a delivered message. | exactly one such line appears in a delivered message. | |||
A message-originating SMTP system SHOULD NOT send a message that | A message-originating SMTP system SHOULD NOT send a message that | |||
already contains a Return-path header. SMTP servers performing a | already contains a Return-path header field. SMTP servers performing | |||
relay function MUST NOT inspect the message data, and especially not | a relay function MUST NOT inspect the message data, and especially | |||
to the extent needed to determine if Return-path headers are present. | not to the extent needed to determine if Return-path header fields | |||
SMTP servers making final delivery MAY remove Return-path headers | are present. SMTP servers making final delivery MAY remove Return- | |||
before adding their own. | path header fields before adding their own. | |||
The primary purpose of the Return-path is to designate the address to | The primary purpose of the Return-path is to designate the address to | |||
which messages indicating non-delivery or other mail system failures | which messages indicating non-delivery or other mail system failures | |||
are to be sent. For this to be unambiguous, exactly one return path | are to be sent. For this to be unambiguous, exactly one return path | |||
SHOULD be present when the message is delivered. Systems using RFC | SHOULD be present when the message is delivered. Systems using RFC | |||
822 syntax with non-SMTP transports SHOULD designate an unambiguous | 822 syntax with non-SMTP transports SHOULD designate an unambiguous | |||
address, associated with the transport envelope, to which error | address, associated with the transport envelope, to which error | |||
reports (e.g., non-delivery messages) should be sent. | reports (e.g., non-delivery messages) should be sent. | |||
Historical note: Text in RFC 822 that appears to contradict the use | Historical note: Text in RFC 822 that appears to contradict the use | |||
of the Return-path header (or the envelope reverse path address from | of the Return-path header field (or the envelope reverse path address | |||
the MAIL command) as the destination for error messages is not | from the MAIL command) as the destination for error messages is not | |||
applicable on the Internet. The reverse path address (as copied into | applicable on the Internet. The reverse path address (as copied into | |||
the Return-path) MUST be used as the target of any mail containing | the Return-path) MUST be used as the target of any mail containing | |||
delivery error messages. | delivery error messages. | |||
In particular: | In particular: | |||
- a gateway from SMTP->elsewhere SHOULD insert a return-path header, | o a gateway from SMTP -> elsewhere SHOULD insert a return-path | |||
unless it is known that the "elsewhere" transport also uses | header field, unless it is known that the "elsewhere" transport | |||
Internet domain addresses and maintains the envelope sender | also uses Internet domain addresses and maintains the envelope | |||
address separately. | sender address separately. | |||
- a gateway from elsewhere->SMTP SHOULD delete any return-path | o a gateway from elsewhere -> SMTP SHOULD delete any return-path | |||
header present in the message, and either copy that information to | header field present in the message, and either copy that | |||
the SMTP envelope or combine it with information present in the | information to the SMTP envelope or combine it with information | |||
envelope of the other transport system to construct the reverse | present in the envelope of the other transport system to construct | |||
path argument to the MAIL command in the SMTP envelope. | the reverse path argument to the MAIL command in the SMTP | |||
envelope. | ||||
The server must give special treatment to cases in which the | The server must give special treatment to cases in which the | |||
processing following the end of mail data indication is only | processing following the end of mail data indication is only | |||
partially successful. This could happen if, after accepting several | partially successful. This could happen if, after accepting several | |||
recipients and the mail data, the SMTP server finds that the mail | recipients and the mail data, the SMTP server finds that the mail | |||
data could be successfully delivered to some, but not all, of the | data could be successfully delivered to some, but not all, of the | |||
recipients. In such cases, the response to the DATA command MUST be | recipients. In such cases, the response to the DATA command MUST be | |||
an OK reply. However, the SMTP server MUST compose and send an | an OK reply. However, the SMTP server MUST compose and send an | |||
"undeliverable mail" notification message to the originator of the | "undeliverable mail" notification message to the originator of the | |||
message. | message. | |||
A single notification listing all of the failed recipients or | A single notification listing all of the failed recipients or | |||
separate notification messages MUST be sent for each failed | separate notification messages MUST be sent for each failed | |||
recipient. For economy of processing by the sender, the former is | recipient. For economy of processing by the sender, the former | |||
preferred when possible. All undeliverable mail notification | SHOULD be used when possible. Note that the key difference between | |||
messages are sent using the MAIL command (even if they result from | handling aliases (Section 3.9.1) and forwarding (this subsection) is | |||
processing the obsolete SEND, SOML, or SAML commands) and use a null | the change to the backward-pointing address in this case. All | |||
return path as discussed in section 3.7. | notification messages about undeliverable mail MUST be sent using the | |||
MAIL command (even if they result from processing the obsolete SEND, | ||||
SOML, or SAML commands) and MUST use a null return path as discussed | ||||
in Section 3.6. | ||||
The time stamp line and the return path line are formally defined as | The time stamp line and the return path line are formally defined as | |||
follows: | follows (the definitions for "FWS" and "CFWS" appear in RFC2822 | |||
[11]): | ||||
Return-path-line = "Return-Path:" FWS Reverse-path <CRLF> | Return-path-line = "Return-Path:" FWS Reverse-path <CRLF> | |||
Time-stamp-line = "Received:" FWS Stamp <CRLF> | Time-stamp-line = "Received:" FWS Stamp <CRLF> | |||
Stamp = From-domain By-domain Opt-info ";" FWS date-time | Stamp = From-domain By-domain Opt-info [CFWS] ";" | |||
FWS date-time | ||||
; where "date-time" is as defined in [32] | ; where "date-time" is as defined in RFC2822 [11] | |||
; but the "obs-" forms, especially two-digit | ; but the "obs-" forms, especially two-digit | |||
; years, are prohibited in SMTP and MUST NOT be used. | ; years, are prohibited in SMTP and MUST NOT be used. | |||
From-domain = "FROM" FWS Extended-Domain CFWS | From-domain = "FROM" FWS Extended-Domain | |||
By-domain = "BY" FWS Extended-Domain CFWS | By-domain = CFWS "BY" FWS Extended-Domain | |||
Extended-Domain = Domain / | Extended-Domain = Domain / | |||
( Domain FWS "(" TCP-info ")" ) / | ( Domain FWS "(" TCP-info ")" ) / | |||
( Address-literal FWS "(" TCP-info ")" ) | ( address-literal FWS "(" TCP-info ")" ) | |||
TCP-info = Address-literal / ( Domain FWS Address-literal ) | TCP-info = Address-literal / ( Domain FWS address-literal ) | |||
; Information derived by server from TCP connection | ; Information derived by server from TCP connection | |||
; not client EHLO. | ; not client EHLO. | |||
Opt-info = [Via] [With] [ID] [For] | Opt-info = [Via] [With] [ID] [For] | |||
[Additional-Registered-Clauses] | ||||
Via = "VIA" FWS Link CFWS | Via = CFWS "VIA" FWS Link | |||
With = "WITH" FWS Protocol CFWS | With = CFWS "WITH" FWS Protocol | |||
ID = "ID" FWS String / msg-id CFWS | ID = CFWS "ID" FWS ( Atom / msg-id ) | |||
; msg-id is defined in RFC2822 [11] | ||||
For = "FOR" FWS 1*( Path / Mailbox ) CFWS | For = CFWS "FOR" FWS ( Path / Mailbox ) | |||
Additional-Registered-Clauses = CFWS Atom FWS String | ||||
; Additional standard clauses may be added in this | ||||
; location by future standards and registration with | ||||
; IANA. SMTP servers SHOULD NOT use unregistered | ||||
; names. See Section 8. | ||||
Link = "TCP" / Addtl-Link | Link = "TCP" / Addtl-Link | |||
Addtl-Link = Atom | Addtl-Link = Atom | |||
; Additional standard names for links are registered with the | ; Additional standard names for links are | |||
; Internet Assigned Numbers Authority (IANA). "Via" is | ; registered with the Internet Assigned Numbers | |||
; primarily of value with non-Internet transports. SMTP | ; Authority (IANA). "Via" is primarily of value | |||
; servers SHOULD NOT use unregistered names. | ; with non-Internet transports. SMTP servers | |||
; SHOULD NOT use unregistered names. | ||||
Protocol = "ESMTP" / "SMTP" / Attdl-Protocol | Protocol = "ESMTP" / "SMTP" / Attdl-Protocol | |||
Attdl-Protocol = Atom | Attdl-Protocol = Atom | |||
; Additional standard names for protocols are registered with the | ; Additional standard names for protocols are | |||
; Internet Assigned Numbers Authority (IANA). SMTP servers | ; registered with the Internet Assigned Numbers | |||
; SHOULD NOT use unregistered names. | ; Authority (IANA) in the "mail parameters" | |||
; registry [9]. SMTP servers SHOULD NOT | ||||
; use unregistered names. | ||||
4.5 Additional Implementation Issues | 4.5. Additional Implementation Issues | |||
4.5.1 Minimum Implementation | 4.5.1. Minimum Implementation | |||
In order to make SMTP workable, the following minimum implementation | In order to make SMTP workable, the following minimum implementation | |||
is required for all receivers. The following commands MUST be | MUST be provided by all receivers. The following commands MUST be | |||
supported to conform to this specification: | supported to conform to this specification: | |||
EHLO | EHLO | |||
HELO | HELO | |||
RCPT | RCPT | |||
DATA | DATA | |||
RSET | RSET | |||
NOOP | NOOP | |||
QUIT | QUIT | |||
VRFY | VRFY | |||
Any system that includes an SMTP server supporting mail relaying or | Any system that includes an SMTP server supporting mail relaying or | |||
delivery MUST support the reserved mailbox "postmaster" as a case- | delivery MUST support the reserved mailbox "postmaster" as a case- | |||
insensitive local name. This postmaster address is not strictly | insensitive local name. This postmaster address is not strictly | |||
necessary if the server always returns 554 on connection opening (as | necessary if the server always returns 554 on connection opening (as | |||
described in section 3.1). The requirement to accept mail for | described in Section 3.1). The requirement to accept mail for | |||
postmaster implies that RCPT commands which specify a mailbox for | postmaster implies that RCPT commands which specify a mailbox for | |||
postmaster at any of the domains for which the SMTP server provides | postmaster at any of the domains for which the SMTP server provides | |||
mail service, as well as the special case of "RCPT TO:<Postmaster>" | mail service, as well as the special case of "RCPT TO:<Postmaster>" | |||
(with no domain specification), MUST be supported. | (with no domain specification), MUST be supported. | |||
SMTP systems are expected to make every reasonable effort to accept | SMTP systems are expected to make every reasonable effort to accept | |||
mail directed to Postmaster from any other system on the Internet. | mail directed to Postmaster from any other system on the Internet. | |||
In extreme cases --such as to contain a denial of service attack or | In extreme cases --such as to contain a denial of service attack or | |||
other breach of security-- an SMTP server may block mail directed to | other breach of security-- an SMTP server may block mail directed to | |||
Postmaster. However, such arrangements SHOULD be narrowly tailored | Postmaster. However, such arrangements SHOULD be narrowly tailored | |||
so as to avoid blocking messages which are not part of such attacks. | so as to avoid blocking messages which are not part of such attacks. | |||
4.5.2 Transparency | 4.5.2. Transparency | |||
Without some provision for data transparency, the character sequence | Without some provision for data transparency, the character sequence | |||
"<CRLF>.<CRLF>" ends the mail text and cannot be sent by the user. | "<CRLF>.<CRLF>" ends the mail text and cannot be sent by the user. | |||
In general, users are not aware of such "forbidden" sequences. To | In general, users are not aware of such "forbidden" sequences. To | |||
allow all user composed text to be transmitted transparently, the | allow all user composed text to be transmitted transparently, the | |||
following procedures are used: | following procedures are used: | |||
- Before sending a line of mail text, the SMTP client checks the | o Before sending a line of mail text, the SMTP client checks the | |||
first character of the line. If it is a period, one additional | first character of the line. If it is a period, one additional | |||
period is inserted at the beginning of the line. | period is inserted at the beginning of the line. | |||
- When a line of mail text is received by the SMTP server, it checks | o When a line of mail text is received by the SMTP server, it checks | |||
the line. If the line is composed of a single period, it is | the line. If the line is composed of a single period, it is | |||
treated as the end of mail indicator. If the first character is a | treated as the end of mail indicator. If the first character is a | |||
period and there are other characters on the line, the first | period and there are other characters on the line, the first | |||
character is deleted. | character is deleted. | |||
The mail data may contain any of the 128 ASCII characters. All | The mail data may contain any of the 128 ASCII characters. All | |||
characters are to be delivered to the recipient's mailbox, including | characters are to be delivered to the recipient's mailbox, including | |||
spaces, vertical and horizontal tabs, and other control characters. | spaces, vertical and horizontal tabs, and other control characters. | |||
If the transmission channel provides an 8-bit byte (octet) data | If the transmission channel provides an 8-bit byte (octet) data | |||
stream, the 7-bit ASCII codes are transmitted right justified in the | stream, the 7-bit ASCII codes are transmitted right justified in the | |||
octets, with the high order bits cleared to zero. See 3.7 for | octets, with the high order bits cleared to zero. See Section 3.6 | |||
special treatment of these conditions in SMTP systems serving a relay | for special treatment of these conditions in SMTP systems serving a | |||
function. | relay function. | |||
In some systems it may be necessary to transform the data as it is | In some systems it may be necessary to transform the data as it is | |||
received and stored. This may be necessary for hosts that use a | received and stored. This may be necessary for hosts that use a | |||
different character set than ASCII as their local character set, that | different character set than ASCII as their local character set, that | |||
store data in records rather than strings, or which use special | store data in records rather than strings, or which use special | |||
character sequences as delimiters inside mailboxes. If such | character sequences as delimiters inside mailboxes. If such | |||
transformations are necessary, they MUST be reversible, especially if | transformations are necessary, they MUST be reversible, especially if | |||
they are applied to mail being relayed. | they are applied to mail being relayed. | |||
4.5.3 Sizes and Timeouts | 4.5.3. Sizes and Timeouts | |||
4.5.3.1 Size limits and minimums | 4.5.3.1. Size limits and minimums | |||
There are several objects that have required minimum/maximum sizes. | There are several objects that have required minimum/maximum sizes. | |||
Every implementation MUST be able to receive objects of at least | Every implementation MUST be able to receive objects of at least | |||
these sizes. Objects larger than these sizes SHOULD be avoided when | these sizes. Objects larger than these sizes SHOULD be avoided when | |||
possible. However, some Internet mail constructs such as encoded | possible. However, some Internet mail constructs such as encoded | |||
X.400 addresses [16] will often require larger objects: clients MAY | X.400 addresses (RFC 2156 [30]) will often require larger objects. | |||
attempt to transmit these, but MUST be prepared for a server to | Clients MAY attempt to transmit these, but MUST be prepared for a | |||
reject them if they cannot be handled by it. To the maximum extent | server to reject them if they cannot be handled by it. To the | |||
possible, implementation techniques which impose no limits on the | maximum extent possible, implementation techniques which impose no | |||
length of these objects should be used. | limits on the length of these objects should be used. | |||
Extensions to SMTP may involve the use of characters that occupy more | ||||
than a single octet each. This section therefore specifies lengths | ||||
in octets where absolute lengths, rather than character counts, are | ||||
intended. | ||||
4.5.3.1.1. local-part | ||||
local-part | ||||
The maximum total length of a user name or other local-part is 64 | The maximum total length of a user name or other local-part is 64 | |||
characters. | octets. | |||
domain | 4.5.3.1.2. domain | |||
The maximum total length of a domain name or number is 255 | ||||
characters. | The maximum total length of a domain name or number is 255 octets. | |||
4.5.3.1.3. path | ||||
path | ||||
The maximum total length of a reverse-path or forward-path is 256 | The maximum total length of a reverse-path or forward-path is 256 | |||
characters (including the punctuation and element separators). | octets (including the punctuation and element separators). | |||
command line | 4.5.3.1.4. command line | |||
The maximum total length of a command line including the command | ||||
word and the <CRLF> is 512 characters. SMTP extensions may be | ||||
used to increase this limit. | ||||
reply line | The maximum total length of a command line including the command word | |||
The maximum total length of a reply line including the reply code | and the <CRLF> is 512 octets. SMTP extensions may be used to | |||
and the <CRLF> is 512 characters. More information may be | increase this limit. | |||
conveyed through multiple-line replies. | ||||
text line | 4.5.3.1.5. reply line | |||
The maximum total length of a text line including the <CRLF> is | ||||
1000 characters (not counting the leading dot duplicated for | ||||
transparency). This number may be increased by the use of SMTP | ||||
Service Extensions. | ||||
message content | The maximum total length of a reply line including the reply code and | |||
The maximum total length of a message content (including any | the <CRLF> is 512 octets. More information may be conveyed through | |||
message headers as well as the message body) MUST BE at least 64K | multiple-line replies. | |||
octets. Since the introduction of Internet standards for | ||||
multimedia mail [12], message lengths on the Internet have grown | ||||
dramatically, and message size restrictions should be avoided if | ||||
at all possible. SMTP server systems that must impose | ||||
restrictions SHOULD implement the "SIZE" service extension [18], | ||||
and SMTP client systems that will send large messages SHOULD | ||||
utilize it when possible. | ||||
recipients buffer | 4.5.3.1.6. text line | |||
The minimum total number of recipients that must be buffered is | ||||
100 recipients. Rejection of messages (for excessive recipients) | The maximum total length of a text line including the <CRLF> is 1000 | |||
with fewer than 100 RCPT commands is a violation of this | octets (not counting the leading dot duplicated for transparency). | |||
specification. The general principle that relaying SMTP servers | This number may be increased by the use of SMTP Service Extensions. | |||
MUST NOT, and delivery SMTP servers SHOULD NOT, perform validation | ||||
tests on message headers suggests that rejecting a message based | 4.5.3.1.7. message content | |||
on the total number of recipients shown in header fields is to be | ||||
discouraged. A server which imposes a limit on the number of | The maximum total length of a message content (including any message | |||
recipients MUST behave in an orderly fashion, such as to reject | header section as well as the message body) MUST BE at least 64K | |||
additional addresses over its limit rather than silently | octets. Since the introduction of Internet standards for multimedia | |||
discarding addresses previously accepted. A client that needs to | mail (RFC2045 [28]), message lengths on the Internet have grown | |||
deliver a message containing over 100 RCPT commands SHOULD be | dramatically, and message size restrictions should be avoided if at | |||
prepared to transmit in 100-recipient "chunks" if the server | all possible. SMTP server systems that must impose restrictions | |||
declines to accept more than 100 recipients in a single message. | SHOULD implement the "SIZE" service extension of RFC 1870 [4], and | |||
SMTP client systems that will send large messages SHOULD utilize it | ||||
when possible. | ||||
4.5.3.1.8. recipients buffer | ||||
The minimum total number of recipients that MUST be buffered is 100 | ||||
recipients. Rejection of messages (for excessive recipients) with | ||||
fewer than 100 RCPT commands is a violation of this specification. | ||||
The general principle that relaying SMTP server MUST NOT, and | ||||
delivery SMTP servers SHOULD NOT, perform validation tests on message | ||||
header fields suggests that messages SHOULD NOT be rejected based on | ||||
the total number of recipients shown in header fields. A server that | ||||
imposes a limit on the number of recipients MUST behave in an orderly | ||||
fashion, such as rejecting additional addresses over its limit rather | ||||
than silently discarding addresses previously accepted. A client | ||||
that needs to deliver a message containing over 100 RCPT commands | ||||
SHOULD be prepared to transmit in 100-recipient "chunks" if the | ||||
server declines to accept more than 100 recipients in a single | ||||
message. | ||||
4.5.3.1.9. Treatment When Limits Exceeded | ||||
Errors due to exceeding these limits may be reported by using the | Errors due to exceeding these limits may be reported by using the | |||
reply codes. Some examples of reply codes are: | reply codes. Some examples of reply codes are: | |||
500 Line too long. | 500 Line too long. | |||
or | or | |||
501 Path too long | 501 Path too long | |||
or | or | |||
452 Too many recipients (see below) | 452 Too many recipients (see below) | |||
or | or | |||
552 Too much mail data. | 552 Too much mail data. | |||
RFC 821 [30] incorrectly listed the error where an SMTP server | 4.5.3.1.10. Too Many Recipients code | |||
exhausts its implementation limit on the number of RCPT commands | ||||
("too many recipients") as having reply code 552. The correct reply | RFC821 [8] incorrectly listed the error where an SMTP server exhausts | |||
code for this condition is 452. Clients SHOULD treat a 552 code in | its implementation limit on the number of RCPT commands ("too many | |||
this case as a temporary, rather than permanent, failure so the logic | recipients") as having reply code 552. The correct reply code for | |||
below works. | this condition is 452. Clients SHOULD treat a 552 code in this case | |||
as a temporary, rather than permanent, failure so the logic below | ||||
works. | ||||
When a conforming SMTP server encounters this condition, it has at | When a conforming SMTP server encounters this condition, it has at | |||
least 100 successful RCPT commands in its recipients buffer. If the | least 100 successful RCPT commands in its recipients buffer. If the | |||
server is able to accept the message, then at least these 100 | server is able to accept the message, then at least these 100 | |||
addresses will be removed from the SMTP client's queue. When the | addresses will be removed from the SMTP client's queue. When the | |||
client attempts retransmission of those addresses which received 452 | client attempts retransmission of those addresses which received 452 | |||
responses, at least 100 of these will be able to fit in the SMTP | responses, at least 100 of these will be able to fit in the SMTP | |||
server's recipients buffer. Each retransmission attempt which is | server's recipients buffer. Each retransmission attempt which is | |||
able to deliver anything will be able to dispose of at least 100 of | able to deliver anything will be able to dispose of at least 100 of | |||
these recipients. | these recipients. | |||
If an SMTP server has an implementation limit on the number of RCPT | If an SMTP server has an implementation limit on the number of RCPT | |||
commands and this limit is exhausted, it MUST use a response code of | commands and this limit is exhausted, it MUST use a response code of | |||
452 (but the client SHOULD also be prepared for a 552, as noted | 452 (but the client SHOULD also be prepared for a 552, as noted | |||
above). If the server has a configured site-policy limitation on the | above). If the server has a configured site-policy limitation on the | |||
number of RCPT commands, it MAY instead use a 5XX response code. | number of RCPT commands, it MAY instead use a 5yz response code. In | |||
This would be most appropriate if the policy limitation was intended | particular, if the intent is to prohibit messages with more than a | |||
to apply if the total recipient count for a particular message body | site-specified number of recipients, rather than merely limit the | |||
were enforced even if that message body was sent in multiple mail | number of recipients in a given mail transaction, it would be | |||
transactions. | reasonable to return a 503 response to any DATA command received | |||
subsequent to the 452 (or 552) code or to simply return the 503 after | ||||
DATA without returning any previous negative response. | ||||
4.5.3.2 Timeouts | 4.5.3.2. Timeouts | |||
An SMTP client MUST provide a timeout mechanism. It MUST use per- | An SMTP client MUST provide a timeout mechanism. It MUST use per- | |||
command timeouts rather than somehow trying to time the entire mail | command timeouts rather than somehow trying to time the entire mail | |||
transaction. Timeouts SHOULD be easily reconfigurable, preferably | transaction. Timeouts SHOULD be easily reconfigurable, preferably | |||
without recompiling the SMTP code. To implement this, a timer is set | without recompiling the SMTP code. To implement this, a timer is set | |||
for each SMTP command and for each buffer of the data transfer. The | for each SMTP command and for each buffer of the data transfer. The | |||
latter means that the overall timeout is inherently proportional to | latter means that the overall timeout is inherently proportional to | |||
the size of the message. | the size of the message. | |||
Based on extensive experience with busy mail-relay hosts, the minimum | Based on extensive experience with busy mail-relay hosts, the minimum | |||
per-command timeout values SHOULD be as follows: | per-command timeout values SHOULD be as follows: | |||
Initial 220 Message: 5 minutes | 4.5.3.2.1. Initial 220 Message: 5 minutes | |||
An SMTP client process needs to distinguish between a failed TCP | An SMTP client process needs to distinguish between a failed TCP | |||
connection and a delay in receiving the initial 220 greeting | connection and a delay in receiving the initial 220 greeting message. | |||
message. Many SMTP servers accept a TCP connection but delay | Many SMTP servers accept a TCP connection but delay delivery of the | |||
delivery of the 220 message until their system load permits more | 220 message until their system load permits more mail to be | |||
mail to be processed. | processed. | |||
MAIL Command: 5 minutes | 4.5.3.2.2. MAIL Command: 5 minutes | |||
4.5.3.2.3. RCPT Command: 5 minutes | ||||
RCPT Command: 5 minutes | ||||
A longer timeout is required if processing of mailing lists and | A longer timeout is required if processing of mailing lists and | |||
aliases is not deferred until after the message was accepted. | aliases is not deferred until after the message was accepted. | |||
DATA Initiation: 2 minutes | 4.5.3.2.4. DATA Initiation: 2 minutes | |||
This is while awaiting the "354 Start Input" reply to a DATA | ||||
command. | This is while awaiting the "354 Start Input" reply to a DATA command. | |||
4.5.3.2.5. Data Block: 3 minutes | ||||
Data Block: 3 minutes | ||||
This is while awaiting the completion of each TCP SEND call | This is while awaiting the completion of each TCP SEND call | |||
transmitting a chunk of data. | transmitting a chunk of data. | |||
DATA Termination: 10 minutes. | 4.5.3.2.6. DATA Termination: 10 minutes. | |||
This is while awaiting the "250 OK" reply. When the receiver gets | This is while awaiting the "250 OK" reply. When the receiver gets | |||
the final period terminating the message data, it typically | the final period terminating the message data, it typically performs | |||
performs processing to deliver the message to a user mailbox. A | processing to deliver the message to a user mailbox. A spurious | |||
spurious timeout at this point would be very wasteful and would | timeout at this point would be very wasteful and would typically | |||
typically result in delivery of multiple copies of the message, | result in delivery of multiple copies of the message, since it has | |||
since it has been successfully sent and the server has accepted | been successfully sent and the server has accepted responsibility for | |||
responsibility for delivery. See section 6.1 for additional | delivery. See Section 6.1 for additional discussion. | |||
discussion. | ||||
4.5.3.2.7. Server Timeout: 5 minutes. | ||||
An SMTP server SHOULD have a timeout of at least 5 minutes while it | An SMTP server SHOULD have a timeout of at least 5 minutes while it | |||
is awaiting the next command from the sender. | is awaiting the next command from the sender. | |||
4.5.4 Retry Strategies | 4.5.4. Retry Strategies | |||
The common structure of a host SMTP implementation includes user | The common structure of a host SMTP implementation includes user | |||
mailboxes, one or more areas for queuing messages in transit, and one | mailboxes, one or more areas for queuing messages in transit, and one | |||
or more daemon processes for sending and receiving mail. The exact | or more daemon processes for sending and receiving mail. The exact | |||
structure will vary depending on the needs of the users on the host | structure will vary depending on the needs of the users on the host | |||
and the number and size of mailing lists supported by the host. We | and the number and size of mailing lists supported by the host. We | |||
describe several optimizations that have proved helpful, particularly | describe several optimizations that have proved helpful, particularly | |||
for mailers supporting high traffic levels. | for mailers supporting high traffic levels. | |||
Any queuing strategy MUST include timeouts on all activities on a | Any queuing strategy MUST include timeouts on all activities on a | |||
per-command basis. A queuing strategy MUST NOT send error messages | per-command basis. A queuing strategy MUST NOT send error messages | |||
in response to error messages under any circumstances. | in response to error messages under any circumstances. | |||
4.5.4.1 Sending Strategy | 4.5.4.1. Sending Strategy | |||
The general model for an SMTP client is one or more processes that | The general model for an SMTP client is one or more processes that | |||
periodically attempt to transmit outgoing mail. In a typical system, | periodically attempt to transmit outgoing mail. In a typical system, | |||
the program that composes a message has some method for requesting | the program that composes a message has some method for requesting | |||
immediate attention for a new piece of outgoing mail, while mail that | immediate attention for a new piece of outgoing mail, while mail that | |||
cannot be transmitted immediately MUST be queued and periodically | cannot be transmitted immediately MUST be queued and periodically | |||
retried by the sender. A mail queue entry will include not only the | retried by the sender. A mail queue entry will include not only the | |||
message itself but also the envelope information. | message itself but also the envelope information. | |||
The sender MUST delay retrying a particular destination after one | The sender MUST delay retrying a particular destination after one | |||
attempt has failed. In general, the retry interval SHOULD be at | attempt has failed. In general, the retry interval SHOULD be at | |||
least 30 minutes; however, more sophisticated and variable strategies | least 30 minutes; however, more sophisticated and variable strategies | |||
will be beneficial when the SMTP client can determine the reason for | will be beneficial when the SMTP client can determine the reason for | |||
non-delivery. | non-delivery. | |||
Retries continue until the message is transmitted or the sender gives | Retries continue until the message is transmitted or the sender gives | |||
up; the give-up time generally needs to be at least 4-5 days. The | up; the give-up time generally needs to be at least 4-5 days. It MAY | |||
parameters to the retry algorithm MUST be configurable. | be appropriate to set a shorter maximum number of retries for non- | |||
delivery notifications and equivalent error messages than for | ||||
standard messages. The parameters to the retry algorithm MUST be | ||||
configurable. | ||||
A client SHOULD keep a list of hosts it cannot reach and | A client SHOULD keep a list of hosts it cannot reach and | |||
corresponding connection timeouts, rather than just retrying queued | corresponding connection timeouts, rather than just retrying queued | |||
mail items. | mail items. | |||
Experience suggests that failures are typically transient (the target | Experience suggests that failures are typically transient (the target | |||
system or its connection has crashed), favoring a policy of two | system or its connection has crashed), favoring a policy of two | |||
connection attempts in the first hour the message is in the queue, | connection attempts in the first hour the message is in the queue, | |||
and then backing off to one every two or three hours. | and then backing off to one every two or three hours. | |||
The SMTP client can shorten the queuing delay in cooperation with the | The SMTP client can shorten the queuing delay in cooperation with the | |||
SMTP server. For example, if mail is received from a particular | SMTP server. For example, if mail is received from a particular | |||
address, it is likely that mail queued for that host can now be sent. | address, it is likely that mail queued for that host can now be sent. | |||
Application of this principle may, in many cases, eliminate the | Application of this principle may, in many cases, eliminate the | |||
requirement for an explicit "send queues now" function such as ETRN | requirement for an explicit "send queues now" function such as ETRN, | |||
[9]. | RFC1985 [27]. | |||
The strategy may be further modified as a result of multiple | The strategy may be further modified as a result of multiple | |||
addresses per host (see below) to optimize delivery time vs. resource | addresses per host (see below) to optimize delivery time vs. resource | |||
usage. | usage. | |||
An SMTP client may have a large queue of messages for each | An SMTP client may have a large queue of messages for each | |||
unavailable destination host. If all of these messages were retried | unavailable destination host. If all of these messages were retried | |||
in every retry cycle, there would be excessive Internet overhead and | in every retry cycle, there would be excessive Internet overhead and | |||
the sending system would be blocked for a long period. Note that an | the sending system would be blocked for a long period. Note that an | |||
SMTP client can generally determine that a delivery attempt has | SMTP client can generally determine that a delivery attempt has | |||
skipping to change at page 59, line 28 | skipping to change at page 68, line 22 | |||
answers may be returned by the server. More significantly, 5yz | answers may be returned by the server. More significantly, 5yz | |||
responses to the MAIL command MUST NOT be cached. | responses to the MAIL command MUST NOT be cached. | |||
When a mail message is to be delivered to multiple recipients, and | When a mail message is to be delivered to multiple recipients, and | |||
the SMTP server to which a copy of the message is to be sent is the | the SMTP server to which a copy of the message is to be sent is the | |||
same for multiple recipients, then only one copy of the message | same for multiple recipients, then only one copy of the message | |||
SHOULD be transmitted. That is, the SMTP client SHOULD use the | SHOULD be transmitted. That is, the SMTP client SHOULD use the | |||
command sequence: MAIL, RCPT, RCPT,... RCPT, DATA instead of the | command sequence: MAIL, RCPT, RCPT,... RCPT, DATA instead of the | |||
sequence: MAIL, RCPT, DATA, ..., MAIL, RCPT, DATA. However, if there | sequence: MAIL, RCPT, DATA, ..., MAIL, RCPT, DATA. However, if there | |||
are very many addresses, a limit on the number of RCPT commands per | are very many addresses, a limit on the number of RCPT commands per | |||
MAIL command MAY be imposed. Implementation of this efficiency | MAIL command MAY be imposed. This efficiency feature SHOULD be | |||
feature is strongly encouraged. | implemented. | |||
Similarly, to achieve timely delivery, the SMTP client MAY support | Similarly, to achieve timely delivery, the SMTP client MAY support | |||
multiple concurrent outgoing mail transactions. However, some limit | multiple concurrent outgoing mail transactions. However, some limit | |||
may be appropriate to protect the host from devoting all its | may be appropriate to protect the host from devoting all its | |||
resources to mail. | resources to mail. | |||
4.5.4.2 Receiving Strategy | 4.5.4.2. Receiving Strategy | |||
The SMTP server SHOULD attempt to keep a pending listen on the SMTP | The SMTP server SHOULD attempt to keep a pending listen on the SMTP | |||
port at all times. This requires the support of multiple incoming | port (specified by IANA as port 25) at all times. This requires the | |||
TCP connections for SMTP. Some limit MAY be imposed but servers that | support of multiple incoming TCP connections for SMTP. Some limit | |||
cannot handle more than one SMTP transaction at a time are not in | MAY be imposed but servers that cannot handle more than one SMTP | |||
conformance with the intent of this specification. | transaction at a time are not in conformance with the intent of this | |||
specification. | ||||
As discussed above, when the SMTP server receives mail from a | As discussed above, when the SMTP server receives mail from a | |||
particular host address, it could activate its own SMTP queuing | particular host address, it could activate its own SMTP queuing | |||
mechanisms to retry any mail pending for that host address. | mechanisms to retry any mail pending for that host address. | |||
4.5.5 Messages with a null reverse-path | 4.5.5. Messages with a null reverse-path | |||
There are several types of notification messages which are required | There are several types of notification messages which are required | |||
by existing and proposed standards to be sent with a null reverse | by existing and proposed standards to be sent with a null reverse | |||
path, namely non-delivery notifications as discussed in section 3.7, | path, namely non-delivery notifications as discussed in Section 3.7, | |||
other kinds of Delivery Status Notifications (DSNs) [24], and also | other kinds of Delivery Status Notifications (DSNs, RFC3461 [12]), | |||
Message Disposition Notifications (MDNs) [10]. All of these kinds of | and also Message Disposition Notifications (MDNs, RFC3798 [39]). All | |||
messages are notifications about a previous message, and they are | of these kinds of messages are notifications about a previous | |||
sent to the reverse-path of the previous mail message. (If the | message, and they are sent to the reverse-path of the previous mail | |||
delivery of such a notification message fails, that usually indicates | message. (If the delivery of such a notification message fails, that | |||
a problem with the mail system of the host to which the notification | usually indicates a problem with the mail system of the host to which | |||
message is addressed. For this reason, at some hosts the MTA is set | the notification message is addressed. For this reason, at some | |||
up to forward such failed notification messages to someone who is | hosts the MTA is set up to forward such failed notification messages | |||
able to fix problems with the mail system, e.g., via the postmaster | to someone who is able to fix problems with the mail system, e.g., | |||
alias.) | via the postmaster alias.) | |||
All other types of messages (i.e., any message which is not required | All other types of messages (i.e., any message which is not required | |||
by a standards-track RFC to have a null reverse-path) SHOULD be sent | by a standards-track RFC to have a null reverse-path) SHOULD be sent | |||
with with a valid, non-null reverse-path. | with a valid, non-null reverse-path. | |||
Implementors of automated email processors should be careful to make | Implementers of automated email processors should be careful to make | |||
sure that the various kinds of messages with null reverse-path are | sure that the various kinds of messages with a null reverse-path are | |||
handled correctly, in particular such systems SHOULD NOT reply to | handled correctly. In particular such systems SHOULD NOT reply to | |||
messages with null reverse-path. | messages with a null reverse-path and they SHOULD NOT add a non-null | |||
reverse-path, or change a null reverse-path to a non-null one, to | ||||
such messages when forwarding. | ||||
5. Address Resolution and Mail Handling | 5. Address Resolution and Mail Handling | |||
5.1. Locating the Target Host | ||||
Once an SMTP client lexically identifies a domain to which mail will | Once an SMTP client lexically identifies a domain to which mail will | |||
be delivered for processing (as described in sections 3.6 and 3.7), a | be delivered for processing (as described in sections Section 2.3.5 | |||
DNS lookup MUST be performed to resolve the domain name [22]. The | and Section 3.6), a DNS lookup MUST be performed to resolve the | |||
names are expected to be fully-qualified domain names (FQDNs): | domain name (RFC1035 [7]). The names are expected to be fully- | |||
mechanisms for inferring FQDNs from partial names or local aliases | qualified domain names (FQDNs): mechanisms for inferring FQDNs from | |||
are outside of this specification and, due to a history of problems, | partial names or local aliases are outside of this specification. | |||
are generally discouraged. The lookup first attempts to locate an MX | Due to a history of problems, SMTP servers used for initial | |||
record associated with the name. If a CNAME record is found instead, | submission of messages SHOULD NOT make such inferences (Message | |||
the resulting name is processed as if it were the initial name. If | Submission Servers [42] have somewhat more flexibility) and | |||
no MX records are found, but an A RR is found, the A RR is treated as | intermediate (relay) SMTP servers MUST NOT make them. | |||
if it was associated with an implicit MX RR, with a preference of 0, | ||||
pointing to that host. If one or more MX RRs are found for a given | The lookup first attempts to locate an MX record associated with the | |||
name, SMTP systems MUST NOT utilize any A RRs associated with that | name. If a CNAME record is found, the resulting name is processed as | |||
name unless they are located using the MX RRs; the "implicit MX" rule | if it were the initial name. If a non-existent domain error is | |||
above applies only if there are no MX records present. If MX records | returned, this situation MUST be reported as an error. If a | |||
are present, but none of them are usable, this situation MUST be | temporary error is returned, the message MUST be queued and retried | |||
reported as an error. | later (See Section 4.5.4.1). If an empty list of MXs is returned, | |||
the address is treated as if it was associated with an implicit MX | ||||
RR, with a preference of 0, pointing to that host. If MX records are | ||||
present, but none of them are usable, or the implicit MX is unusable, | ||||
this situation MUST be reported as an error. | ||||
If one or more MX RRs are found for a given name, SMTP systems MUST | ||||
NOT utilize any address RRs associated with that name unless they are | ||||
located using the MX RRs; the "implicit MX" rule above applies only | ||||
if there are no MX records present. If MX records are present, but | ||||
none of them are usable, this situation MUST be reported as an error. | ||||
When a domain name associated with an MX RR is looked up and the | ||||
associated data field obtained, the data field of that response MUST | ||||
contain a domain-name. That domain-name, when queried, MUST return | ||||
at least one address record (e.g., A or AAAA RR) that gives the IP | ||||
address of the SMTP server to which the message should be directed. | ||||
Any other response, specifically including a value that will return a | ||||
CNAME record when queried, lies outside the scope of this standard. | ||||
The prohibition on labels in the data that resolve to CNAMEs is | ||||
discussed in more detail in RFC 2181, Section 10.3 [31]. | ||||
When the lookup succeeds, the mapping can result in a list of | When the lookup succeeds, the mapping can result in a list of | |||
alternative delivery addresses rather than a single address, because | alternative delivery addresses rather than a single address, because | |||
of multiple MX records, multihoming, or both. To provide reliable | of multiple MX records, multihoming, or both. To provide reliable | |||
mail transmission, the SMTP client MUST be able to try (and retry) | mail transmission, the SMTP client MUST be able to try (and retry) | |||
each of the relevant addresses in this list in order, until a | each of the relevant addresses in this list in order, until a | |||
delivery attempt succeeds. However, there MAY also be a configurable | delivery attempt succeeds. However, there MAY also be a configurable | |||
limit on the number of alternate addresses that can be tried. In any | limit on the number of alternate addresses that can be tried. In any | |||
case, the SMTP client SHOULD try at least two addresses. | case, the SMTP client SHOULD try at least two addresses. | |||
Two types of information is used to rank the host addresses: multiple | Two types of information are used to rank the host addresses: | |||
MX records, and multihomed hosts. | multiple MX records, and multihomed hosts. | |||
Multiple MX records contain a preference indication that MUST be used | MX records contain a preference indication that MUST be used in | |||
in sorting (see below). Lower numbers are more preferred than higher | sorting if more than one such record appears (see below). Lower | |||
ones. If there are multiple destinations with the same preference | numbers are more preferred than higher ones. If there are multiple | |||
and there is no clear reason to favor one (e.g., by recognition of an | destinations with the same preference and there is no clear reason to | |||
easily-reached address), then the sender-SMTP MUST randomize them to | favor one (e.g., by recognition of an easily-reached address), then | |||
spread the load across multiple mail exchangers for a specific | the sender-SMTP MUST randomize them to spread the load across | |||
organization. | multiple mail exchangers for a specific organization. | |||
The destination host (perhaps taken from the preferred MX record) may | The destination host (perhaps taken from the preferred MX record) may | |||
be multihomed, in which case the domain name resolver will return a | be multihomed, in which case the domain name resolver will return a | |||
list of alternative IP addresses. It is the responsibility of the | list of alternative IP addresses. It is the responsibility of the | |||
domain name resolver interface to have ordered this list by | domain name resolver interface to have ordered this list by | |||
decreasing preference if necessary, and SMTP MUST try them in the | decreasing preference if necessary, and the SMTP sender MUST try them | |||
order presented. | in the order presented. | |||
Although the capability to try multiple alternative addresses is | Although the capability to try multiple alternative addresses is | |||
required, specific installations may want to limit or disable the use | required, specific installations may want to limit or disable the use | |||
of alternative addresses. The question of whether a sender should | of alternative addresses. The question of whether a sender should | |||
attempt retries using the different addresses of a multihomed host | attempt retries using the different addresses of a multihomed host | |||
has been controversial. The main argument for using the multiple | has been controversial. The main argument for using the multiple | |||
addresses is that it maximizes the probability of timely delivery, | addresses is that it maximizes the probability of timely delivery, | |||
and indeed sometimes the probability of any delivery; the counter- | and indeed sometimes the probability of any delivery; the counter- | |||
argument is that it may result in unnecessary resource use. Note | argument is that it may result in unnecessary resource use. Note | |||
that resource use is also strongly determined by the sending strategy | that resource use is also strongly determined by the sending strategy | |||
discussed in section 4.5.4.1. | discussed in Section 4.5.4.1. | |||
If an SMTP server receives a message with a destination for which it | If an SMTP server receives a message with a destination for which it | |||
is a designated Mail eXchanger, it MAY relay the message (potentially | is a designated Mail eXchanger, it MAY relay the message (potentially | |||
after having rewritten the MAIL FROM and/or RCPT TO addresses), make | after having rewritten the MAIL FROM and/or RCPT TO addresses), make | |||
final delivery of the message, or hand it off using some mechanism | final delivery of the message, or hand it off using some mechanism | |||
outside the SMTP-provided transport environment. Of course, neither | outside the SMTP-provided transport environment. Of course, neither | |||
of the latter require that the list of MX records be examined | of the latter require that the list of MX records be examined | |||
further. | further. | |||
If it determines that it should relay the message without rewriting | If it determines that it should relay the message without rewriting | |||
skipping to change at page 62, line 5 | skipping to change at page 71, line 27 | |||
delivery. The records are first ordered by preference, with the | delivery. The records are first ordered by preference, with the | |||
lowest-numbered records being most preferred. The relay host MUST | lowest-numbered records being most preferred. The relay host MUST | |||
then inspect the list for any of the names or addresses by which it | then inspect the list for any of the names or addresses by which it | |||
might be known in mail transactions. If a matching record is found, | might be known in mail transactions. If a matching record is found, | |||
all records at that preference level and higher-numbered ones MUST be | all records at that preference level and higher-numbered ones MUST be | |||
discarded from consideration. If there are no records left at that | discarded from consideration. If there are no records left at that | |||
point, it is an error condition, and the message MUST be returned as | point, it is an error condition, and the message MUST be returned as | |||
undeliverable. If records do remain, they SHOULD be tried, best | undeliverable. If records do remain, they SHOULD be tried, best | |||
preference first, as described above. | preference first, as described above. | |||
5.2. IPv6 and MX Records | ||||
In the contemporary Internet, SMTP clients and servers may be hosted | ||||
on IPv4 systems, IPv6 systems, or dual-stack systems that are | ||||
compatible with either version of the Internet Protocol. The host | ||||
domains to which MX records point may, consequently, contain "A RR"s | ||||
(IPv4), "AAAA RR"s (IPv6), or any combination of them. While RFC | ||||
3974 [14] discusses some operational experience in mixed | ||||
environments, it was not comprehensive enough to justify | ||||
standardization and some of its recommendations appear to be | ||||
inconsistent with this specification. The appropriate actions to be | ||||
taken will either depend on local circumstances, such as performance | ||||
of the relevant networks and any conversions that might be necessary, | ||||
or will be obvious (e.g., an IPv6-only client need not attempt to | ||||
look up A RRs or attempt to reach IPv4-only servers). Designers of | ||||
SMTP implementations that might run in IPv6 or dual stack | ||||
environments should study the procedures above, especially the | ||||
comments about multihomed hosts, and, preferably, provide mechanisms | ||||
to facilitate operational tuning and mail interoperability between | ||||
IPv4 and IPv6 systems while considering local circumstances. | ||||
6. Problem Detection and Handling | 6. Problem Detection and Handling | |||
6.1 Reliable Delivery and Replies by Email | 6.1. Reliable Delivery and Replies by Email | |||
When the receiver-SMTP accepts a piece of mail (by sending a "250 OK" | When the receiver-SMTP accepts a piece of mail (by sending a "250 OK" | |||
message in response to DATA), it is accepting responsibility for | message in response to DATA), it is accepting responsibility for | |||
delivering or relaying the message. It must take this responsibility | delivering or relaying the message. It must take this responsibility | |||
seriously. It MUST NOT lose the message for frivolous reasons, such | seriously. It MUST NOT lose the message for frivolous reasons, such | |||
as because the host later crashes or because of a predictable | as because the host later crashes or because of a predictable | |||
resource shortage. | resource shortage. Some reasons that are not considered frivolous | |||
are discussed in the next subsection and in Section 7.8. | ||||
If there is a delivery failure after acceptance of a message, the | If there is a delivery failure after acceptance of a message, the | |||
receiver-SMTP MUST formulate and mail a notification message. This | receiver-SMTP MUST formulate and mail a notification message. This | |||
notification MUST be sent using a null ("<>") reverse path in the | notification MUST be sent using a null ("<>") reverse path in the | |||
envelope. The recipient of this notification MUST be the address | envelope. The recipient of this notification MUST be the address | |||
from the envelope return path (or the Return-Path: line). However, | from the envelope return path (or the Return-Path: line). However, | |||
if this address is null ("<>"), the receiver-SMTP MUST NOT send a | if this address is null ("<>"), the receiver-SMTP MUST NOT send a | |||
notification. Obviously, nothing in this section can or should | notification. Obviously, nothing in this section can or should | |||
prohibit local decisions (i.e., as part of the same system | prohibit local decisions (i.e., as part of the same system | |||
environment as the receiver-SMTP) to log or otherwise transmit | environment as the receiver-SMTP) to log or otherwise transmit | |||
skipping to change at page 62, line 48 | skipping to change at page 72, line 47 | |||
Some delivery failures after the message is accepted by SMTP will be | Some delivery failures after the message is accepted by SMTP will be | |||
unavoidable. For example, it may be impossible for the receiving | unavoidable. For example, it may be impossible for the receiving | |||
SMTP server to validate all the delivery addresses in RCPT command(s) | SMTP server to validate all the delivery addresses in RCPT command(s) | |||
due to a "soft" domain system error, because the target is a mailing | due to a "soft" domain system error, because the target is a mailing | |||
list (see earlier discussion of RCPT), or because the server is | list (see earlier discussion of RCPT), or because the server is | |||
acting as a relay and has no immediate access to the delivering | acting as a relay and has no immediate access to the delivering | |||
system. | system. | |||
To avoid receiving duplicate messages as the result of timeouts, a | To avoid receiving duplicate messages as the result of timeouts, a | |||
receiver-SMTP MUST seek to minimize the time required to respond to | receiver-SMTP MUST seek to minimize the time required to respond to | |||
the final <CRLF>.<CRLF> end of data indicator. See RFC 1047 [28] for | the final <CRLF>.<CRLF> end of data indicator. See RFC1047 [20] for | |||
a discussion of this problem. | a discussion of this problem. | |||
6.2 Loop Detection | 6.2. Unwanted, unsolicited, and "attack" messages | |||
Simple counting of the number of "Received:" headers in a message has | Utility and predictability of the Internet mail system requires that | |||
proven to be an effective, although rarely optimal, method of | messages that can be delivered should be delivered, regardless of any | |||
detecting loops in mail systems. SMTP servers using this technique | syntax or other faults associated with those messages and regardless | |||
SHOULD use a large rejection threshold, normally at least 100 | of their content. If they cannot be delivered, and cannot be | |||
Received entries. Whatever mechanisms are used, servers MUST contain | rejected by the SMTP server during the SMTP transaction, they should | |||
provisions for detecting and stopping trivial loops. | be "bounced" (returned with non-delivery notification messages) as | |||
described above. In today's world, in which many SMTP server | ||||
operators have discovered that the quantity of undesirable bulk email | ||||
vastly exceeds the quantity of desired mail and in which accepting a | ||||
message may trigger additional undesirable traffic by providing | ||||
verification of the address, those principles may not be practical. | ||||
6.3 Compensating for Irregularities | As discussed in Section 7.8 and Section 7.9 below, dropping mail | |||
without notification of the sender is permitted in practice. | ||||
However, it is extremely dangerous and violates a long tradition and | ||||
community expectations that mail is either delivered or returned. If | ||||
silent message-dropping is misused, it could easily undermine | ||||
confidence in the reliability of the Internet's mail systems. So | ||||
silent dropping of messages should be considered only in those cases | ||||
where there is very high confidence that the messages are seriously | ||||
fraudulent or otherwise inappropriate. | ||||
To stretch the principle of delivery if possible even further, it may | ||||
be a rational policy to not deliver mail that has an invalid return | ||||
address, although the history of the network is that users are | ||||
typically better served by delivering any message that can be | ||||
delivered. Reliably determining that a return address is invalid can | ||||
be a difficult and time-consuming process, especially if the putative | ||||
sending system is not directly accessible or doesn't fully and | ||||
accurately support VRFY and, even if a "drop messages with invalid | ||||
return addresses" policy is adopted, it SHOULD be applied only when | ||||
there is near-certainty that the return addresses are, in fact, | ||||
invalid. | ||||
Conversely, if a message is rejected because it is found to contain | ||||
hostile content (a decision that is outside the scope of an SMTP | ||||
server as defined in this document), rejection ("bounce") messages | ||||
SHOULD NOT be sent unless the receiving site is confident that those | ||||
messages will be usefully delivered. The preference and default in | ||||
these cases is to avoid sending non-delivery messages when the | ||||
incoming message is determined to contain hostile content. | ||||
6.3. Loop Detection | ||||
Simple counting of the number of "Received:" header fields in a | ||||
message has proven to be an effective, although rarely optimal, | ||||
method of detecting loops in mail systems. SMTP servers using this | ||||
technique SHOULD use a large rejection threshold, normally at least | ||||
100 Received entries. Whatever mechanisms are used, servers MUST | ||||
contain provisions for detecting and stopping trivial loops. | ||||
6.4. Compensating for Irregularities | ||||
Unfortunately, variations, creative interpretations, and outright | Unfortunately, variations, creative interpretations, and outright | |||
violations of Internet mail protocols do occur; some would suggest | violations of Internet mail protocols do occur; some would suggest | |||
that they occur quite frequently. The debate as to whether a well- | that they occur quite frequently. The debate as to whether a well- | |||
behaved SMTP receiver or relay should reject a malformed message, | behaved SMTP receiver or relay should reject a malformed message, | |||
attempt to pass it on unchanged, or attempt to repair it to increase | attempt to pass it on unchanged, or attempt to repair it to increase | |||
the odds of successful delivery (or subsequent reply) began almost | the odds of successful delivery (or subsequent reply) began almost | |||
with the dawn of structured network mail and shows no signs of | with the dawn of structured network mail and shows no signs of | |||
abating. Advocates of rejection claim that attempted repairs are | abating. Advocates of rejection claim that attempted repairs are | |||
rarely completely adequate and that rejection of bad messages is the | rarely completely adequate and that rejection of bad messages is the | |||
only way to get the offending software repaired. Advocates of | only way to get the offending software repaired. Advocates of | |||
"repair" or "deliver no matter what" argue that users prefer that | "repair" or "deliver no matter what" argue that users prefer that | |||
mail go through it if at all possible and that there are significant | mail go through it if at all possible and that there are significant | |||
market pressures in that direction. In practice, these market | market pressures in that direction. In practice, these market | |||
pressures may be more important to particular vendors than strict | pressures may be more important to particular vendors than strict | |||
conformance to the standards, regardless of the preference of the | conformance to the standards, regardless of the preference of the | |||
actual developers. | actual developers. | |||
The problems associated with ill-formed messages were exacerbated by | The problems associated with ill-formed messages were exacerbated by | |||
the introduction of the split-UA mail reading protocols [3, 26, 5, | the introduction of the split-UA mail reading protocols (Post Office | |||
21]. These protocols have encouraged the use of SMTP as a posting | Protocol (POP) version 2 [17], Post Office Protocol (POP) version 3 | |||
[26], IMAP version 2 [22], and PCMAIL [21]). These protocols | ||||
encouraged the use of SMTP as a posting (message submission) | ||||
protocol, and SMTP servers as relay systems for these client hosts | protocol, and SMTP servers as relay systems for these client hosts | |||
(which are often only intermittently connected to the Internet). | (which are often only intermittently connected to the Internet). | |||
Historically, many of those client machines lacked some of the | Historically, many of those client machines lacked some of the | |||
mechanisms and information assumed by SMTP (and indeed, by the mail | mechanisms and information assumed by SMTP (and indeed, by the mail | |||
format protocol [7]). Some could not keep adequate track of time; | format protocol, RFC822 [16]). Some could not keep adequate track of | |||
others had no concept of time zones; still others could not identify | time; others had no concept of time zones; still others could not | |||
their own names or addresses; and, of course, none could satisfy the | identify their own names or addresses; and, of course, none could | |||
assumptions that underlay RFC 822's conception of authenticated | satisfy the assumptions that underlay RFC 822's conception of | |||
addresses. | authenticated addresses. | |||
In response to these weak SMTP clients, many SMTP systems now | In response to these weak SMTP clients, many SMTP systems now | |||
complete messages that are delivered to them in incomplete or | complete messages that are delivered to them in incomplete or | |||
incorrect form. This strategy is generally considered appropriate | incorrect form. This strategy is generally considered appropriate | |||
when the server can identify or authenticate the client, and there | when the server can identify or authenticate the client, and there | |||
are prior agreements between them. By contrast, there is at best | are prior agreements between them. By contrast, there is at best | |||
great concern about fixes applied by a relay or delivery SMTP server | great concern about fixes applied by a relay or delivery SMTP server | |||
that has little or no knowledge of the user or client machine. | that has little or no knowledge of the user or client machine. Many | |||
of these issues are addressed by using a separate protocol, such as | ||||
that defined in RFC 4409 [42], for message submission, rather than | ||||
using originating SMTP servers for that purpose. | ||||
The following changes to a message being processed MAY be applied | The following changes to a message being processed MAY be applied | |||
when necessary by an originating SMTP server, or one used as the | when necessary by an originating SMTP server, or one used as the | |||
target of SMTP as an initial posting protocol: | target of SMTP as an initial posting (message submission) protocol: | |||
- Addition of a message-id field when none appears | o Addition of a message-id field when none appears | |||
- Addition of a date, time or time zone when none appears | o Addition of a date, time or time zone when none appears | |||
- Correction of addresses to proper FQDN format | o Correction of addresses to proper FQDN format | |||
The less information the server has about the client, the less likely | The less information the server has about the client, the less likely | |||
these changes are to be correct and the more caution and conservatism | these changes are to be correct and the more caution and conservatism | |||
should be applied when considering whether or not to perform fixes | should be applied when considering whether or not to perform fixes | |||
and how. These changes MUST NOT be applied by an SMTP server that | and how. These changes MUST NOT be applied by an SMTP server that | |||
provides an intermediate relay function. | provides an intermediate relay function. | |||
In all cases, properly-operating clients supplying correct | In all cases, properly-operating clients supplying correct | |||
information are preferred to corrections by the SMTP server. In all | information are preferred to corrections by the SMTP server. In all | |||
cases, documentation of actions performed by the servers (in trace | cases, documentation SHOULD be provided in trace header fields and/or | |||
fields and/or header comments) is strongly encouraged. | header field comments for actions performed by the servers. | |||
7. Security Considerations | 7. Security Considerations | |||
7.1 Mail Security and Spoofing | 7.1. Mail Security and Spoofing | |||
SMTP mail is inherently insecure in that it is feasible for even | SMTP mail is inherently insecure in that it is feasible for even | |||
fairly casual users to negotiate directly with receiving and relaying | fairly casual users to negotiate directly with receiving and relaying | |||
SMTP servers and create messages that will trick a naive recipient | SMTP servers and create messages that will trick a naive recipient | |||
into believing that they came from somewhere else. Constructing such | into believing that they came from somewhere else. Constructing such | |||
a message so that the "spoofed" behavior cannot be detected by an | a message so that the "spoofed" behavior cannot be detected by an | |||
expert is somewhat more difficult, but not sufficiently so as to be a | expert is somewhat more difficult, but not sufficiently so as to be a | |||
deterrent to someone who is determined and knowledgeable. | deterrent to someone who is determined and knowledgeable. | |||
Consequently, as knowledge of Internet mail increases, so does the | Consequently, as knowledge of Internet mail increases, so does the | |||
knowledge that SMTP mail inherently cannot be authenticated, or | knowledge that SMTP mail inherently cannot be authenticated, or | |||
integrity checks provided, at the transport level. Real mail | integrity checks provided, at the transport level. Real mail | |||
security lies only in end-to-end methods involving the message | security lies only in end-to-end methods involving the message | |||
bodies, such as those which use digital signatures (see [14] and, | bodies, such as those which use digital signatures (see RFC1847 [24] | |||
e.g., PGP [4] or S/MIME [31]). | and, e.g., PGP in RFC 4880 [15] or S/MIME in RFC3851 [40]). | |||
Various protocol extensions and configuration options that provide | Various protocol extensions and configuration options that provide | |||
authentication at the transport level (e.g., from an SMTP client to | authentication at the transport level (e.g., from an SMTP client to | |||
an SMTP server) improve somewhat on the traditional situation | an SMTP server) improve somewhat on the traditional situation | |||
described above. However, unless they are accompanied by careful | described above. However, in general they only authenticate one | |||
handoffs of responsibility in a carefully-designed trust environment, | server to another rather than a chain of relays and servers, much | |||
they remain inherently weaker than end-to-end mechanisms which use | less authenticating users or user machines. Consequently, unless | |||
digitally signed messages rather than depending on the integrity of | they are accompanied by careful handoffs of responsibility in a | |||
the transport system. | carefully-designed trust environment, they remain inherently weaker | |||
than end-to-end mechanisms which use digitally signed messages rather | ||||
than depending on the integrity of the transport system. | ||||
Efforts to make it more difficult for users to set envelope return | Efforts to make it more difficult for users to set envelope return | |||
path and header "From" fields to point to valid addresses other than | path and header "From" fields to point to valid addresses other than | |||
their own are largely misguided: they frustrate legitimate | their own are largely misguided: they frustrate legitimate | |||
applications in which mail is sent by one user on behalf of another | applications in which mail is sent by one user on behalf of another, | |||
or in which error (or normal) replies should be directed to a special | in which error (or normal) replies should be directed to a special | |||
address. (Systems that provide convenient ways for users to alter | address, or in which a single message is sent to multiple recipients | |||
these fields on a per-message basis should attempt to establish a | on different hosts. (Systems that provide convenient ways for users | |||
primary and permanent mailbox address for the user so that Sender | to alter these header fields on a per-message basis should attempt to | |||
fields within the message data can be generated sensibly.) | establish a primary and permanent mailbox address for the user so | |||
that Sender header fields within the message data can be generated | ||||
sensibly.) | ||||
This specification does not further address the authentication issues | This specification does not further address the authentication issues | |||
associated with SMTP other than to advocate that useful functionality | associated with SMTP other than to advocate that useful functionality | |||
not be disabled in the hope of providing some small margin of | not be disabled in the hope of providing some small margin of | |||
protection against an ignorant user who is trying to fake mail. | protection against a user who is trying to fake mail. | |||
7.2 "Blind" Copies | 7.2. "Blind" Copies | |||
Addresses that do not appear in the message headers may appear in the | Addresses that do not appear in the message header section may appear | |||
RCPT commands to an SMTP server for a number of reasons. The two | in the RCPT commands to an SMTP server for a number of reasons. The | |||
most common involve the use of a mailing address as a "list exploder" | two most common involve the use of a mailing address as a "list | |||
(a single address that resolves into multiple addresses) and the | exploder" (a single address that resolves into multiple addresses) | |||
appearance of "blind copies". Especially when more than one RCPT | and the appearance of "blind copies". Especially when more than one | |||
command is present, and in order to avoid defeating some of the | RCPT command is present, and in order to avoid defeating some of the | |||
purpose of these mechanisms, SMTP clients and servers SHOULD NOT copy | purpose of these mechanisms, SMTP clients and servers SHOULD NOT copy | |||
the full set of RCPT command arguments into the headers, either as | the full set of RCPT command arguments into the header section, | |||
part of trace headers or as informational or private-extension | either as part of trace header fields or as informational or private- | |||
headers. Since this rule is often violated in practice, and cannot | extension header fields. Since this rule is often violated in | |||
be enforced, sending SMTP systems that are aware of "bcc" use MAY | practice, and cannot be enforced, sending SMTP systems that are aware | |||
find it helpful to send each blind copy as a separate message | of "bcc" use MAY find it helpful to send each blind copy as a | |||
transaction containing only a single RCPT command. | separate message transaction containing only a single RCPT command. | |||
There is no inherent relationship between either "reverse" (from | There is no inherent relationship between either "reverse" (from | |||
MAIL, SAML, etc., commands) or "forward" (RCPT) addresses in the SMTP | MAIL, SAML, etc., commands) or "forward" (RCPT) addresses in the SMTP | |||
transaction ("envelope") and the addresses in the headers. Receiving | transaction ("envelope") and the addresses in the header section. | |||
systems SHOULD NOT attempt to deduce such relationships and use them | Receiving systems SHOULD NOT attempt to deduce such relationships and | |||
to alter the headers of the message for delivery. The popular | use them to alter the header section of the message for delivery. | |||
"Apparently-to" header is a violation of this principle as well as a | The popular "Apparently-to" header field is a violation of this | |||
common source of unintended information disclosure and SHOULD NOT be | principle as well as a common source of unintended information | |||
used. | disclosure and SHOULD NOT be used. | |||
7.3 VRFY, EXPN, and Security | 7.3. VRFY, EXPN, and Security | |||
As discussed in section 3.5, individual sites may want to disable | As discussed in Section 3.5, individual sites may want to disable | |||
either or both of VRFY or EXPN for security reasons. As a corollary | either or both of VRFY or EXPN for security reasons (see below). As | |||
to the above, implementations that permit this MUST NOT appear to | a corollary to the above, implementations that permit this MUST NOT | |||
have verified addresses that are not, in fact, verified. If a site | appear to have verified addresses that are not, in fact, verified. | |||
disables these commands for security reasons, the SMTP server MUST | If a site disables these commands for security reasons, the SMTP | |||
return a 252 response, rather than a code that could be confused with | server MUST return a 252 response, rather than a code that could be | |||
successful or unsuccessful verification. | confused with successful or unsuccessful verification. | |||
Returning a 250 reply code with the address listed in the VRFY | Returning a 250 reply code with the address listed in the VRFY | |||
command after having checked it only for syntax violates this rule. | command after having checked it only for syntax violates this rule. | |||
Of course, an implementation that "supports" VRFY by always returning | Of course, an implementation that "supports" VRFY by always returning | |||
550 whether or not the address is valid is equally not in | 550 whether or not the address is valid is equally not in | |||
conformance. | conformance. | |||
Within the last few years, the contents of mailing lists have become | On the public Internet, the contents of mailing lists have become | |||
popular as an address information source for so-called "spammers." | popular as an address information source for so-called "spammers." | |||
The use of EXPN to "harvest" addresses has increased as list | The use of EXPN to "harvest" addresses has increased as list | |||
administrators have installed protections against inappropriate uses | administrators have installed protections against inappropriate uses | |||
of the lists themselves. Implementations SHOULD still provide | of the lists themselves. However, VRFY and EXPN are still useful for | |||
support for EXPN, but sites SHOULD carefully evaluate the tradeoffs. | authenticated users and within an administrative domain. For | |||
As authentication mechanisms are introduced into SMTP, some sites may | example, VRFY and EXPN are useful for performing internal audits of | |||
choose to make EXPN available only to authenticated requestors. | how email gets routed to check and to make sure no one is | |||
automatically forwarding sensitive mail outside the organization. | ||||
Sites implementating SMTP authentication may choose to make VRFY and | ||||
EXPN available only to authenticated requestors. Implementations | ||||
SHOULD still provide support for EXPN, but sites SHOULD carefully | ||||
evaluate the tradeoffs. | ||||
7.4 Information Disclosure in Announcements | Whether disabling VRFY provides any real marginal security depends on | |||
a series of other conditions. In many cases, RCPT commands can be | ||||
used to obtain the same information about address validity. On the | ||||
other hand, especially in situations where determination of address | ||||
validity for RCPT commands is deferred until after the DATA command | ||||
is received, RCPT may return no information at all, while VRFY is | ||||
expected to make a serious attempt to determine validity before | ||||
generating a response code (see discussion above). | ||||
7.4. Mail Rerouting Based on the 251 and 551 Response Codes | ||||
Before a client uses the 251 or 551 reply codes from a RCPT command | ||||
to automatically update its future behavior (e.g., updating the | ||||
user's address book), it should be certain of the server's | ||||
authenticity. If it does not, it may be subject to a man in the | ||||
middle attack. | ||||
7.5. Information Disclosure in Announcements | ||||
There has been an ongoing debate about the tradeoffs between the | There has been an ongoing debate about the tradeoffs between the | |||
debugging advantages of announcing server type and version (and, | debugging advantages of announcing server type and version (and, | |||
sometimes, even server domain name) in the greeting response or in | sometimes, even server domain name) in the greeting response or in | |||
response to the HELP command and the disadvantages of exposing | response to the HELP command and the disadvantages of exposing | |||
information that might be useful in a potential hostile attack. The | information that might be useful in a potential hostile attack. The | |||
utility of the debugging information is beyond doubt. Those who | utility of the debugging information is beyond doubt. Those who | |||
argue for making it available point out that it is far better to | argue for making it available point out that it is far better to | |||
actually secure an SMTP server rather than hope that trying to | actually secure an SMTP server rather than hope that trying to | |||
conceal known vulnerabilities by hiding the server's precise identity | conceal known vulnerabilities by hiding the server's precise identity | |||
will provide more protection. Sites are encouraged to evaluate the | will provide more protection. Sites are encouraged to evaluate the | |||
tradeoff with that issue in mind; implementations are strongly | tradeoff with that issue in mind; implementations SHOULD minimally | |||
encouraged to minimally provide for making type and version | provide for making type and version information available in some way | |||
information available in some way to other network hosts. | to other network hosts. | |||
7.5 Information Disclosure in Trace Fields | 7.6. Information Disclosure in Trace Fields | |||
In some circumstances, such as when mail originates from within a LAN | In some circumstances, such as when mail originates from within a LAN | |||
whose hosts are not directly on the public Internet, trace | whose hosts are not directly on the public Internet, trace | |||
("Received") fields produced in conformance with this specification | ("Received") header fields produced in conformance with this | |||
may disclose host names and similar information that would not | specification may disclose host names and similar information that | |||
normally be available. This ordinarily does not pose a problem, but | would not normally be available. This ordinarily does not pose a | |||
sites with special concerns about name disclosure should be aware of | problem, but sites with special concerns about name disclosure should | |||
it. Also, the optional FOR clause should be supplied with caution or | be aware of it. Also, the optional FOR clause should be supplied | |||
not at all when multiple recipients are involved lest it | with caution or not at all when multiple recipients are involved lest | |||
inadvertently disclose the identities of "blind copy" recipients to | it inadvertently disclose the identities of "blind copy" recipients | |||
others. | to others. | |||
7.6 Information Disclosure in Message Forwarding | 7.7. Information Disclosure in Message Forwarding | |||
As discussed in section 3.4, use of the 251 or 551 reply codes to | As discussed in Section 3.4, use of the 251 or 551 reply codes to | |||
identify the replacement address associated with a mailbox may | identify the replacement address associated with a mailbox may | |||
inadvertently disclose sensitive information. Sites that are | inadvertently disclose sensitive information. Sites that are | |||
concerned about those issues should ensure that they select and | concerned about those issues should ensure that they select and | |||
configure servers appropriately. | configure servers appropriately. | |||
7.7 Scope of Operation of SMTP Servers | 7.8. Resistance to Attacks | |||
In recent years, there has been an increase of attacks on SMTP | ||||
servers, either in conjunction with attempts to discover addresses | ||||
for sending unsolicited messages or simply to make the servers | ||||
inaccessible to others (i.e., as an application-level denial of | ||||
service attack). While the means of doing so are beyond the scope of | ||||
this standard, rational operational behavior requires that servers be | ||||
permitted to detect such attacks and take action to defend | ||||
themselves. For example, if a server determines that a large number | ||||
of RCPT TO commands are being sent, most or all with invalid | ||||
addresses, as part of such an attack, it would be reasonable for the | ||||
server to close the connection after generating an appropriate number | ||||
of 5yz (normally 550) replies. | ||||
7.9. Scope of Operation of SMTP Servers | ||||
It is a well-established principle that an SMTP server may refuse to | It is a well-established principle that an SMTP server may refuse to | |||
accept mail for any operational or technical reason that makes sense | accept mail for any operational or technical reason that makes sense | |||
to the site providing the server. However, cooperation among sites | to the site providing the server. However, cooperation among sites | |||
and installations makes the Internet possible. If sites take | and installations makes the Internet possible. If sites take | |||
excessive advantage of the right to reject traffic, the ubiquity of | excessive advantage of the right to reject traffic, the ubiquity of | |||
email availability (one of the strengths of the Internet) will be | email availability (one of the strengths of the Internet) will be | |||
threatened; considerable care should be taken and balance maintained | threatened; considerable care should be taken and balance maintained | |||
if a site decides to be selective about the traffic it will accept | if a site decides to be selective about the traffic it will accept | |||
and process. | and process. | |||
In recent years, use of the relay function through arbitrary sites | In recent years, use of the relay function through arbitrary sites | |||
has been used as part of hostile efforts to hide the actual origins | has been used as part of hostile efforts to hide the actual origins | |||
of mail. Some sites have decided to limit the use of the relay | of mail. Some sites have decided to limit the use of the relay | |||
function to known or identifiable sources, and implementations SHOULD | function to known or identifiable sources, and implementations SHOULD | |||
provide the capability to perform this type of filtering. When mail | provide the capability to perform this type of filtering. When mail | |||
is rejected for these or other policy reasons, a 550 code SHOULD be | is rejected for these or other policy reasons, a 550 code SHOULD be | |||
used in response to EHLO, MAIL, or RCPT as appropriate. | used in response to EHLO (or HELO), MAIL, or RCPT as appropriate. | |||
8. IANA Considerations | 8. IANA Considerations | |||
IANA will maintain three registries in support of this specification. | IANA will maintain three registries in support of this specification, | |||
The first consists of SMTP service extensions with the associated | all of which were created for RFC2821 or earlier. This document | |||
keywords, and, as needed, parameters and verbs. As specified in | expands the third one as specified below. The registry references | |||
section 2.2.2, no entry may be made in this registry that starts in | listed are as of the time of publication; IANA does not guarantee the | |||
an "X". Entries may be made only for service extensions (and | locations associated with the URLs. The registries are | |||
associated keywords, parameters, or verbs) that are defined in | ||||
standards-track or experimental RFCs specifically approved by the | ||||
IESG for this purpose. | ||||
The second registry consists of "tags" that identify forms of domain | o The first, "Simple Mail Transfer Protocol (SMTP) Service | |||
literals other than those for IPv4 addresses (specified in RFC 821 | Extensions" [45], consists of SMTP service extensions with the | |||
and in this document) and IPv6 addresses (specified in this | associated keywords, and, as needed, parameters and verbs. As | |||
document). Additional literal types require standardization before | specified in Section 2.2.2, no entry may be made in this registry | |||
being used; none are anticipated at this time. | that starts in an "X". Entries may be made only for service | |||
extensions (and associated keywords, parameters, or verbs) that | ||||
are defined in standards-track or experimental RFCs specifically | ||||
approved by the IESG for this purpose. | ||||
The third, established by RFC 821 and renewed by this specification, | o The second registry [46], consists of "tags" that identify forms | |||
is a registry of link and protocol identifiers to be used with the | of domain literals other than those for IPv4 addresses (specified | |||
"via" and "with" subclauses of the time stamp ("Received: header") | in RFC 821 and in this document) and IPv6 addresses (specified in | |||
described in section 4.4. Link and protocol identifiers in addition | this document). Additional literal types require standardization | |||
to those specified in this document may be registered only by | before being used; none are anticipated at this time. | |||
o The third, "Mail Transmission Types" [45], established by RFC 821 | ||||
and renewed by this specification, is a registry of link and | ||||
protocol identifiers to be used with the "via" and "with" | ||||
subclauses of the time stamp ("Received:" header field) described | ||||
in Section 4.4. Link and protocol identifiers in addition to | ||||
those specified in this document may be registered only by | ||||
standardization or by way of an RFC-documented, IESG-approved, | standardization or by way of an RFC-documented, IESG-approved, | |||
Experimental protocol extension. | Experimental protocol extension. This name space is for | |||
identification and not limited in size: the IESG is encouraged to | ||||
approve on the basis of clear documentation and a distinct method | ||||
rather than preferences about the properties of the method itself. | ||||
9. References | An additional subsection will be added to the "VIA link types" and | |||
"WITH protocol types" subsections of this registry to contain | ||||
registrations of "Additional-registered-clauses" as described | ||||
above. The registry will contain clause names, a description, a | ||||
summary of the syntax of the associated String, and a reference. | ||||
As new clauses are defined, they may, in principle, specify | ||||
creation of their own registries if the Strings consist of | ||||
reserved terms or keywords rather than less-restricted strings. | ||||
As with link and protocol identifiers, additional clauses may be | ||||
registered only by standardization or by way of an RFC-documented, | ||||
IESG-approved, Experimental protocol extension. The additional | ||||
clause name space is for identification and is not limited in | ||||
size: the IESG is encouraged to approve on the basis of clear | ||||
documentation, actual use or strong signs that the clause will be | ||||
used, and a distinct requirement rather than preferences about the | ||||
properties of the clause itself. | ||||
[1] American National Standards Institute (formerly United States of | In addition, if additional trace header fields (i.e., in addition to | |||
America Standards Institute), X3.4, 1968, "USA Code for | Return-path and Received) are ever created, those trace fields MUST | |||
Information Interchange". ANSI X3.4-1968 has been replaced by | be added to the IANA registry established by BCP 90 (RFC3864) [10] | |||
newer versions with slight modifications, but the 1968 version | for use with RFC2822 [11]. | |||
remains definitive for the Internet. | ||||
[2] Braden, R., "Requirements for Internet hosts - application and | 9. Acknowledgments | |||
support", STD 3, RFC 1123, October 1989. | ||||
[3] Butler, M., Chase, D., Goldberger, J., Postel, J. and J. | Many people contributed to the development of RFC 2821. That | |||
Reynolds, "Post Office Protocol - version 2", RFC 937, February | document should be consulted for those acknowledgments. For the | |||
1985. | present draft, the editor and the community owe thanks to Dawn Mann | |||
and Tony Hansen who assisted in the very painful process of editing | ||||
and converting the internal format of the document from one system to | ||||
another. | ||||
[4] Callas, J., Donnerhacke, L., Finney, H. and R. Thayer, "OpenPGP | Many people made comments or suggestions on the mailing list or in | |||
Message Format", RFC 2440, November 1998. | notes to the author. Important corrections or clarifications were | |||
suggested by several people, including Matti Aarnio, Glenn Anderson, | ||||
Derek J. Balling, Alex van den Bogaerdt, Stephane Bortzmeyer, Vint | ||||
Cerf, Jutta Degener, Steve Dorner, Lisa Dusseault, Frank Ellerman, | ||||
Ned Freed, Randy Gellens, Sabahattin Gucukoglu, Philip Guenther, Arnt | ||||
Gulbrandsen, Eric Hall, Richard O. Hammer, Tony Hansen, Peter J. | ||||
Holzer, Kari Hurtta, Bryon Roche Kain, Valdis Kletnieks, Mathias | ||||
Koerber, John Leslie, Bruce Lilly, Jeff Macdonald, Mark E. Mallett, | ||||
Mark Martinec, S. Moonesamy, Lyndon Nerenberg, Chris Newman, Douglas | ||||
Otis, Pete Resnick, Robert A. Rosenberg, Vince Sabio, Hector Santos, | ||||
David F. Skoll, Paul Smith, and Brett Watson. | ||||
[5] Crispin, M., "Interactive Mail Access Protocol - Version 2", RFC | The efforts of the Area Directors -- Lisa Dusseault, Ted Hardie, and | |||
1176, August 1990. | Chris Newman -- to get this effort restarted and keep it moving, and | |||
of an ad hoc committee with the same purpose, are gratefully | ||||
acknowledged. The members of that committee were (in alphabetical | ||||
order) Dave Crocker, Cyrus Daboo, Tony Finch, Ned Freed, Randall | ||||
Gellens, Tony Hansen, the author, and Alexey Melnikov. Tony Hansen | ||||
also acted as ad hoc chair on the mailing list reviewing this | ||||
document; without his efforts, sense of balance and fairness, and | ||||
patience, it clearly would not have been possible. | ||||
[6] Crispin, M., "Internet Message Access Protocol - Version 4", RFC | 10. References | |||
2060, December 1996. | ||||
[7] Crocker, D., "Standard for the Format of ARPA Internet Text | 10.1. Normative References | |||
Messages", RFC 822, August 1982. | ||||
[8] Crocker, D. and P. Overell, Eds., "Augmented BNF for Syntax | [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
Specifications: ABNF", RFC 2234, November 1997. | Levels", BCP 14, RFC 2119, March 1997. | |||
[9] De Winter, J., "SMTP Service Extension for Remote Message Queue | [2] American National Standards Institute (formerly United States | |||
Starting", RFC 1985, August 1996. | of America Standards Institute), "USA Code for Information | |||
Interchange", ANSI X3.4-1968, 1968. | ||||
[10] Fajman, R., "An Extensible Message Format for Message | ANSI X3.4-1968 has been replaced by newer versions with slight | |||
Disposition Notifications", RFC 2298, March 1998. | modifications, but the 1968 version remains definitive for the | |||
Internet. | ||||
[11] Freed, N, "Behavior of and Requirements for Internet Firewalls", | [3] Braden, R., "Requirements for Internet Hosts - Application and | |||
RFC 2979, October 2000. | Support", STD 3, RFC 1123, October 1989. | |||
[12] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [4] Klensin, J., Freed, N., and K. Moore, "SMTP Service Extension | |||
Extensions (MIME) Part One: Format of Internet Message Bodies", | for Message Size Declaration", STD 10, RFC 1870, November 1995. | |||
RFC 2045, December 1996. | ||||
[13] Freed, N., "SMTP Service Extension for Command Pipelining", RFC | [5] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
2920, September 2000. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
[14] Galvin, J., Murphy, S., Crocker, S. and N. Freed, "Security | [6] Hinden, R. and S. Deering, "IP Version 6 Addressing | |||
Multiparts for MIME: Multipart/Signed and Multipart/Encrypted", | Architecture", RFC 4291, February 2006. | |||
RFC 1847, October 1995. | ||||
[15] Gellens, R. and J. Klensin, "Message Submission", RFC 2476, | [7] Mockapetris, P., "Domain names - implementation and | |||
December 1998. | specification", STD 13, RFC 1035, November 1987. | |||
[16] Kille, S., "Mapping between X.400 and RFC822/MIME", RFC 2156, | [8] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, | |||
January 1998. | August 1982. | |||
[17] Hinden, R and S. Deering, Eds. "IP Version 6 Addressing | [9] Newman, C., "ESMTP and LMTP Transmission Types Registration", | |||
Architecture", RFC 2373, July 1998. | RFC 3848, July 2004. | |||
[18] Klensin, J., Freed, N. and K. Moore, "SMTP Service Extension for | [10] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
Message Size Declaration", STD 10, RFC 1870, November 1995. | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
September 2004. | ||||
[19] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D. Crocker, | [11] Resnick, P., "Internet Message Format", | |||
"SMTP Service Extensions", STD 10, RFC 1869, November 1995. | draft-resnick-2822upd-06 (work in progress), February 2008. | |||
[20] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D. Crocker, | [[Note in Draft: RFC Editor, please straighten this out when | |||
"SMTP Service Extension for 8bit-MIMEtransport", RFC 1652, July | 2822bis makes it through the system. Since this is a normative | |||
1994. | reference to an I-D, we assume you will hold publication until | |||
then.]] | ||||
10.2. Informative References | ||||
[12] Moore, K., "Simple Mail Transfer Protocol (SMTP) Service | ||||
Extension for Delivery Status Notifications (DSNs)", RFC 3461, | ||||
January 2003. | ||||
[13] Moore, K. and G. Vaudreuil, "An Extensible Message Format for | ||||
Delivery Status Notifications", RFC 3464, January 2003. | ||||
[14] Nakamura, M. and J. Hagino, "SMTP Operational Experience in | ||||
Mixed IPv4/v6 Environments", RFC 3974, January 2005. | ||||
[15] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. | ||||
Thayer, "OpenPGP Message Format", RFC 4880, November 2007. | ||||
[16] Crocker, D., "Standard for the format of ARPA Internet text | ||||
messages", STD 11, RFC 822, August 1982. | ||||
[17] Butler, M., Postel, J., Chase, D., Goldberger, J., and J. | ||||
Reynolds, "Post Office Protocol: Version 2", RFC 937, | ||||
February 1985. | ||||
[18] Postel, J. and J. Reynolds, "File Transfer Protocol", STD 9, | ||||
RFC 959, October 1985. | ||||
[19] Partridge, C., "Mail routing and the domain system", RFC 974, | ||||
January 1986. | ||||
[20] Partridge, C., "Duplicate messages and SMTP", RFC 1047, | ||||
February 1988. | ||||
[21] Lambert, M., "PCMAIL: A distributed mail system for personal | [21] Lambert, M., "PCMAIL: A distributed mail system for personal | |||
computers", RFC 1056, July 1988. | computers", RFC 1056, June 1988. | |||
[22] Mockapetris, P., "Domain names - implementation and | [22] Crispin, M., "Interactive Mail Access Protocol: Version 2", | |||
specification", STD 13, RFC 1035, November 1987. | RFC 1176, August 1990. | |||
Mockapetris, P., "Domain names - concepts and facilities", STD | [23] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D. | |||
13, RFC 1034, November 1987. | Crocker, "SMTP Service Extension for 8bit-MIMEtransport", | |||
RFC 1652, July 1994. | ||||
[23] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part | [24] Galvin, J., Murphy, S., Crocker, S., and N. Freed, "Security | |||
Multiparts for MIME: Multipart/Signed and Multipart/Encrypted", | ||||
RFC 1847, October 1995. | ||||
[25] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D. | ||||
Crocker, "SMTP Service Extensions", STD 10, RFC 1869, | ||||
November 1995. | ||||
[26] Myers, J. and M. Rose, "Post Office Protocol - Version 3", | ||||
STD 53, RFC 1939, May 1996. | ||||
[27] De Winter, J., "SMTP Service Extension for Remote Message Queue | ||||
Starting", RFC 1985, August 1996. | ||||
[28] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | ||||
Extensions (MIME) Part One: Format of Internet Message Bodies", | ||||
RFC 2045, November 1996. | ||||
[29] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part | ||||
Three: Message Header Extensions for Non-ASCII Text", RFC 2047, | Three: Message Header Extensions for Non-ASCII Text", RFC 2047, | |||
December 1996. | November 1996. | |||
[24] Moore, K., "SMTP Service Extension for Delivery Status | [30] Kille, S., "MIXER (Mime Internet X.400 Enhanced Relay): Mapping | |||
Notifications", RFC 1891, January 1996. | between X.400 and RFC 822/MIME", RFC 2156, January 1998. | |||
[25] Moore, K., and G. Vaudreuil, "An Extensible Message Format for | [31] Elz, R. and R. Bush, "Clarifications to the DNS Specification", | |||
Delivery Status Notifications", RFC 1894, January 1996. | RFC 2181, July 1997. | |||
[26] Myers, J. and M. Rose, "Post Office Protocol - Version 3", STD | [32] Freed, N. and K. Moore, "MIME Parameter Value and Encoded Word | |||
53, RFC 1939, May 1996. | Extensions: Character Sets, Languages, and Continuations", | |||
RFC 2231, November 1997. | ||||
[27] Partridge, C., "Mail routing and the domain system", RFC 974, | [33] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, | |||
January 1986. | April 2001. | |||
[28] Partridge, C., "Duplicate messages and SMTP", RFC 1047, February | [34] Freed, N., "SMTP Service Extension for Command Pipelining", | |||
1988. | STD 60, RFC 2920, September 2000. | |||
[29] Postel, J., ed., "Transmission Control Protocol - DARPA Internet | [35] Freed, N., "Behavior of and Requirements for Internet | |||
Program Protocol Specification", STD 7, RFC 793, September 1981. | Firewalls", RFC 2979, October 2000. | |||
[30] Postel, J., "Simple Mail Transfer Protocol", RFC 821, August | [36] Vaudreuil, G., "SMTP Service Extensions for Transmission of | |||
1982. | Large and Binary MIME Messages", RFC 3030, December 2000. | |||
[31] Ramsdell, B., Ed., "S/MIME Version 3 Message Specification", RFC | [37] Vaudreuil, G., "Enhanced Mail System Status Codes", RFC 3463, | |||
2633, June 1999. | January 2003. | |||
[32] Resnick, P., Ed., "Internet Message Format", RFC 2822, April | [38] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | |||
2001. | 4rev1", RFC 3501, March 2003. | |||
[33] Vaudreuil, G., "SMTP Service Extensions for Transmission of | [39] Hansen, T. and G. Vaudreuil, "Message Disposition | |||
Large and Binary MIME Messages", RFC 1830, August 1995. | Notification", RFC 3798, May 2004. | |||
[34] Vaudreuil, G., "Enhanced Mail System Status Codes", RFC 1893, | [40] Ramsdell, B., "Secure/Multipurpose Internet Mail Extensions | |||
January 1996. | (S/MIME) Version 3.1 Message Specification", RFC 3851, | |||
July 2004. | ||||
10. Editor's Address | [41] Wong, M. and W. Schlitt, "Sender Policy Framework (SPF) for | |||
Authorizing Use of Domains in E-Mail, Version 1", RFC 4408, | ||||
April 2006. | ||||
John C. Klensin | [42] Gellens, R. and J. Klensin, "Message Submission for Mail", | |||
AT&T Laboratories | RFC 4409, April 2006. | |||
99 Bedford St | ||||
Boston, MA 02111 USA | ||||
Phone: 617-574-3076 | [43] Fenton, J., "Analysis of Threats Motivating DomainKeys | |||
EMail: klensin@research.att.com | Identified Mail (DKIM)", RFC 4686, September 2006. | |||
11. Acknowledgments | [44] Allman, E., Callas, J., Delany, M., Libbey, M., Fenton, J., and | |||
M. Thomas, "DomainKeys Identified Mail (DKIM) Signatures", | ||||
RFC 4871, May 2007. | ||||
Many people worked long and hard on the many iterations of this | [45] Internet Assigned Number Authority (IANA), "IANA Mail | |||
document. There was wide-ranging debate in the IETF DRUMS Working | Parameters", 2007, | |||
Group, both on its mailing list and in face to face discussions, | <http://www.iana.example.org/assignments/mail-parameters>. | |||
about many technical issues and the role of a revised standard for | ||||
Internet mail transport, and many contributors helped form the | ||||
wording in this specification. The hundreds of participants in the | ||||
many discussions since RFC 821 was produced are too numerous to | ||||
mention, but they all helped this document become what it is. | ||||
APPENDICES | [46] Internet Assigned Number Authority (IANA), "Address Literal | |||
Tags", 2007, | ||||
<http://www.iana.org/assignments/address-literal-tags>. | ||||
A. TCP Transport Service | Appendix A. TCP Transport Service | |||
The TCP connection supports the transmission of 8-bit bytes. The | The TCP connection supports the transmission of 8-bit bytes. The | |||
SMTP data is 7-bit ASCII characters. Each character is transmitted | SMTP data is 7-bit ASCII characters. Each character is transmitted | |||
as an 8-bit byte with the high-order bit cleared to zero. Service | as an 8-bit byte with the high-order bit cleared to zero. Service | |||
extensions may modify this rule to permit transmission of full 8-bit | extensions may modify this rule to permit transmission of full 8-bit | |||
data bytes as part of the message body, but not in SMTP commands or | data bytes as part of the message body, or, if specifically designed | |||
responses. | to do so, in in SMTP commands or responses. | |||
B. Generating SMTP Commands from RFC 822 Headers | Appendix B. Generating SMTP Commands from RFC 822 Header Fields | |||
Some systems use RFC 822 headers (only) in a mail submission | Some systems use an RFC 822 header section (only) in a mail | |||
protocol, or otherwise generate SMTP commands from RFC 822 headers | submission protocol, or otherwise generate SMTP commands from RFC 822 | |||
when such a message is handed to an MTA from a UA. While the MTA-UA | header fields when such a message is handed to an MTA from a UA. | |||
protocol is a private matter, not covered by any Internet Standard, | While the MTA-UA protocol is a private matter, not covered by any | |||
there are problems with this approach. For example, there have been | Internet Standard, there are problems with this approach. For | |||
repeated problems with proper handling of "bcc" copies and | example, there have been repeated problems with proper handling of | |||
redistribution lists when information that conceptually belongs to a | "bcc" copies and redistribution lists when information that | |||
mail envelopes is not separated early in processing from header | conceptually belongs to the mail envelope is not separated early in | |||
information (and kept separate). | processing from header field information (and kept separate). | |||
It is recommended that the UA provide its initial ("submission | It is recommended that the UA provide its initial ("submission | |||
client") MTA with an envelope separate from the message itself. | client") MTA with an envelope separate from the message itself. | |||
However, if the envelope is not supplied, SMTP commands SHOULD be | However, if the envelope is not supplied, SMTP commands SHOULD be | |||
generated as follows: | generated as follows: | |||
1. Each recipient address from a TO, CC, or BCC header field SHOULD | 1. Each recipient address from a TO, CC, or BCC header field SHOULD | |||
be copied to a RCPT command (generating multiple message copies if | be copied to a RCPT command (generating multiple message copies | |||
that is required for queuing or delivery). This includes any | if that is required for queuing or delivery). This includes any | |||
addresses listed in a RFC 822 "group". Any BCC fields SHOULD then | addresses listed in a RFC 822 "group". Any BCC header fields | |||
be removed from the headers. Once this process is completed, the | SHOULD then be removed from the header section. Once this | |||
remaining headers SHOULD be checked to verify that at least one | process is completed, the remaining header fields SHOULD be | |||
To:, Cc:, or Bcc: header remains. If none do, then a bcc: header | checked to verify that at least one To:, Cc:, or Bcc: header | |||
with no additional information SHOULD be inserted as specified in | field remains. If none do, then a bcc: header field with no | |||
[32]. | additional information SHOULD be inserted as specified in [11]. | |||
2. The return address in the MAIL command SHOULD, if possible, be | 2. The return address in the MAIL command SHOULD, if possible, be | |||
derived from the system's identity for the submitting (local) | derived from the system's identity for the submitting (local) | |||
user, and the "From:" header field otherwise. If there is a | user, and the "From:" header field otherwise. If there is a | |||
system identity available, it SHOULD also be copied to the Sender | system identity available, it SHOULD also be copied to the Sender | |||
header field if it is different from the address in the From | header field if it is different from the address in the From | |||
header field. (Any Sender field that was already there SHOULD be | header field. (Any Sender header field that was already there | |||
removed.) Systems may provide a way for submitters to override | SHOULD be removed.) Systems may provide a way for submitters to | |||
the envelope return address, but may want to restrict its use to | override the envelope return address, but may want to restrict | |||
privileged users. This will not prevent mail forgery, but may | its use to privileged users. This will not prevent mail forgery, | |||
lessen its incidence; see section 7.1. | but may lessen its incidence; see Section 7.1. | |||
When an MTA is being used in this way, it bears responsibility for | When an MTA is being used in this way, it bears responsibility for | |||
ensuring that the message being transmitted is valid. The mechanisms | ensuring that the message being transmitted is valid. The mechanisms | |||
for checking that validity, and for handling (or returning) messages | for checking that validity, and for handling (or returning) messages | |||
that are not valid at the time of arrival, are part of the MUA-MTA | that are not valid at the time of arrival, are part of the MUA-MTA | |||
interface and not covered by this specification. | interface and not covered by this specification. | |||
A submission protocol based on Standard RFC 822 information alone | A submission protocol based on Standard RFC 822 information alone | |||
MUST NOT be used to gateway a message from a foreign (non-SMTP) mail | MUST NOT be used to gateway a message from a foreign (non-SMTP) mail | |||
system into an SMTP environment. Additional information to construct | system into an SMTP environment. Additional information to construct | |||
an envelope must come from some source in the other environment, | an envelope must come from some source in the other environment, | |||
whether supplemental headers or the foreign system's envelope. | whether supplemental header fields or the foreign system's envelope. | |||
Attempts to gateway messages using only their header "to" and "cc" | Attempts to gateway messages using only their header "To" and "Cc" | |||
fields have repeatedly caused mail loops and other behavior adverse | fields have repeatedly caused mail loops and other behavior adverse | |||
to the proper functioning of the Internet mail environment. These | to the proper functioning of the Internet mail environment. These | |||
problems have been especially common when the message originates from | problems have been especially common when the message originates from | |||
an Internet mailing list and is distributed into the foreign | an Internet mailing list and is distributed into the foreign | |||
environment using envelope information. When these messages are then | environment using envelope information. When these messages are then | |||
processed by a header-only remailer, loops back to the Internet | processed by a header-section-only remailer, loops back to the | |||
environment (and the mailing list) are almost inevitable. | Internet environment (and the mailing list) are almost inevitable. | |||
C. Source Routes | Appendix C. Source Routes | |||
Historically, the <reverse-path> was a reverse source routing list of | Historically, the <reverse-path> was a reverse source routing list of | |||
hosts and a source mailbox. The first host in the <reverse-path> | hosts and a source mailbox. The first host in the <reverse-path> was | |||
SHOULD be the host sending the MAIL command. Similarly, the | historically the host sending the MAIL command; today, source routes | |||
<forward-path> may be a source routing lists of hosts and a | SHOULD NOT appear in the reverse-path. Similarly, the <forward-path> | |||
destination mailbox. However, in general, the <forward-path> SHOULD | may be a source routing lists of hosts and a destination mailbox. | |||
contain only a mailbox and domain name, relying on the domain name | However, in general, the <forward-path> SHOULD contain only a mailbox | |||
system to supply routing information if required. The use of source | and domain name, relying on the domain name system to supply routing | |||
routes is deprecated; while servers MUST be prepared to receive and | information if required. The use of source routes is deprecated (see | |||
handle them as discussed in section 3.3 and F.2, clients SHOULD NOT | Appendix F.2); while servers MUST be prepared to receive and handle | |||
transmit them and this section was included only to provide context. | them as discussed in Section 3.3 and Appendix F.2, clients SHOULD NOT | |||
transmit them and this section is included in the current | ||||
specification only to provide context. It has been modified somewhat | ||||
from the material in RFC 821 to prevent server actions that might | ||||
confuse clients or subsequent servers that do not expect a full | ||||
source route implementation. | ||||
For relay purposes, the forward-path may be a source route of the | For relay purposes, the forward-path may be a source route of the | |||
form "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE MUST BE fully- | form "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE MUST be fully- | |||
qualified domain names. This form is used to emphasize the | qualified domain names. This form is used to emphasize the | |||
distinction between an address and a route. The mailbox is an | distinction between an address and a route. The mailbox (here, JOE@ | |||
absolute address, and the route is information about how to get | THREE) is an absolute address, and the route is information about how | |||
there. The two concepts should not be confused. | to get there. The two concepts should not be confused. | |||
If source routes are used, RFC 821 and the text below should be | If source routes are used, RFC 821 and the text below should be | |||
consulted for the mechanisms for constructing and updating the | consulted for the mechanisms for constructing and updating the | |||
forward- and reverse-paths. | forward-path. A server that is reached by means of a source route | |||
(e.g., its domain name appears first in the list in the forward-path) | ||||
The SMTP server transforms the command arguments by moving its own | MUST remove its domain name from any forward-paths in which that | |||
identifier (its domain name or that of any domain for which it is | domain name appears before forwarding the message and MAY remove all | |||
acting as a mail exchanger), if it appears, from the forward-path to | other source routing information. The reverse-path SHOULD NOT be | |||
the beginning of the reverse-path. | updated by servers conforming to this specification. | |||
Notice that the forward-path and reverse-path appear in the SMTP | Notice that the forward-path and reverse-path appear in the SMTP | |||
commands and replies, but not necessarily in the message. That is, | commands and replies, but not necessarily in the message. That is, | |||
there is no need for these paths and especially this syntax to appear | there is no need for these paths and especially this syntax to appear | |||
in the "To:" , "From:", "CC:", etc. fields of the message header. | in the "To:" , "From:", "CC:", etc. fields of the message header | |||
Conversely, SMTP servers MUST NOT derive final message delivery | section. Conversely, SMTP servers MUST NOT derive final message | |||
information from message header fields. | routing information from message header fields. | |||
When the list of hosts is present, it is a "reverse" source route and | When the list of hosts is present despite the recommendations above, | |||
indicates that the mail was relayed through each host on the list | it is a "reverse" source route and indicates that the mail was | |||
(the first host in the list was the most recent relay). This list is | relayed through each host on the list (the first host in the list was | |||
used as a source route to return non-delivery notices to the sender. | the most recent relay). This list is used as a source route to | |||
As each relay host adds itself to the beginning of the list, it MUST | return non-delivery notices to the sender. If, contrary to the | |||
use its name as known in the transport environment to which it is | recommendations here, a relay host adds itself to the beginning of | |||
relaying the mail rather than that of the transport environment from | the list, it MUST use its name as known in the transport environment | |||
which the mail came (if they are different). | to which it is relaying the mail rather than that of the transport | |||
environment from which the mail came (if they are different). Note | ||||
that a situation could easily arise in which some relay hosts add | ||||
their names to the reverse source route and others do not, generating | ||||
discontinuities in the routing list. This is another reason why | ||||
servers needing to return a message SHOULD ignore the source route | ||||
entirely and simply use the domain as specified in the Mailbox. | ||||
D. Scenarios | Appendix D. Scenarios | |||
This section presents complete scenarios of several types of SMTP | This section presents complete scenarios of several types of SMTP | |||
sessions. In the examples, "C:" indicates what is said by the SMTP | sessions. In the examples, "C:" indicates what is said by the SMTP | |||
client, and "S:" indicates what is said by the SMTP server. | client, and "S:" indicates what is said by the SMTP server. | |||
D.1 A Typical SMTP Transaction Scenario | D.1. A Typical SMTP Transaction Scenario | |||
This SMTP example shows mail sent by Smith at host bar.com, to Jones, | This SMTP example shows mail sent by Smith at host bar.example.com, to Jones, | |||
Green, and Brown at host foo.com. Here we assume that host bar.com | Green, and Brown at host foo.example.com. Here we assume that host bar.example.com | |||
contacts host foo.com directly. The mail is accepted for Jones and | contacts host foo.example.com directly. The mail is accepted for Jones and | |||
Brown. Green does not have a mailbox at host foo.com. | Brown. Green does not have a mailbox at host foo.example.com. | |||
S: 220 foo.com Simple Mail Transfer Service Ready | S: 220 foo.example.com Simple Mail Transfer Service Ready | |||
C: EHLO bar.com | C: EHLO bar.example.com | |||
S: 250-foo.com greets bar.com | S: 250-foo.example.com greets bar.example.com | |||
S: 250-8BITMIME | S: 250-8BITMIME | |||
S: 250-SIZE | S: 250-SIZE | |||
S: 250-DSN | S: 250-DSN | |||
S: 250 HELP | S: 250 HELP | |||
C: MAIL FROM:<Smith@bar.com> | C: MAIL FROM:<Smith@bar.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<Jones@foo.com> | C: RCPT TO:<Jones@foo.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<Green@foo.com> | C: RCPT TO:<Green@foo.example.com> | |||
S: 550 No such user here | S: 550 No such user here | |||
C: RCPT TO:<Brown@foo.com> | C: RCPT TO:<Brown@foo.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: DATA | C: DATA | |||
S: 354 Start mail input; end with <CRLF>.<CRLF> | S: 354 Start mail input; end with <CRLF>.<CRLF> | |||
C: Blah blah blah... | C: Blah blah blah... | |||
C: ...etc. etc. etc. | C: ...etc. etc. etc. | |||
C: . | C: . | |||
S: 250 OK | S: 250 OK | |||
C: QUIT | C: QUIT | |||
S: 221 foo.com Service closing transmission channel | S: 221 foo.example.com Service closing transmission channel | |||
D.2 Aborted SMTP Transaction Scenario | D.2. Aborted SMTP Transaction Scenario | |||
S: 220 foo.com Simple Mail Transfer Service Ready | S: 220 foo.example.com Simple Mail Transfer Service Ready | |||
C: EHLO bar.com | C: EHLO bar.example.com | |||
S: 250-foo.com greets bar.com | S: 250-foo.example.com greets bar.example.com | |||
S: 250-8BITMIME | S: 250-8BITMIME | |||
S: 250-SIZE | S: 250-SIZE | |||
S: 250-DSN | S: 250-DSN | |||
S: 250 HELP | S: 250 HELP | |||
C: MAIL FROM:<Smith@bar.com> | C: MAIL FROM:<Smith@bar.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<Jones@foo.com> | C: RCPT TO:<Jones@foo.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<Green@foo.com> | C: RCPT TO:<Green@foo.example.com> | |||
S: 550 No such user here | S: 550 No such user here | |||
C: RSET | C: RSET | |||
S: 250 OK | S: 250 OK | |||
C: QUIT | C: QUIT | |||
S: 221 foo.com Service closing transmission channel | S: 221 foo.example.com Service closing transmission channel | |||
D.3 Relayed Mail Scenario | D.3. Relayed Mail Scenario | |||
Step 1 -- Source Host to Relay Host | Step 1 -- Source Host to Relay Host | |||
S: 220 foo.com Simple Mail Transfer Service Ready | The source host performs a DNS lookup on XYZ.EXAMPLE.COM (the destination | |||
C: EHLO bar.com | address) and finds DNS MX records specifying xyz.example.com as the best | |||
S: 250-foo.com greets bar.com | preference and foo.example.com as a lower preference. It attempts to open a | |||
connection to xyz.example.com and fails. It then opens a connection to | ||||
foo.example.com, with the following dialogue: | ||||
S: 220 foo.example.com Simple Mail Transfer Service Ready | ||||
C: EHLO bar.example.com | ||||
S: 250-foo.example.com greets bar.example.com | ||||
S: 250-8BITMIME | S: 250-8BITMIME | |||
S: 250-SIZE | S: 250-SIZE | |||
S: 250-DSN | S: 250-DSN | |||
S: 250 HELP | S: 250 HELP | |||
C: MAIL FROM:<JQP@bar.com> | C: MAIL FROM:<JQP@bar.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<@foo.com:Jones@XYZ.COM> | C: RCPT TO:<Jones@XYZ.EXAMPLE.COM> | |||
S: 250 OK | S: 250 OK | |||
C: DATA | C: DATA | |||
S: 354 Start mail input; end with <CRLF>.<CRLF> | S: 354 Start mail input; end with <CRLF>.<CRLF> | |||
C: Date: Thu, 21 May 1998 05:33:29 -0700 | C: Date: Thu, 21 May 1998 05:33:29 -0700 | |||
C: From: John Q. Public <JQP@bar.com> | C: From: John Q. Public <JQP@bar.example.com> | |||
C: Subject: The Next Meeting of the Board | C: Subject: The Next Meeting of the Board | |||
C: To: Jones@xyz.com | C: To: Jones@xyz.example.com | |||
C: | C: | |||
C: Bill: | C: Bill: | |||
C: The next meeting of the board of directors will be | C: The next meeting of the board of directors will be | |||
C: on Tuesday. | C: on Tuesday. | |||
C: John. | C: John. | |||
C: . | C: . | |||
S: 250 OK | S: 250 OK | |||
C: QUIT | C: QUIT | |||
S: 221 foo.com Service closing transmission channel | S: 221 foo.example.com Service closing transmission channel | |||
Step 2 -- Relay Host to Destination Host | Step 2 -- Relay Host to Destination Host | |||
S: 220 xyz.com Simple Mail Transfer Service Ready | foo.example.com, having received the message, now does a DNS lookup on | |||
C: EHLO foo.com | xyz.example.com. It finds the same set of MX records, but cannot use the one | |||
S: 250 xyz.com is on the air | that points to itself (or to any other host as a worse preference). | |||
C: MAIL FROM:<@foo.com:JQP@bar.com> | It tries to open a connection to xyz.example.com itself and succeeds. Then | |||
we have: | ||||
S: 220 xyz.example.com Simple Mail Transfer Service Ready | ||||
C: EHLO foo.example.com | ||||
S: 250 xyz.example.com is on the air | ||||
C: MAIL FROM:<JQP@bar.example.com> | ||||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<Jones@XYZ.COM> | C: RCPT TO:<Jones@XYZ.EXAMPLE.COM> | |||
S: 250 OK | S: 250 OK | |||
C: DATA | C: DATA | |||
S: 354 Start mail input; end with <CRLF>.<CRLF> | S: 354 Start mail input; end with <CRLF>.<CRLF> | |||
C: 05:33:29 -0700 | C: 05:33:29 -0700 | |||
C: Date: Thu, 21 May 1998 05:33:22 -0700 | C: Date: Thu, 21 May 1998 05:33:22 -0700 | |||
C: From: John Q. Public <JQP@bar.com> | C: From: John Q. Public <JQP@bar.example.com> | |||
C: Subject: The Next Meeting of the Board | C: Subject: The Next Meeting of the Board | |||
C: To: Jones@xyz.com | C: To: Jones@xyz.example.com | |||
C: | C: | |||
C: Bill: | C: Bill: | |||
C: The next meeting of the board of directors will be | C: The next meeting of the board of directors will be | |||
C: on Tuesday. | C: on Tuesday. | |||
C: John. | C: John. | |||
C: . | C: . | |||
S: 250 OK | S: 250 OK | |||
C: QUIT | C: QUIT | |||
S: 221 foo.com Service closing transmission channel | S: 221 foo.example.com Service closing transmission channel | |||
D.4 Verifying and Sending Scenario | D.4. Verifying and Sending Scenario | |||
S: 220 foo.com Simple Mail Transfer Service Ready | S: 220 foo.example.com Simple Mail Transfer Service Ready | |||
C: EHLO bar.com | C: EHLO bar.example.com | |||
S: 250-foo.com greets bar.com | S: 250-foo.example.com greets bar.example.com | |||
S: 250-8BITMIME | S: 250-8BITMIME | |||
S: 250-SIZE | S: 250-SIZE | |||
S: 250-DSN | S: 250-DSN | |||
S: 250-VRFY | S: 250-VRFY | |||
S: 250 HELP | S: 250 HELP | |||
C: VRFY Crispin | C: VRFY Crispin | |||
S: 250 Mark Crispin <Admin.MRC@foo.com> | S: 250 Mark Crispin <Admin.MRC@foo.example.com> | |||
C: SEND FROM:<EAK@bar.com> | C: MAIL FROM:<EAK@bar.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: RCPT TO:<Admin.MRC@foo.com> | C: RCPT TO:<Admin.MRC@foo.example.com> | |||
S: 250 OK | S: 250 OK | |||
C: DATA | C: DATA | |||
S: 354 Start mail input; end with <CRLF>.<CRLF> | S: 354 Start mail input; end with <CRLF>.<CRLF> | |||
C: Blah blah blah... | C: Blah blah blah... | |||
C: ...etc. etc. etc. | C: ...etc. etc. etc. | |||
C: . | C: . | |||
S: 250 OK | S: 250 OK | |||
C: QUIT | C: QUIT | |||
S: 221 foo.com Service closing transmission channel | S: 221 foo.example.com Service closing transmission channel | |||
E. Other Gateway Issues | Appendix E. Other Gateway Issues | |||
In general, gateways between the Internet and other mail systems | In general, gateways between the Internet and other mail systems | |||
SHOULD attempt to preserve any layering semantics across the | SHOULD attempt to preserve any layering semantics across the | |||
boundaries between the two mail systems involved. Gateway- | boundaries between the two mail systems involved. Gateway- | |||
translation approaches that attempt to take shortcuts by mapping, | translation approaches that attempt to take shortcuts by mapping | |||
(such as envelope information from one system to the message headers | (such as mapping envelope information from one system to the message | |||
or body of another) have generally proven to be inadequate in | header section or body of another) have generally proven to be | |||
important ways. Systems translating between environments that do not | inadequate in important ways. Systems translating between | |||
support both envelopes and headers and Internet mail must be written | environments that do not support both envelopes and a header section | |||
with the understanding that some information loss is almost | and Internet mail must be written with the understanding that some | |||
inevitable. | information loss is almost inevitable. | |||
F. Deprecated Features of RFC 821 | Appendix F. Deprecated Features of RFC 821 | |||
A few features of RFC 821 have proven to be problematic and SHOULD | A few features of RFC 821 have proven to be problematic and SHOULD | |||
NOT be used in Internet mail. | NOT be used in Internet mail. | |||
F.1 TURN | F.1. TURN | |||
This command, described in RFC 821, raises important security issues | This command, described in RFC 821, raises important security issues | |||
since, in the absence of strong authentication of the host requesting | since, in the absence of strong authentication of the host requesting | |||
that the client and server switch roles, it can easily be used to | that the client and server switch roles, it can easily be used to | |||
divert mail from its correct destination. Its use is deprecated; | divert mail from its correct destination. Its use is deprecated; | |||
SMTP systems SHOULD NOT use it unless the server can authenticate the | SMTP systems SHOULD NOT use it unless the server can authenticate the | |||
client. | client. | |||
F.2 Source Routing | F.2. Source Routing | |||
RFC 821 utilized the concept of explicit source routing to get mail | RFC 821 utilized the concept of explicit source routing to get mail | |||
from one host to another via a series of relays. The requirement to | from one host to another via a series of relays. The requirement to | |||
utilize source routes in regular mail traffic was eliminated by the | utilize source routes in regular mail traffic was eliminated by the | |||
introduction of the domain name system "MX" record and the last | introduction of the domain name system "MX" record and the last | |||
significant justification for them was eliminated by the | significant justification for them was eliminated by the | |||
introduction, in RFC 1123, of a clear requirement that addresses | introduction, in RFC 1123, of a clear requirement that addresses | |||
following an "@" must all be fully-qualified domain names. | following an "@" must all be fully-qualified domain names. | |||
Consequently, the only remaining justifications for the use of source | Consequently, the only remaining justifications for the use of source | |||
routes are support for very old SMTP clients or MUAs and in mail | routes are support for very old SMTP clients or MUAs and in mail | |||
skipping to change at page 77, line 31 | skipping to change at page 92, line 13 | |||
in the main body of this document and in RFC 1123. They MAY, if | in the main body of this document and in RFC 1123. They MAY, if | |||
necessary, ignore the routes and utilize only the target domain in | necessary, ignore the routes and utilize only the target domain in | |||
the address. If they do utilize the source route, the message MUST | the address. If they do utilize the source route, the message MUST | |||
be sent to the first domain shown in the address. In particular, a | be sent to the first domain shown in the address. In particular, a | |||
server MUST NOT guess at shortcuts within the source route. | server MUST NOT guess at shortcuts within the source route. | |||
Clients SHOULD NOT utilize explicit source routing except under | Clients SHOULD NOT utilize explicit source routing except under | |||
unusual circumstances, such as debugging or potentially relaying | unusual circumstances, such as debugging or potentially relaying | |||
around firewall or mail system configuration errors. | around firewall or mail system configuration errors. | |||
F.3 HELO | F.3. HELO | |||
As discussed in sections 3.1 and 4.1.1, EHLO is strongly preferred to | As discussed in Section 3.1 and Section 4.1.1, EHLO SHOULD be used | |||
HELO when the server will accept the former. Servers must continue | rather than HELO when the server will accept the former. Servers | |||
to accept and process HELO in order to support older clients. | MUST continue to accept and process HELO in order to support older | |||
clients. | ||||
F.4 #-literals | F.4. #-literals | |||
RFC 821 provided for specifying an Internet address as a decimal | RFC 821 provided for specifying an Internet address as a decimal | |||
integer host number prefixed by a pound sign, "#". In practice, that | integer host number prefixed by a pound sign, "#". In practice, that | |||
form has been obsolete since the introduction of TCP/IP. It is | form has been obsolete since the introduction of TCP/IP. It is | |||
deprecated and MUST NOT be used. | deprecated and MUST NOT be used. | |||
F.5 Dates and Years | F.5. Dates and Years | |||
When dates are inserted into messages by SMTP clients or servers | When dates are inserted into messages by SMTP clients or servers | |||
(e.g., in trace fields), four-digit years MUST BE used. Two-digit | (e.g., in trace header fields), four-digit years MUST BE used. Two- | |||
years are deprecated; three-digit years were never permitted in the | digit years are deprecated; three-digit years were never permitted in | |||
Internet mail system. | the Internet mail system. | |||
F.6 Sending versus Mailing | F.6. Sending versus Mailing | |||
In addition to specifying a mechanism for delivering messages to | In addition to specifying a mechanism for delivering messages to | |||
user's mailboxes, RFC 821 provided additional, optional, commands to | user's mailboxes, RFC 821 provided additional, optional, commands to | |||
deliver messages directly to the user's terminal screen. These | deliver messages directly to the user's terminal screen. These | |||
commands (SEND, SAML, SOML) were rarely implemented, and changes in | commands (SEND, SAML, SOML) were rarely implemented, and changes in | |||
workstation technology and the introduction of other protocols may | workstation technology and the introduction of other protocols may | |||
have rendered them obsolete even where they are implemented. | have rendered them obsolete even where they are implemented. | |||
Clients SHOULD NOT provide SEND, SAML, or SOML as services. Servers | Clients SHOULD NOT provide SEND, SAML, or SOML as services. Servers | |||
MAY implement them. If they are implemented by servers, the | MAY implement them. If they are implemented by servers, the | |||
implementation model specified in RFC 821 MUST be used and the | implementation model specified in RFC 821 MUST be used and the | |||
command names MUST be published in the response to the EHLO command. | command names MUST be published in the response to the EHLO command. | |||
Appendix G. Change log | ||||
G.1. Changes from RFC 2821 to the initial (-00) version of this draft | ||||
o bad ref in Section 3.7 and 3.8.1 (to 2.4.1) fixed | ||||
o bad ref in Section 4.1.1.1 to 2.4.1 fixed | ||||
o syntax for "domain" corrected to permit user@x.y.z. and user@tld. | ||||
references | ||||
o reference to BCP90 (RFC 3894) inserted. | ||||
o Productions for the reverse-path (in the MAIL command and the | ||||
Return-Path header) slightly revised to clarify and be sure "<>" | ||||
can appear in the latter. | ||||
o Clarified use of address literals (and optional supplemental text) | ||||
in EHLO. | ||||
o Slight clarification to "end of mail data" sequence definition. | ||||
o Clarification that a timeout may justify a server closing a | ||||
connection. | ||||
o Made editing correction to text describing HELO syntax. | ||||
o New discussion of situations in which bounce messages may be | ||||
treated in special ways or not sent at all (see especially the new | ||||
Section 6.2) | ||||
o Clarified that commands that were optional in 821 and 1123 (and | ||||
are optional here) must appear in EHLO responses. | ||||
o Post-DATA replay code discussion fixed | ||||
G.2. Changes from version -00 to -01 | ||||
1. Several references updated to refer to newer versions of relevant | ||||
documents. | ||||
2. Syntax for, and discussion of, domains changed to permit single- | ||||
label domain names, but only (with a SHOULD) if the trailing | ||||
period is specified. | ||||
3. A note was added to clarify that "Postmaster" is treated in a | ||||
case-insensitive fashion. | ||||
4. New material added about the implications of extensions. | ||||
5. Many small editorial, formatting, and organizational changes. | ||||
G.3. Changes from version -01 to -02 | ||||
This version incorporates changes corresponding to "issues" | ||||
identified on the mailing list. | ||||
1. Changed section Section 4.5.3 to use subsections, not a list | ||||
(part of Issue 9) and forced these sections into the TOC. | ||||
2. Started process of adapting to IPv6 by changing "A RR" to | ||||
"address RR", putting in surrounding text, and adding some more | ||||
general comments. | ||||
3. Slightly improved the discussion of message submission | ||||
protocols. | ||||
4. Eliminated the remaining text that suggested trailing periods | ||||
for domain references to TLDs and added corresponding text | ||||
prohibiting anything but a submission server from completing | ||||
aliases in domain names. | ||||
5. Changed the syntax of "ID" in trace (Received) fields to "atom" | ||||
from "string". | ||||
6. Changed syntax to permit multiple-line Greeting (220) messages. | ||||
Clarified multiline responses to require that all of the codes | ||||
in a given response be the same. | ||||
7. Clarified the applicability of 1yz codes: they are part of the | ||||
model, but prohibited without extensions. | ||||
8. Specified that "xtext" should be used when email addresses are | ||||
used as extension parameter values. This has been done by | ||||
reference to avoid yet more duplication of syntax rules that can | ||||
later get out of synch. It is not a problem here since RFC3461 | ||||
is already at Draft Standard, but this will need monitoring in | ||||
the future. | ||||
9. Added provision for new text about mail rerouting based on 251 | ||||
and 551 codes (Section 7.4) and about VRFY/EXPN responses (in | ||||
xref target='meaning_vrfy_expn_success'/>). | ||||
10. Clarified the rules about continuation lines to more clearly | ||||
prohibit mixed codes. | ||||
11. Prohibited the use of 1yz codes without extensions and added a | ||||
brief explanation about the relationship to FTP. | ||||
12. Added some references. | ||||
13. General editorial improvements. | ||||
G.4. Changes from version -02 to -03 | ||||
This version, and the subsequent ones, incorporate additional changes | ||||
corresponding to "issues" identified on the mailing list. | ||||
1. Informal text that used terms such as "discouraged", | ||||
"encouraged", "permitted", or "prohibited" to express protocol | ||||
requirements has been changed to "SHOULD", "MUST", or "MAY" where | ||||
appropriate. | ||||
2. Rewrote Appendix C to better reflect the source route environment | ||||
and appropriate actions in an environment in which use of source | ||||
routes has been deprecated since RFC 1123 in 1989. | ||||
3. Some text added to clarify, non-normatively, the relationship of | ||||
SMTP to Message Submission functions. | ||||
4. Changed informal use of the term "header" to the more precise | ||||
"header section" and "header field" and introduced the term | ||||
"Received clause". | ||||
5. More editorial and related changes to improve clarity and | ||||
consistency. | ||||
G.5. Changes from version -02 to -03 | ||||
1. Modified descriptive text for 450 code to reflect policy | ||||
refusals. | ||||
2. New text about sender verification and generation of NDNs | ||||
3. Tuned 1yz and FTP text | ||||
4. More corrections of minor typos, etc. | ||||
G.6. Changes from version -03 to -04 | ||||
1. Removed "explained-literal" syntax and rewrote the explanation | ||||
(issue 19). | ||||
2. Revised text for responsibility handoff (issue 32b). | ||||
3. Slightly further revised the "FTP relationship" text introduced | ||||
in -02 and -03. | ||||
4. Revised example text in appendix D to remove source routes and | ||||
bring closer to MX context (issue 35). | ||||
5. Editorial revisions, including rearranging some sections. | ||||
G.7. Changes from version -04 to -05 | ||||
1. Added registry pointers to Section 8 (issue 36). | ||||
2. "for" clause in Received header reduced to a single mailbox, | ||||
since this seems to reflect list consensus (issue 37). An | ||||
"additional registered clauses" entry was made to allow for | ||||
future extension (also issue 37). | ||||
3. Corrected some I-D references to point to now-published RFCs. | ||||
G.8. Changes from version -05 to -06 | ||||
1. Checked and verified additional uses of "field", inserting | ||||
"header" or substituting "clause" as needed. | ||||
2. Made small adjustments in several references. | ||||
3. Added text to clarify (and more clearly prohibit) rewriting null | ||||
reverse-paths into something else. | ||||
G.9. Changes from version -06 to -07 | ||||
These changes were made after -06 was posted and, in general, during | ||||
and subsequent to IETF last Call. | ||||
1. Clarified sentence that described the syntax of the domain part | ||||
of an address. Syntax was ok. | ||||
2. Truncated the "Context and Notes" section from the prior drafts. | ||||
(That section is to be removed entirely by the RFC Editor, as | ||||
noted.) | ||||
3. Incorporated a large number of Last Call comments, per note from | ||||
Tony Hansen to the mailing list. | ||||
4. Made some syntax corrections to better align the document with | ||||
normal uses of ABNF. The ABNF in the document remains | ||||
descriptive rather than normative. | ||||
5. Revised the description of trace and FOR clauses to be consistent | ||||
with the decision to permit only one path in them. | ||||
6. Removed unreferenced documents from references sections. | ||||
7. Tuned some text to better align with other recommendations, e.g., | ||||
explicitly indicated that the Message Submission protocol was | ||||
preferred over the use of SMTP for that purpose. | ||||
G.10. Changes from version -07 to -08 | ||||
This version was created to capture the remaining Last Call comments | ||||
and as the basis for a final check in a second Last Call. Changes | ||||
were made to the rules about quoted strings and a number of | ||||
formatting issues were resolved. | ||||
G.11. Changes from version -08 to -09 | ||||
Changes resulting from second last call, including some minor | ||||
editorial adjustments, a change in terminology about mail sessions, | ||||
and elimination of an example that used the SEND command. This | ||||
version was prepared as a clean copy for IESG final review and, it is | ||||
hoped, forwarding to the RFC Editor. | ||||
G.12. Changes from version -09 to -10 | ||||
1. Changed uses of "character length" to "octet length" and wrote a | ||||
brief introduction | ||||
2. Modified text in Appendix A to permit extensions that would | ||||
permit non-ASCII characters in command arguments or replies. | ||||
3. Moved reference to RFC 1870 to Normative, since it is referenced | ||||
in a SHOULD. | ||||
4. Changed the description of MX handling using Glenn Anderson's | ||||
text. No substantive change, just clarity. | ||||
Author's Address | ||||
John C. Klensin | ||||
1770 Massachusetts Ave, Suite 322 | ||||
Cambridge, MA 02140 | ||||
USA | ||||
Email: john+smtp@jck.com | ||||
Full Copyright Statement | Full Copyright Statement | |||
Copyright (C) The Internet Society (2001). All Rights Reserved. | Copyright (C) The IETF Trust (2008). | |||
This document and translations of it may be copied and furnished to | This document is subject to the rights, licenses and restrictions | |||
others, and derivative works that comment on or otherwise explain it | contained in BCP 78, and except as set forth therein, the authors | |||
or assist in its implementation may be prepared, copied, published | retain all their rights. | |||
and distributed, in whole or in part, without restriction of any | ||||
kind, provided that the above copyright notice and this paragraph are | ||||
included on all such copies and derivative works. However, this | ||||
document itself may not be modified in any way, such as by removing | ||||
the copyright notice or references to the Internet Society or other | ||||
Internet organizations, except as needed for the purpose of | ||||
developing Internet standards in which case the procedures for | ||||
copyrights defined in the Internet Standards process must be | ||||
followed, or as required to translate it into languages other than | ||||
English. | ||||
The limited permissions granted above are perpetual and will not be | This document and the information contained herein are provided on an | |||
revoked by the Internet Society or its successors or assigns. | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | ||||
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | ||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | ||||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | ||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
This document and the information contained herein is provided on an | Intellectual Property | |||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | ||||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | ||||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION | ||||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | ||||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
Acknowledgement | The IETF takes no position regarding the validity or scope of any | |||
Intellectual Property Rights or other rights that might be claimed to | ||||
pertain to the implementation or use of the technology described in | ||||
this document or the extent to which any license under such rights | ||||
might or might not be available; nor does it represent that it has | ||||
made any independent effort to identify any such rights. Information | ||||
on the procedures with respect to rights in RFC documents can be | ||||
found in BCP 78 and BCP 79. | ||||
Funding for the RFC Editor function is currently provided by the | Copies of IPR disclosures made to the IETF Secretariat and any | |||
Internet Society. | assurances of licenses to be made available, or the result of an | |||
attempt made to obtain a general license or permission for the use of | ||||
such proprietary rights by implementers or users of this | ||||
specification can be obtained from the IETF on-line IPR repository at | ||||
http://www.ietf.org/ipr. | ||||
The IETF invites any interested party to bring to its attention any | ||||
copyrights, patents or patent applications, or other proprietary | ||||
rights that may cover technology that may be required to implement | ||||
this standard. Please address the information to the IETF at | ||||
ietf-ipr@ietf.org. | ||||
End of changes. 574 change blocks. | ||||
1438 lines changed or deleted | 2318 lines changed or added | |||
This html diff was produced by rfcdiff 1.32. The latest version is available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |