home *** CD-ROM | disk | FTP | other *** search
/ ftp.qualcomm.com / 2014.06.ftp.qualcomm.com.tar / ftp.qualcomm.com / eudora / pubs / draft-ietf-drums-msg-fmt-01.txt < prev   
Text File  |  1997-04-14  |  57KB  |  1,219 lines

  1. Network Working Group                                   P. Resnick, Editor
  2. Internet-Draft                                          QUALCOMM Incorporated
  3. <draft-ietf-drums-msg-fmt-01.txt>                       March 26, 1997
  4.  
  5. Message Format Standard
  6.  
  7. 0. Status of this memo
  8.  
  9. This document is an Internet-Draft. Internet-Drafts are working documents of 
  10. the Internet Engineering Task Force (IETF), its areas, and its working 
  11. groups. Note that other groups may also distribute working documents as 
  12. Internet-Drafts.
  13.  
  14. Internet-Drafts are draft documents valid for a maximum of six months and may 
  15. be updated, replaced, or obsoleted by other documents at any time. It is 
  16. inappropriate to use Internet-Drafts as reference material or to cite them 
  17. other than as "work in progress."
  18.  
  19. To learn the current status of any Internet-Draft, please check the "1id-
  20. abstracts.txt" listing contained in the Internet-Drafts Shadow Directories on 
  21. ftp.is.co.za (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific Rim), 
  22. ds.internic.net (US East Coast), or ftp.isi.edu (US West Coast).
  23.  
  24. 1. Introduction
  25.  
  26. 1.1 Scope
  27.  
  28. This standard specifies a syntax for text messages that are sent between 
  29. computer users, within the framework of "electronic mail" messages. This 
  30. standard supersedes the one specified in Request For Comments 822, "Standard 
  31. for the Format of ARPA Internet Text Messages".
  32.  
  33. This standard only specifies a syntax for text messages. In particular, it 
  34. makes no provision for the transmission of images, audio, or other sorts of 
  35. structured data in electronic mail messages. There are several extensions 
  36. published, such as the MIME document series [MIME-IMT, MIME-IMB], which 
  37. describe mechanisms for the transmission of such data through electronic 
  38. mail, either by extending the syntax provided here or by structuring such 
  39. messages to conform to this syntax. These mechanisms are outside of the scope 
  40. of this standard.
  41.  
  42. In the context of electronic mail, messages are viewed as having an envelope 
  43. and contents. The envelope contains whatever information is needed to 
  44. accomplish transmission and delivery. (See [SMTP] for a discussion of the 
  45. envelope.) The contents compose the object to be delivered to the recipient. 
  46. This standard applies only to the format and some of the semantics of message 
  47. contents. It contains no specification of the information in the envelope.
  48.  
  49. However, some message systems may use information from the contents to create 
  50. the envelope. It is intended that this standard facilitate the acquisition of 
  51. such information by programs.
  52.  
  53. Some message systems may store messages in formats that differ from the one 
  54. specified in this standard. This specification is intended strictly as a 
  55. definition of what message content format is to be passed BETWEEN hosts.
  56.  
  57. Note: This standard is NOT intended to dictate the internal formats used by 
  58. sites, the specific message system features that they are expected to 
  59. support, or any of the characteristics of user interface programs that create 
  60. or read messages. In addition, this standard does not specify an encoding of 
  61. the characters for either transport or storage; that is, it does not specify 
  62. the number of bits used or how those bits are specifically transferred over 
  63. the wire or stored on disk.
  64.  
  65. 1.2 Notational conventions
  66.  
  67. 1.2.1 Requirements notation
  68.  
  69. This document occasionally uses terms that appear in capital letters. When 
  70. the terms "MUST", "SHOULD", "MUST NOT", "SHOULD NOT", and "MAY" appear 
  71. capitalized, they are being used to indicate particular requirements of this 
  72. specification. A discussion of the meanings of these terms appears in [KEY-
  73. WORDS] [Editor's note: <draft-bradner-key-words-02.txt>].
  74.  
  75. 1.2.2 Syntactic notation
  76.  
  77. This standard uses the Augmented Backus-Naur Form notation specified in 
  78. [ABNF] for the formal definitions of the syntax of messages. Characters will 
  79. be specified either by a decimal value (e.g., the value %d65 for uppercase A 
  80. and %97 for lowercase A) or by a case-insenstive literal value enclosed in 
  81. quotation marks (e.g., "A" for either uppercase or lowercase A). See the 
  82. [ABNF] document for the full description of the notation.
  83.  
  84. 1.3 Structure of this document
  85.  
  86. This document is divided into several sections.
  87.  
  88. This section, section 1, is a short introduction to the document.
  89.  
  90. Section 2 will lay out the general description of a message and its 
  91. constituent parts. This is an overview to help the reader understand some of 
  92. the general principles used in the later portions of this document. Any 
  93. examples in this section MUST NOT be taken as specification of the formal 
  94. syntax of any part of a message.
  95.  
  96. Section 3 will give the formal syntax and semantics for each of the parts of 
  97. a message. That is, it will describe the actual rules for the structure of 
  98. each part of a message (the syntax) as well as a description of the parts and 
  99. instructions on how they ought to be interpreted (the semantics). This will 
  100. include analysis of the syntax and semantics of subparts of messages which 
  101. have specific structure. The syntax included in section 3 represents messages 
  102. as they MUST be created. There are also notes in section 3 to indicate if any 
  103. of the options specified in the syntax SHOULD be used over any of the others.
  104.  
  105. Both sections 2 and 3 describe messages which are legal to generate for 
  106. purposes of this standard.
  107.  
  108. Section 4 of this document specifies an "obsolete" syntax. There are 
  109. references in section 3 to these obsolete syntactic elements. The rules of 
  110. the obsolete syntax are elements that have appeared in earlier revisions of 
  111. this standard or have previously been widely used in Internet messages. As 
  112. such, these elements MUST be interpreted by parsers of messages in order to 
  113. be conformant to this standard. However, since items in this syntax have been 
  114. determined to be non-interoperable or cause significant problems for 
  115. recipients of messages, they MUST NOT be generated by creators of conformant 
  116. messages.
  117.  
  118. Section 5 details security considerations to take into account when 
  119. implementing this standard.
  120.  
  121. Section 6 is a bibliography of references in this document.
  122.  
  123. Section 7 contains the author's address and instructions on where to send 
  124. comments.
  125.  
  126. Section 8 contains acknowledgements.
  127.  
  128. Appendix A lists examples of different sorts of messages. These examples are 
  129. not exhaustive of the types of messages that appear on the Internet, but give 
  130. a broad overview of certain syntactic forms.
  131.  
  132. Appendix B lists the differences between this standard and earlier standards 
  133. for Internet messages.
  134.  
  135. 2. Lexical Analysis of Messages
  136.  
  137. 2.1 General Description
  138.  
  139. At the most basic level, a message is a series of characters. A message that 
  140. is conformant with this standard is comprised of characters with values in 
  141. the range 1 through 127 and interpreted as US-ASCII characters [ASCII]. For 
  142. brevity, this document sometimes refers to this range of characters as simply 
  143. "US-ASCII characters". Messages are divided into lines of characters. A line 
  144. is a series of characters which is delimited with the two characters 
  145. carriage-return and line-feed; that is, the carriage return (CR) character 
  146. (ASCII value 13) followed immediately by the line feed (LF) character (ASCII 
  147. value 10). (The carriage-return/line-feed pair is usually written in this 
  148. document as "CRLF".)
  149.  
  150. Note: This standard specifies that messages are made up of characters in the 
  151. US-ASCII range of 1 through 127. There are other documents, specifically the 
  152. MIME document series [MIME-IMT, MIME-IMB], which extend this standard to 
  153. allow for values outside of that range. Discussion of these mechanisms is not 
  154. within the scope of this standard.
  155.  
  156. [Editor's note: More people are giving me anecdotal indications that NULL is 
  157. a problem not only in headers but also in bodies for some implementations. 
  158. I'd like more evidence one way or the other before I go and change this 
  159. again. Where should NULL be allowed, if at all, in the generate syntax?]
  160.  
  161. A message consists of header fields (collectively called the header of the 
  162. message) followed, optionally, by a body. The header is a sequence of lines 
  163. of characters with special syntax as defined in this standard. The body is 
  164. simply a sequence of characters that follows the headers and is separated 
  165. from the headers by an empty line (i.e., a line with nothing preceding the 
  166. CRLF).
  167.  
  168. 2.2 Headers Fields
  169.  
  170. Header fields are lines which have a specific syntax. Header fields are all 
  171. composed of a field name, followed by a colon (":"), followed by a field 
  172. body, and terminated by CRLF. A field name must be composed of printable US-
  173. ASCII characters (i.e., characters that have values between 33 and 126, 
  174. except colon). A field body may be composed of any US-ASCII characters, 
  175. except for CR and LF. However, a field body may contain CRLF when used in 
  176. header "folding" and "unfolding" as described in section 2.2.3. All field 
  177. bodies must conform to the syntax described in sections 3 and 4 of this 
  178. standard.
  179.  
  180. 2.2.1 Unstructured Header Field Bodies
  181.  
  182. Some field bodies in this standard are defined simply as "unstructured" 
  183. (which is specified below as any US-ASCII characters, except for CR and LF) 
  184. with no further restrictions. These are referred to as unstructured field 
  185. bodies. Semantically, unstructured field bodies are simply to be treated as a 
  186. single line of characters with no further processing (except for header 
  187. "folding" and "unfolding" as described in section 2.2.3).
  188.  
  189. 2.2.2 Structured Header Field Bodies
  190.  
  191. Some field bodies in this standard have specific lexical structure more 
  192. restrictive than the unstructured field bodies described above. These are 
  193. referred to as "structured" field bodies. Structured field bodies are lines 
  194. of specific lexical tokens as described in sections 3 and 4 of this standard. 
  195. Many of these tokens are allowed (according to their syntax) to be freely 
  196. surrounded by comments (as decribed in section 3.2.4) as well as space 
  197. (SPACE, ASCII value 32) and horizontal tab (HTAB, ASCII value 9) characters, 
  198. and those surrounding SPACE and HTAB characters are subject to header 
  199. "folding" and "unfolding" as described in section 2.2.3. Semantic analysis of 
  200. structured field bodies is given along with their syntax.
  201.  
  202. 2.2.3 Long Header Fields
  203.  
  204. Each header is logically a single line of characters comprising the field 
  205. name, the colon, and the field body. For convenience however, the field body 
  206. portion of a header can be split into a multiple line representation; this is 
  207. called "folding". The general rule is that wherever this standard allows for 
  208. folding white-space (not simply SPACE or HTAB), a CRLF followed by AT LEAST 
  209. one SPACE or HTAB may instead be inserted. For example, the header:
  210.  
  211.         Subject: This is a test
  212.  
  213. can be represented as:
  214.  
  215.         Subject: This
  216.          is a test
  217.  
  218. Note: Though structured field bodies are defined in such a way that folding 
  219. can take place between many of the lexical tokens, folding SHOULD be limited 
  220. to placing the CRLF at higher-level syntactic breaks. For instance, if a 
  221. field body is defined as comma-separated values, it is recommended that 
  222. folding occur after the comma separating the structured items, even if it is 
  223. allowed elsewhere.
  224.  
  225. The process of moving from this folded multiple-line representation of a 
  226. header field to its single line representation is called "unfolding". 
  227. Unfolding is accomplished by simply removing any CRLF that is immediately 
  228. followed by SPACE or HTAB. Each header should be treated in its unfolded form 
  229. for syntactic and semantic evaluation.
  230.  
  231. 2.3 Body
  232.  
  233. The body of a message is simply lines of US-ASCII characters. The only two 
  234. limitations on the body are as follows:
  235.  
  236. - CR and LF MUST only occur together as CRLF; they MUST NOT appear 
  237. independently in the body.
  238.  
  239. - Lines of characters in the body MUST be limited to 998 characters, and 
  240. SHOULD be limited to 80 characters, excluding the CRLF.
  241.  
  242. Note: As was stated earlier, there are other standards documents, 
  243. specifically the MIME documents [MIME-IMT, MIME-IMB] which extend this 
  244. standard to allow for different sorts of message bodies. Again, these 
  245. mechanisms are beyond the scope of this document.
  246.  
  247. 3. Syntax
  248.  
  249. [Editor's note: What appears in here vs. what appears in the obsolete syntax 
  250. is certainly up for debate. There are certain items currently in the SHOULD 
  251. NOT generate but MUST accept category that could be pushed into the MUST NOT 
  252. generate category, and thus into the obsolete section. I've occasionally made 
  253. some random decisions on this topic, so please keep an eye out and yelp if 
  254. you think I'm way off. Do check the obsolete section to see whether the 
  255. things I have as MUST NOT generate/MUST accept are acceptable.]
  256.  
  257. 3.1 Introduction
  258.  
  259. The syntax as given in this section defines the legal syntax of Internet 
  260. messages. Messages which are conformant to this standard MUST conform to the 
  261. syntax in this section. If there are options in this section where one option 
  262. SHOULD be generated, that is indicated either in the prose or in a comment 
  263. next to the syntax.
  264.  
  265. For the defined tokens, a short description of the syntax and use is given, 
  266. followed by the syntax in ABNF, followed by a semantic analysis. Primitive 
  267. tokens that are used but otherwise unspecified come from [ABNF].
  268.  
  269. 3.2 Lexical Tokens
  270.  
  271. The following rules are used to define an underlying lexical analyzer, which 
  272. feeds tokens to the higher level parsers. This section is basically devoted 
  273. to defining tokens used in structured header field bodies.
  274.  
  275. 3.2.1 Primitive Tokens
  276.  
  277. The following are primitive tokens referred to elsewhere this standard, but 
  278. are not otherwise defined in [ABNF]. Some of them will not appear anywhere 
  279. else in the syntax, but they are convenient to refer to in other parts of 
  280. this document.
  281.  
  282. Note: The "specials" below are just such an example. Though the specials 
  283. token does not appear anywhere else in this standard, it is useful for 
  284. implementors who use tools which lexically analyze messages. Each of the 
  285. characters in specials can be used to indicate a tokenization point in 
  286. lexical analysis.
  287.  
  288. CTL             =       %d1..%d31 /     ; Control characters, inc. delete
  289.                         %d127
  290.  
  291. NO-WS-CTL       =       %d1..%d8 /      ; US-ASCII control characters 
  292.                         %d11 /          ;  which do not include the
  293.                         %d12 /          ;  carriage return, linefeed,
  294.                         %d14..%d31 /    ;  and whitespace characters
  295.                         %d127
  296.  
  297. <">             =       %d34            ; Quote mark
  298.  
  299. text            =       %d1..%d9 /      ; Characters excluding CR and LF
  300.                         %d11..%d12 /
  301.                         %d14..%d127 /
  302.                         obs-text
  303.  
  304. specials        =       "(" / ")" /     ; Special characters used in other
  305.                         "<" / ">" /     ;  parts of the syntax
  306.                         "[" / "]" /
  307.                         ":" / ";" /
  308.                         <"> / "\" /
  309.                         "," / "." /
  310.                         "@"
  311.  
  312. No special semantics attaches to these tokens. They are simply single 
  313. characters.
  314.  
  315. 3.2.2 Quoted characters
  316.  
  317. Some characters are reserved for special interpretation, such as delimiting 
  318. lexical tokens. To permit use of these characters as uninterpreted data, a 
  319. quoting mechanism is provided.
  320.  
  321. quoted-pair     =       ("\" text) / obs-qp
  322.  
  323. Where any quoted-pair appears, it should be interpreted as the text character 
  324. alone.
  325.  
  326. 3.2.3 Whitespace
  327.  
  328. The following define the white-space characters used in this standard. See 
  329. section 3.2.4 for more information on the use of white-space in the rest of 
  330. this standard.
  331.  
  332. WS              =       SPACE / HTAB            ; Whitespace characters
  333. FWS             =       (*WS [CRLF WS] *WS) /   ; Folding white-space
  334.                         obs-FWS
  335.  
  336. Throughout this standard, where FWS (the folding white-space token) appears, 
  337. it indicates a place where header folding, as discussed in section 2.2.3, may 
  338. take place. Wherever header folding appears in a message (that is, a header 
  339. field body containing a CRLF followed by any WS), header unfolding (removal 
  340. of the CRLF) should be performed before any further lexical analysis is 
  341. performed on that header according to this standard. That is to say, any CRLF 
  342. that appears in FWS is semantically "invisible."
  343.  
  344. Runs of FWS are semantically interpreted as identical to single SPACE 
  345. character.
  346.  
  347. 3.2.4 Comments
  348.  
  349. Strings of characters which are treated as comments may be included in 
  350. structured field bodies as characters enclosed in parenthesis. Strings of 
  351. characters enclosed in parenthesis are considered comments so long as they do 
  352. not appear within a "quoted-string", as defined in section 3.2.6. Comments 
  353. may nest.
  354.  
  355. There are several places in this standard where comments and FWS may be 
  356. freely inserted. To accommodate that syntax, an additional token for "CFWS" 
  357. is defined for places where comments and/or FWS can occur. However, where 
  358. CFWS occurs in this standard, it MUST NOT be inserted in such a way that any 
  359. line of a folded header is made up entirely of WS characters and nothing 
  360. else.
  361.  
  362. ctext           =       NO-WS-CTL /     ; Non-white-space controls
  363.  
  364.                         %d33..%d39 /    ; The rest of the US-ASCII
  365.                         %d42..%d91 /    ;  characters not including "(",
  366.                         %d93..%d127     ;  ")", or "\"
  367.  
  368. comment         =       "(" *(FWS (ctext / quoted-pair / comment)) ")"
  369.  
  370. CFWS            =       WS / comment / (FWS *(comment FWS))
  371.  
  372. A comment is normally used in a structured field body to provide some human 
  373. readable informational text. A comment is semantically interpreted as a 
  374. single SPACE. Since a comment is allowed to contain FWS, folding is 
  375. permitted. Also note that since quoted-pair is allowed in a comment, the 
  376. parentheses and backslash characters may appear in a comment so long as they 
  377. appear as a quoted-pair. Semantically, the enclosing parentheses are not part 
  378. of the comment token; the token is what is contained between the two 
  379. parentheses.
  380.  
  381. Runs of CFWS are semantically interpreted as a single space.
  382.  
  383. 3.2.5 Atom
  384.  
  385. Several tokens in structured header field bodies are simply strings of 
  386. certain basic characters. Such tokens are represented as atoms. Two atoms 
  387. must be separated by some other token, since putting two atoms next to each 
  388. other would create a single atom.
  389.  
  390. Some of the structured header field bodies also allow the period character 
  391. (".", ASCII value 46) within runs of atext. An additional "dot-atom" token is 
  392. defined for those purposes.
  393.  
  394. atext           =       ALPHA / DIGIT / ; Any character except CTL,
  395.                         "!" / "#" /     ;  SPACE, and specials.
  396.                         "$" / "%" /     ;  Used for atoms
  397.                         "&" / "'" /
  398.                         "*" / "+" /
  399.                         "-" / "/" /
  400.                         "=" / "?" /
  401.                         "^" / "_" /
  402.                         "`" / "{" /
  403.                         "|" / "}" /
  404.                         "~"
  405.  
  406. atom            =       *CFWS 1*atext *CFWS
  407.  
  408. dot-atom        =       *CFWS 1*(atext ["." atext]) *CFWS
  409.  
  410. Both atom and dot-atom are interpreted as a single unit, comprised of the 
  411. string of characters that make it up. Semantically, the optional comments and 
  412. FWS surrounding the rest of the characters are not part of the token; the 
  413. token is only the run of atext characters in an atom, or the atext and "." 
  414. characters in a dot-atom.
  415.  
  416. 3.2.6 Quoted strings
  417.  
  418. Strings of characters which include characters other than those allowed in 
  419. atoms may be represented in a quoted string format, where the characters are 
  420. surrounded by the quote character.
  421.  
  422. qtext           =       NO-WS-CTL /     ; Non-white-space controls
  423.  
  424.                         %d33 /          ; The rest of the US-ASCII
  425.                         %d35..%d91 /    ;  characters not including "\"
  426.                         %d93..%d127     ;  or the quote character
  427.  
  428. quoted-string   =       *CFWS <"> *(FWS (qtext / quoted-pair)) <"> *CFWS
  429.  
  430. A quoted-string is treated as a single symbol. That is, quoted-string is 
  431. identical to atom, semantically. Since a quoted-string is allowed to contain 
  432. FWS, folding is permitted. Also note that since quoted-pair is allowed in a 
  433. quoted-string, the quote and backslash characters may appear in a quoted-
  434. string so long as they appear as a quoted-pair. Semantically, neither the 
  435. optional CFWS nor the quote characters are part of the quoted-string token; 
  436. the token is what is contained between the two quote characters.
  437.  
  438. 3.2.7 Miscellaneous tokens
  439.  
  440. Three additional tokens are defined, word and phrase for combinations of 
  441. atoms and/or quoted-strings, and unstructured for use in unstructured field 
  442. headers and in some places within structured field headers.
  443.  
  444. word            =       atom / quoted-string
  445.  
  446. phrase          =       1*word
  447.  
  448. unstructured    =       *(FWS text) / obs-unstruct
  449.  
  450. 3.3 Date and Time Specification
  451.  
  452. Date and time occur in several header fields of a message. This section 
  453. specifies the syntax for a full date and time specification.
  454.  
  455. date-time       =       [ day-of-week "," ] date 1*CFWS time
  456.  
  457. day-of-week     =       1*CFWS day-name 1*CFWS
  458.  
  459. day-name        =       "Mon" / "Tue" / "Wed" / "Thu" /
  460.                         "Fri" / "Sat" / "Sun"
  461.  
  462. date            =       day month year
  463.  
  464. year            =       (*CFWS 4*DIGIT *CFWS) / obs-year
  465.  
  466. month           =       1*CFWS month-name 1*CFWS
  467.  
  468. month-name      =       "Jan" / "Feb" / "Mar" / "Apr" /
  469.                         "May" / "Jun" / "Jul" / "Aug" /
  470.                         "Sep" / "Oct" / "Nov" / "Dec"
  471.  
  472. day             =       *CFWS 1*2DIGIT *CFWS
  473.  
  474. time            =       time-of-day *CFWS zone
  475.  
  476. time-of-day     =       hour ":" minute [ ":" second ]
  477.  
  478. hour            =       *CFWS 2DIGIT *CFWS
  479.  
  480. minute          =       *CFWS 2DIGIT *CFWS
  481.  
  482. second          =       *CFWS 2DIGIT *CFWS
  483.  
  484. zone            =       (( "+" / "-" ) 4DIGIT) / obs-zone
  485.  
  486. The day is the numeric day of the month. The year is any numeric year in the 
  487. common era.
  488.  
  489. The time-of-day specifies the number of hours, minutes, and optionally 
  490. seconds since midnight of the date indicated.
  491.  
  492. The date and time-of-day SHOULD express local time.
  493.  
  494. The zone specifies the offset from Coordinated Universal Time (UTC, formerly 
  495. referred to as "Greenwich Mean Time") that the date and time-of-day 
  496. represent. The "+" or "-" indicates whether the time-of-day is ahead of or 
  497. behind Universal Time. The first two digits indicate the number of hours 
  498. difference from Universal Time, and the last two digits indicate the number 
  499. of minutes difference from Universal Time. (Hence, +hhmm means +(hh * 60 + 
  500. mm) minutes, and -hhmm means -(hh * 60 + mm) minutes). The form "+0000" 
  501. SHOULD be used to indicate a time zone at Universal Time. Though "-0000" also 
  502. indicates Universal Time, it is used to indicate that the time was generated 
  503. on a system that may be in a local time zone other than Universal Time.
  504.  
  505. A date-time specification MUST be semantically valid. That is, the day-of-the 
  506. week (if included) MUST be the day implied by the date, the numeric day-of-
  507. month MUST be within the number of days allowed for the specified month (in 
  508. the specified year), the time-of-day MUST be in the range 00:00:00 through 
  509. 23:59:61 (the number of seconds allowing for leap seconds; see []), and the 
  510. zone MUST be within the range -9959 through +9959.
  511.  
  512. 3.4 Address Specification
  513.  
  514. Addresses occur in several message headers to indicate senders and recipients 
  515. of messages. An address may either be an individual mailbox, or a group of 
  516. mailboxes.
  517.  
  518. address         =       mailbox / group
  519.  
  520. mailbox         =       phrase-addr / addr-spec / obs-mailbox
  521.  
  522. phrase-addr     =       [phrase] *CFWS "<" addr-spec ">" *CFWS
  523.  
  524. group           =       phrase ":" #mailbox ";" *CFWS
  525.  
  526. A mailbox receives mail. It is a conceptual entity which does not necessarily 
  527. pertain to file storage. For example, some sites may choose to print mail on 
  528. a printer and deliver the output to the addressee's desk. Normally, a mailbox 
  529. is comprised of two parts: (1) an optional name reference which indicates the 
  530. name of the recipient (which could be a person or a system) , and (2) a name-
  531. domain address (referred to as an "addr-spec") enclosed in angle brackets 
  532. ("<" and ">"). There is also an alternate simple form of a mailbox where the 
  533. name-domain address appears alone, without the angle brackets. The Internet 
  534. name-domain address is described in section 3.4.1.
  535.  
  536. When it is desirable to treat several mailboxes as a single unit (i.e., in a 
  537. distribution list), the group construct can be used. The group construct 
  538. allows the sender to indicate a named group of recipients. This is done by 
  539. giving a group name, followed by a colon, followed by a comma separated list 
  540. of any number of mailboxes (including zero and one), and ending with a 
  541. semicolon. Because the list of mailboxes can be empty, using the group 
  542. construct is also a simple way to indicate in the message that a set of 
  543. recipients were sent the message without actually providing the individual 
  544. mailbox addresses for each of the recipients.
  545.  
  546. 3.4.1 Name-domain specification
  547.  
  548. A name-domain is a specific Internet identifier that contains both a locally 
  549. interpreted string followed by the at-sign character ("@", ASCII value 64) 
  550. followed by an Internet domain. For historical reasons, the token is named 
  551. addr-spec. [Editor's note: Someone want to back me up on that?] The locally 
  552. interpreted string is either a quoted-string or a dot-atom. If the string can 
  553. be represented as a dot-atom (that is, it contains no characters other than 
  554. atext characters or "." surrounded by atext characters), then the dot-atom 
  555. form SHOULD be used and the quoted-string form SHOULD NOT be used.
  556.  
  557. addr-spec       =       local-part "@" domain
  558.  
  559. local-part      =       dot-atom / quoted-string / obs-local-part
  560.  
  561. domain          =       dot-atom / domain-literal / obs-domain
  562.  
  563. domain-literal  =       *CFWS "[" *(FWS (dtext / quoted-pair)) "]" *CFWS
  564.  
  565. dtext           =       NO-WS-CTL /     ; Non-white-space controls
  566.  
  567.                         %d33..%d90 /    ; The rest of the US-ASCII
  568.                         %d94..%d127     ;  characters not including "[",
  569.                                         ;  "]", or "\"
  570.  
  571. The domain portion is a fully qualified identifier for an Internet host. For 
  572. example, in a mailbox address, it is the host on which the particular mailbox 
  573. resides. In the dot-atom form, this is interpreted as an Internet domain name 
  574. (either a host name or a mail exchanger name) as described in [DNS]. In the 
  575. domain-literal form, the domain is interpreted as the literal Internet 
  576. address of the particular host. In both cases, how addressing is used and how 
  577. messages are transported to a particular named host is covered in the mail 
  578. transport document [SMTP]. These mechanisms are outside of the scope of this 
  579. document.
  580.  
  581. The local-part portion is a domain dependent string. In addresses, it is 
  582. simply interpreted on the particular host as a name of a particular mailbox. 
  583. In a message identifier (described in section 3.6.4), it is an indentifying 
  584. string that is unique to a message generated on a particular host. It is 
  585. otherwise uninterpreted in this standard.
  586.  
  587. 3.5 Overall message syntax
  588.  
  589. A message consists of header fields, optionally followed by a message body. 
  590. In a message body, though all of the characters listed in the text rule MAY 
  591. be used, the US-ASCII control characters(values 1 through 8, 11, 12, and 14 
  592. through 31) SHOULD NOT be used. Also, though the lines in the body MAY be a 
  593. maximum of 998 characters excluding the CRLF, lines SHOULD be limited to 78 
  594. characters excluding the CRLF.
  595.  
  596. message         =       (fields / obs-fields)
  597.                         [CRLF body]
  598.  
  599. body            =       *(*998text CRLF) *998text / obs-body
  600.  
  601. The header fields carry most of the semantic information and are defined in 
  602. section 3.6. The body is simply a series of lines of text which are 
  603. uninterpreted for the purposes of this standard.
  604.  
  605. 3.6 Field definitions
  606.  
  607. The header fields of a message are defined here. All header fields have the 
  608. same general syntactic structure: A field name, followed by a colon, followed 
  609. by the field body. The specific syntax for each header field is defined in 
  610. the subsequent sections.
  611.  
  612. Note: In the ABNF syntax for each field in subsequent sections, each field 
  613. name is followed by the required colon. However, for brevity sometimes the 
  614. colon is not referred to in the textual description of the syntax. It is, 
  615. nonetheless, required.
  616.  
  617. It is important to note that the header fields are not guaranteed to be in a 
  618. particular order. They may appear in any order, and they have been known to 
  619. reordered occasionally when transported over the Internet. However, for the 
  620. purposes of this standard, header fields SHOULD NOT be reordered when a 
  621. message is transported or transformed. More importantly, the trace header 
  622. fields MUST NOT be reordered. Also, the resent header fields, if present, 
  623. SHOULD be kept in groups.
  624.  
  625. The only required header fields are the origination date field and the 
  626. originator address field(s). All other header fields are syntactically 
  627. optional.
  628.  
  629. fields          =       {[trace]
  630.                         *resent
  631.                         orig-date
  632.                         originator
  633.                         [identifier]
  634.                         [informational]
  635.                         [destination]
  636.                         *optional-field}
  637.  
  638. The exact interpretation of each field is described in subsequent sections.
  639.  
  640. 3.6.1 The origination date field
  641.  
  642. The origination date header consists of the field name "Date" followed by a 
  643. date-time specification.
  644.  
  645. orig-date       =       "Date:" date-time CRLF
  646.  
  647. The origination date specifies the date and time at which the creator of the 
  648. message indicated that the message was complete and ready to enter the mail 
  649. delivery system. For instance, this might be the time that a user pushes the 
  650. "send" or "submit" button in an application program. In any case, it is 
  651. specifically not intended to convey the time that the message is actually 
  652. transported, but rather the time at which the human or other creator of the 
  653. message has put the message in its final form, ready for transport. (For 
  654. example, a laptop user who is not connected to a network might queue a 
  655. message for delivery. The origination date should contain the date and time 
  656. that the user queued the message, not the time when the user connected to the 
  657. network to send the message.)
  658.  
  659. 3.6.2 Originator fields
  660.  
  661. The originator of a message takes one of two forms. The first is a single 
  662. header consisting of the field name "From" and a single mailbox 
  663. specification. Alternatively, the originator may be two headers, one of which 
  664. consisting of the field name "Sender" and a single mailbox address, and the 
  665. other with the field name "From" and a comma-separated list of one or more 
  666. mailbox specifications. In either form, there is also an optional "Reply-To" 
  667. field that may be included, which contains a comma-separated list of one or 
  668. more mailboxes.
  669.  
  670. originator      =       {(from / sender)
  671.                          [reply-to]}
  672.  
  673. reply-to        =       "Reply-To:" 1#mailbox CRLF
  674.  
  675. sender          =       {"Sender:" mailbox CRLF
  676.                          "From:" 1#mailbox CRLF}
  677.  
  678. from            =       "From:" mailbox CRLF
  679.  
  680. The originator indicates the mailbox(es) of the source of the message. The 
  681. "From:" field specifies the author(s) of the message, that is, the 
  682. mailbox(es) of the person(s) or system(s) responsible for the writing of the 
  683. message. The "Sender:" field specifies the mailbox of the agent responsible 
  684. for the actual transmission of the message. For example, if a secretary were 
  685. to send a message for another person, the mailbox of the secretary would go 
  686. in the "Sender:" field and the mailbox of the actual author would go in the 
  687. "From:" field. If the originator of the message can be indicated by a single 
  688. mailbox and the author and transmitter are identical, the simple "From" form 
  689. SHOULD be used. Otherwise, the "From/Sender" form SHOULD be used.
  690.  
  691. The originator also provides the information required to reply to a message. 
  692. When the "Reply-To:" field is present, it indicates the mailbox(es) to which 
  693. the author of the message suggests that replies be sent. In the absence of 
  694. the "Reply-To:" field, replies SHOULD be sent to the mailbox(es) specified in 
  695. the "From:" field.
  696.  
  697. In all cases, the "From:" field SHOULD NOT contain any mailbox which does not 
  698. belong to the author(s) of the message. See also section 3.6.3 for 
  699. information on forming the destination addresses for a reply.
  700.  
  701. 3.6.3 Destination address fields
  702.  
  703. The destination of a message contains three possible fields, each of the same 
  704. form: The field name, which is either "To", "Cc", or "Bcc", followed by a 
  705. comma-separated list of one or more addresses (either mailbox or group 
  706. syntax). Both the "To:" field and the "Bcc:" field MAY occur alone, but the 
  707. "Cc:" field SHOULD only be present if the "To:" field is also present.
  708.  
  709. destination     =       {["To:" 1#address CRLF]
  710.                          ["Cc:" 1#address CRLF]
  711.                          ["Bcc:" 1#address CRLF]}
  712.  
  713. The destination fields specify the recipients of the message. Each 
  714. destination field may have one or more addresses, and each of the addresses 
  715. receives a copy of the message. The only difference between the three fields 
  716. is how each are used.
  717.  
  718. The "To:" field contains the address(es) of the primary recipient(s) of the 
  719. message.
  720.  
  721. The "Cc:" field (where the "Cc" means "Carbon Copy" in the sense of making a 
  722. copy on a typewriter using carbon paper) contains the addresses of others who 
  723. should receive the message, though the content of the message may not be 
  724. directed at them.
  725.  
  726. The "Bcc:" field (where the "Bcc" means "Blind Carbon Copy) contains 
  727. addresses of recipients of the message whose addresses should not be revealed 
  728. to other recipients of the message. There are two ways in which the "Bcc:" 
  729. field is used. In the first case, when a message containing a "Bcc:" field is 
  730. prepared to be sent, the "Bcc:" line is removed even though all of the 
  731. recipients (including those specified in the "Bcc:" field) are sent a copy of 
  732. the message. In the second case, recipients specified in the "To:" and "Cc:" 
  733. lines each are sent a copy of the message with the "Bcc:" line removed as 
  734. above, but the recipients on the "Bcc:" line get a seperate copy of the 
  735. message containing a "Bcc:" line. (When there are multiple recipient 
  736. addresses in the "Bcc:" field, some implementations actually send a seperate 
  737. copy of the message to each recipient with a "Bcc:" containing only the 
  738. address of that particular recipient.) Which method to use with "Bcc:" fields 
  739. is implementation dependent, but refer to the "Security Considerations" 
  740. section of this document for a discussion of each.
  741.  
  742. When a message is a reply to another message, the mailboxes of the authors of 
  743. the original message (the mailboxes in the "From:" or "Reply-To:" fields) MAY 
  744. appear in the "To:" field of the reply, since that would normally be the 
  745. primary recipient. If a reply is sent to a message that has destination 
  746. fields, it is often desireable to send a copy of the reply to all of the 
  747. recipients of the message in addition to the author. When such a reply is 
  748. formed, addresses in the "To:" and "Cc:" fields of the original message MAY 
  749. appear in the "Cc:" field of the reply, since these are normally secondary 
  750. recipients of the reply. If a "Bcc:" field is present in the original 
  751. message, addresses in that field MAY appear in the "Bcc:" field of the reply, 
  752. but SHOULD NOT appear in the "To:" or "Cc:" fields.
  753.  
  754. 3.6.4 Identifier fields
  755.  
  756. Though optional, every message SHOULD have a "Message-ID:" field. 
  757. Furthermore, reply messages SHOULD have "In-Reply-To:" and "References:" 
  758. fields as appropriate, as described below.
  759.  
  760. The "Message-ID:" and "In-Reply-To:" field each contain a single unique 
  761. message identifier. The "References:" field contains one or more unique 
  762. message identifiers, optionally separated by CFWS.
  763.  
  764. The message identifier is simply a name-domain construct (addr-spec) enclosed 
  765. in the angle bracket characters, "<" and ">".
  766.  
  767. identifier      =       {["Message-ID:" msg-id CRLF]
  768.                          ["In-Reply-To:" msg-id CRLF]
  769.                          ["References:" msg-id *(*CFWS msg-id) CRLF]}
  770.  
  771. msg-id          =       "<" addr-spec ">"
  772.  
  773. The "Message-ID:" field provides a unique identifier which refers to a 
  774. particular version of a particular message. The uniqueness of the message 
  775. identifier is guaranteed by the host which generates it (see below). This 
  776. identifier is intended to be machine readable and not necessarily meaningful 
  777. to humans. A message identifier pertains to exactly one instantiation of a 
  778. particular message; subsequent revisions to the message should each receive 
  779. new message identifiers.
  780.  
  781. The "In-Reply-To:" and "References:" fields are used when creating a reply to 
  782. a message. They hold the message identifier of the original message and the 
  783. message identifiers of other messages (for example, in the case of a reply to 
  784. a message which was itself a reply). If the original message contains a 
  785. "Message-ID:" field, the contents of that field body should be copied into 
  786. the body of an "In-Reply-To:" field in the new message. If the original 
  787. message contains an "In-Reply-To:" field (and thus is a reply itself), the 
  788. contents of the body of the "In-Reply-To:" field should be copied into a 
  789. "References:" field in the new message. Finally, if the original message 
  790. contains a "References:" field (hence a reply to a reply), the contents of 
  791. that field body should be copied to the "References:" field in the new 
  792. message, appending to the contents if the original message also had an "In-
  793. Reply-To:" field. In this way, a "thread" of conversation can be established.
  794.  
  795. The message identifier itself is a domain-dependent unique identifier. The 
  796. domain portion of the identifier SHOULD be the domain name of the host on 
  797. which it was created, to guarantee uniqueness. The local-part portion of the 
  798. identifier MAY be any dot-atom or quoted-string. However, the entire 
  799. identifier MUST be globally unique. In order to do this, a common practice is 
  800. to form the local-part by using a combination of the current absolute time 
  801. and some other currently unique identifer on the host (for example a system 
  802. process identifier).
  803.  
  804. 3.6.5 Informational fields
  805.  
  806. The informational fields are all optional. The "Keywords:" field contains a 
  807. comma-separated list of one or more words or quoted-strings. The "Subject:" 
  808. and "Comments:" fields are unstructured fields as defined in section 2.2.1, 
  809. and therefore may contain text or folding white-space.
  810.  
  811. informational   =       {["Subject:" unstructured CRLF]
  812.                          ["Comments:" unstructured CRLF]
  813.                          ["Keywords:" 1#phrase CRLF]}
  814.  
  815. These three fields are only intended to have human-readable content with 
  816. information about the message. The "Subject:" field is the most common and 
  817. contains a short string identifying the topic of the message. When used in a 
  818. reply, it MAY contain the string "Re: " (from the abbreviation for 
  819. "Regarding") followed by the contents of the "Subject:" field body of the 
  820. original message. The "Comments:" field contains any additional comments on 
  821. the text of the body of the message. The "Keywords:" field contains a comma-
  822. separated list of important words and phrases that might be useful for the 
  823. recipient.
  824.  
  825. 3.6.6 Resent fields
  826.  
  827. Resent fields SHOULD be added to any message which is reintroduced by a user 
  828. into the transport system. A seperate set of resent fields SHOULD be added if 
  829. this occurs multiple times. All of the resent fields corresponding to a 
  830. particular re-sending of the message SHOULD be together. Each new set of 
  831. resent fields should be prepended to the message; that is, the most recent 
  832. set of resent fields should appear earlier in the message. No other fields in 
  833. the message should be changed when resent fields are added.
  834.  
  835. Each of the resent fields corresponds to a particular field elsewhere in the 
  836. syntax. For instance, the "Resent-Date:" field corresponds to the "Date:" 
  837. field and the "Resent-To:" field corresponds to the "To:" field. In each 
  838. case, the syntax for the field body is identical to the syntax given 
  839. previously for the corresponding field.
  840.  
  841. When resent fields are used, the resent originator and "Resent-Date:" fields 
  842. MUST be sent. The "Resent-Cc:" field SHOULD NOT be sent if the "Resent-To:" 
  843. field is not present. The "Resent-Message-ID:" field SHOULD be sent. The 
  844. simpler form of resent-orig SHOULD be used if "Resent-Sender:" would be 
  845. identical to "Resent-From:".
  846.  
  847. resent          =       {resent-orig CRLF
  848.                          "Resent-Date:" date-time CRLF
  849.                          ["Resent-To:" 1#address CRLF]
  850.                          ["Resent-Cc:" 1#address CRLF]
  851.                          ["Resent-Bcc:" 1#address CRLF]
  852.                          ["Resent-Message-ID:" 1#address CRLF]
  853.  
  854. resent-orig     =       ("Resent-From:" mailbox CRLF) /
  855.                          {"Resent-Sender:" mailbox CRLF
  856.                           "Resent-From:" 1#mailbox CRLF}
  857.  
  858. Resent fields are used to identify a message as having been reintroduced into 
  859. the transport system by a user. The purpose of using resent fields is to have 
  860. the message appear to the final recipient as if it were sent directly by the 
  861. original sender, with all of the original fields remaining the same. Each set 
  862. of resent fields correspond to a particular resending event. That is, if a 
  863. message is resent multiple times, each set of resent fields gives identifying 
  864. information for each individual time. Resent fields are strictly 
  865. informational. They MUST NOT be used in the normal processing of replies or 
  866. other such actions on messages.
  867.  
  868. The resent originator fields indicate the mailbox of the person(s) or 
  869. system(s) that resent the message. As with the regular originator fields, 
  870. there are two forms; a simple "Resent-From:" form which contains the mailbox 
  871. of the individual doing the resending, and the more complex form, when one 
  872. individual (identified in the "Resent-Sender:" field) resends a message on 
  873. behalf of one or more others (identified in the "Resent-From:" field).
  874.  
  875. Note: When replying to a resent message, replies should behave just as they 
  876. would with any other message, using the original "From:", "Reply-To:", 
  877. "Message-ID:", and other fields. The resent fields are only informational and 
  878. MUST NOT be used when forming replies.
  879.  
  880. The "Resent-Date:" indicates the date and time at which the resent message is 
  881. dispatched by the resender of the message. Like the "Date:" field, it is not 
  882. the date and time that the message was actually transported.
  883.  
  884. The "Resent-To:", "Resent-Cc:", and "Resent-Bcc:" fields function identically 
  885. to the "To:", "Cc:", and "Bcc:" fields respectively, except that they 
  886. indicate the recipients of the resent message, not the recipients of the 
  887. original message.
  888.  
  889. The "Resent-Message-ID:" field provides a unique identifier for the resent 
  890. message.
  891.  
  892. 3.6.7 Trace fields
  893.  
  894. The trace fields consist of a group of headers consisting of an optional 
  895. "Return-Path:" field, and one or more "Received:" fields. The exact syntax of 
  896. the trace fields is defined in [SMTP]. The following defines a placeholder 
  897. syntax.
  898.  
  899. trace           =       [return]
  900.                         1*received
  901.  
  902. return          =       "Return-Path:" *(CFWS text) CRLF
  903.  
  904. received        =       "Received:" *(CFWS text) CRLF
  905.  
  906. A full discussion of the trace fields is contained in [SMTP]. For the 
  907. purporses of this standard, the trace fields are strictly informational, and 
  908. any formal interpretation of them is outside of the scope of this document.
  909.  
  910. 3.6.8 Optional fields
  911.  
  912. Fields may appear in messages that are otherwise unspecified in this 
  913. standard. They must conform to the syntax of an optional-field. This is 
  914. basically a field name, made up of the printable US-ASCII characters except 
  915. SPACE and colon, followed by a colon, followed by unstructured text.
  916.  
  917. The field names of any optional-field MUST NOT be identical to any field name 
  918. specified elsewhere in this standard.
  919.  
  920. optional-field  =       field-name ":" unstructured
  921.  
  922. field-name      =       1*ftext
  923.  
  924. ftext           =       %d33..%d57 /            ; Any character except CTL,
  925.                         %d58..%d126             ;  SPACE, and ":".
  926.  
  927. For purposes of this standard, the meaning any optional field is 
  928. uninterpreted.
  929.  
  930. 4. Obsolete Syntax
  931.  
  932. Earlier versions of this standard allowed for different (usually more 
  933. liberal) syntax than are allowed in this version. Also, there have been 
  934. syntactic elements used in messages on the Internet that have never been 
  935. documented. Though these syntactic forms MUST NOT be generated according to 
  936. the grammar in section 3, they MUST be accepted and parsed by a conformant 
  937. receiver. This section documents this syntax.
  938.  
  939. One important difference between the obsolete and the current syntax is that 
  940. in structured header field bodies (i.e., between the colon and the CRLF of 
  941. any structured header field), white-space characters, including folding 
  942. white-space, and comments could be freely inserted between any syntactic 
  943. tokens. This allowed many complex forms that have proven difficult for some 
  944. implementations to parse.
  945.  
  946. Another key difference between the obsolete and the current syntax is that 
  947. the rule in section 3.2.4 regarding comments and folding whitespace does not 
  948. apply. See the discussion of folding whitespace in section 4.2 below.
  949.  
  950. Finally, certain characters which were formerly allowed in messages appear in 
  951. this section. The NULL character (ASCII value 0) was once allowed, but is no 
  952. longer for compatibility reasons. CR and LF were allowed to appear in 
  953. messages other than as CRLF. This use is also shown here.
  954.  
  955. Other differences in syntax and semantics are noted in the following 
  956. sections.
  957.  
  958. 4.1 Miscellaneous obsolete tokens
  959.  
  960. These syntactic elements are used elsewhere in the obsolete syntax or in the 
  961. main syntax.
  962.  
  963. obs-qp          =       "\" CHAR                ; CHAR is %d0..%d127
  964.  
  965. obs-body        =       *(*998obs-text CRLF) *998obs-text
  966.  
  967. obs-unstruct    =       *(FWS / obs-text)
  968.  
  969. obs-text        =       *(obs-char /
  970.                           (*CR obs-char) /
  971.                           (*LF *CR obs-char))
  972.  
  973. obs-char        =       text / %d0              ; %d0..%d127 except CR and LF
  974.  
  975. 4.2 Obsolete folding whitespace
  976.  
  977. In the obsolete syntax, any amount of folding whitespace MAY be inserted 
  978. where the obs-FWS rule is allowed. This creates the possibility of having two 
  979. consecutive "folds" in a line, and therefore the possibility that a line 
  980. which makes up a folder header could be composed entirely of whitespace.
  981.  
  982. obs-FWS         =       *(WS [CRLF WS])
  983.  
  984.  
  985. 4.3 Obsolete Date and Time
  986.  
  987. The syntax for the obsolete date format allows a 2 digit year in the date 
  988. field and allows for a list of alphabetic time zone specifications which were 
  989. used in earlier versions of this standard.
  990.  
  991. obs-year        =       2*DIGIT
  992.  
  993. obs-zone        =       "UT" / "GMT" /          ; Universal Time
  994.                                                 ; North American : UT
  995.                         "EST" / "EDT" /         ; Eastern:  - 5/ - 4
  996.                         "CST" / "CDT" /         ; Central:  - 6/ - 5
  997.                         "MST" / "MDT" /         ; Mountain: - 7/ - 6
  998.                         "PST" / "PDT" /         ; Pacific:  - 8/ - 7
  999.                         ("A".."I" / "K".."Z")   ; Military zone
  1000.  
  1001. Where a two or three digit year occurs in a date, the year should be 
  1002. interpreted as follows: If a two digit year is encountered whose value is 
  1003. between 00 and 49, the year should be interpreted by adding 2000, ending up 
  1004. with a value between 2000 and 2049. If a two digit year is encountered with a 
  1005. value between 50 and 99, or any three digit year is encountered, the year 
  1006. should be interpreted by adding 1900.
  1007.  
  1008. In the obsolete time zone, "UT" and "GMT" are indications of "Universal Time" 
  1009. and "Greenwich Mean Time" respectively and are both semantically identical to 
  1010. "+0000". The remaining three character zones are the US time zones. The "T" 
  1011. is simply "Time" and the "E", "C", "M", and "P" are "Eastern", "Central", 
  1012. "Mountain" and "Pacific". When followed by "S" (for "Standard"), each of 
  1013. these are equivalent to "-0500", "-0600", "-0700", and "-0800" respectively. 
  1014. When followed by "D" (for "Daylight" or summer time), the each add an hour 
  1015. and are therefore "-0400", "-0500", "-0600", and "-0700" respectively. The 1 
  1016. character military time zones were defined in a non-standard way in [RFC822] 
  1017. and are therefore unpredictable in their meaning. The original definitions of 
  1018. the military zones "A" through "I" are equivalent to "+0100" through "+0900" 
  1019. respectively; "K", "L", and "M" are equivalent to  "+1000", "+1100", and 
  1020. "+1200" respectively; "N" through "Y" are equivalent to "-0100" through "-
  1021. 1200" respectively; and "Z" is equivalent to "+0000". However, because of the 
  1022. error in [RFC822], they SHOULD all be considered equivalent to "-0000".
  1023.  
  1024. Other multi-character (usually between 3 and 5) alphabetic time zones have 
  1025. been used in Internet messages. Any unknown time zone specification SHOULD be 
  1026. considered equivalent too "-0000".
  1027.  
  1028. 4.4 Obsolete Addressing
  1029.  
  1030. There are two primary differences in addressing. First, mailbox addresses 
  1031. were allowed to have a route portion before the addr-spec when enclosed in 
  1032. "<" and ">". The route is simply a comma-separated list of domain names, each 
  1033. preceeded by "@", and the list terminated by a colon. Second, CFWS were 
  1034. allowed between the period-seperated elements of local-part and domain (i.e., 
  1035. dot-atom was not used).
  1036.  
  1037. obs-mailbox     =       obs-addr-spec / [obs-phrase] route-addr
  1038.  
  1039. route-addr      =       *CFWS "<" [route] obs-addr-spec ">" *CFWS
  1040.  
  1041. route           =       *CFWS 1#("@" obs-domain) ":" *CFWS
  1042.  
  1043. obs-addr-spec   =       obs-local-part "@" obs-domain
  1044.  
  1045. obs-local-part  =       quoted-string / atom *("." atom)
  1046.  
  1047. obs-domain      =       atom *("." atom) / domain-literal
  1048.  
  1049. When interpreting addresses, the route portion SHOULD be ignored.
  1050.  
  1051. 4.5 Obsolete header fields
  1052.  
  1053. [Editor's note: This section needs some work.]
  1054.  
  1055. Syntactically, the primary difference in the obsolete field syntax is that it 
  1056. allows multiple occurances of the destination, identifier, and informational 
  1057. fields. Also, the obsolete syntax allows for any amount of comment or folding 
  1058. whitespace before the ":" at the end of the field name.
  1059.  
  1060. obs-fields      =       {[obs-trace]
  1061.                         obs-orig-date
  1062.                         obs-originator
  1063.                         *obs-destination
  1064.                         *obs-identifier
  1065.                         *obs-information
  1066.                         *obs-resent
  1067.                         *obs-optional}
  1068.  
  1069. obs-trace       =       {[obs-return CRLF]
  1070.                         1*obs-received}
  1071.  
  1072. The obs-return and obs-received are again given here as template definitions. 
  1073. Their actual interpretation and full syntax is given in [SMTP].
  1074.  
  1075. obs-return      =       "Return-Path" *CFWS ":" *(obs-text / CFWS) CRLF
  1076.  
  1077. obs-received    =       "Received" *CFWS ":" *(obs-text / CFWS) CRLF
  1078.  
  1079. obs-orig-date   =       "Date" *CFWS ":" date-time CRLF
  1080.  
  1081. obs-originator  =       {(obs-from / obs sender)
  1082.                          [obs-reply-to]
  1083.  
  1084. obs-from        =       "From" *CFWS ":" obs-mailbox CRLF
  1085.  
  1086. obs-sender      =       {"Sender" *CFWS ":" obs-mailbox CRLF
  1087.                          "From" *CFWS ":" 1#obs-mailbox CRLF}
  1088.  
  1089. obs-reply-to    =       "Reply-To" *CFWS ":" 1#obs-mailbox CRLF
  1090.  
  1091. obs-destination =       {["To" *CFWS ":" 1#address CRLF]
  1092.                          ["Cc" *CFWS ":" 1#address CRLF]
  1093.                          ["Bcc" *CFWS ":" 1#address CRLF]}
  1094.  
  1095. obs-identifier  =       {["Message-ID" *CFWS ":" obs-msg-id CRLF]
  1096.                          ["In-Reply-To" *CFWS ":" *(phrase / obs-msg-id) 
  1097. CRLF]
  1098.                          ["References" *CFWS ":" *(phrase / obs-msg-id) 
  1099. CRLF]}
  1100.  
  1101. obs-msg-id      =       *CFWS "<" obs-addr-spec ">" *CFWS
  1102.  
  1103. obs-information =       {["Subject" *CFWS ":" obs-unstruct CRLF]
  1104.                          ["Comments" *CFWS ":" obs-unstruct CRLF]
  1105.                          ["Keywords" *CFWS ":" 1#phrase CRLF]}
  1106.  
  1107. obs-resent      =       {obs-resent-orig CRLF
  1108.                          "Resent-Date" *CFWS ":" obs-date-time CRLF
  1109.                          ["Resent-To" *CFWS ":" 1#address CRLF]
  1110.                          ["Resent-Cc" *CFWS ":" 1#address CRLF]
  1111.                          ["Resent-Bcc" *CFWS ":" 1#address CRLF]
  1112.                          ["Resent-Message-ID" *CFWS ":" 1#address CRLF]}
  1113.  
  1114. obs-resent-orig =       {("Resent-From" *CFWS ":" obs-mailbox CRLF /
  1115.                           {"Resent-Sender" *CFWS ":" obs-mailbox CRLF
  1116.                            "Resent-From" *CFWS ":" 1#mailbox CRLF})
  1117.                          ["Resent-Reply-To" *CFWS ":" 1#address CRLF]}
  1118.  
  1119. obs-optional    =       field-name *CFWS ":" obs-unstruct CRLF
  1120.  
  1121. 5. Security Considerations
  1122.  
  1123. Care should be taken when displaying messages on a terminal or terminal 
  1124. emulator. Powerful terminals may act on escape sequences and other 
  1125. combinations of ASCII CTL characters which remap the keyboard or permit other 
  1126. modifications to the terminal which could lead to denial of service or even 
  1127. damaged data. Message viewers may wish to strip potentially dangerous 
  1128. terminal escape sequences from the message prior to display. However, other 
  1129. escape sequences appear in messages for useful purposes (cf. [MIME-IMB], 
  1130. [ISO-2022-JP]) and therefore should not be stripped indiscriminantly.
  1131.  
  1132. Transmission of non-text objects in messages raises additional security 
  1133. issues. These issues are discussed is [MIME-IMT, MIME-IMB].
  1134.  
  1135. Many implementations use the "Bcc:" (blind carbon copy) field described in 
  1136. section 3.6.3 to facilitate sending messages to recipients without revealing 
  1137. the addresses of one or more of the addressees to the other recipients. 
  1138. Mishandling this use of "Bcc:" has implications for confidential information 
  1139. that might be revealed. For example, if using the first method described in 
  1140. section 3.6.3, where the "Bcc:" line is removed from the message, blind 
  1141. recipients have no explicit indication that they have been sent a blind copy, 
  1142. except insofar as their address does not appear in the message headers. 
  1143. Because of this, one of the blind addressees could potentially send a reply 
  1144. to all of the shown recipients and accidentally revealing that the message 
  1145. went to the blind recipient. When the second method from section 3.6.3 is 
  1146. used, the blind recipients address appears in the "Bcc:" field of a seperate 
  1147. copy of the message. If the "Bcc:" field sent contains all of the blind 
  1148. addressees, all of the "Bcc:" recipients will be seen by each "Bcc:" 
  1149. recipient. Even if a seperate message is sent to each "Bcc:" recipient with 
  1150. only the individual's address, implementations must still be careful to 
  1151. process replies to the message as per section 3.6.3 so as not to accidentally 
  1152. reveal the blind recipient to other recipients.
  1153.  
  1154. 6. Bibliography
  1155.  
  1156. [TBD]
  1157.  
  1158. 7. Author's Address
  1159.  
  1160. Peter W. Resnick
  1161. QUALCOMM Incorporated
  1162. 6455 Lusk Boulevard
  1163. San Diego, CA 92121-2779
  1164. Phone: +1 619 651 4478
  1165. FAX: +1 619 658 2230
  1166. e-mail: presnick@qualcomm.com
  1167.  
  1168. Grammar and syntax comments are welcome. Substantive comments on this 
  1169. document should be directed to the DRUMS working group. The subscription 
  1170. address is <drums-request@uninett.no>.
  1171.  
  1172. 8. Acknowledegments
  1173.  
  1174. [TBD]
  1175.  
  1176. Appendix A - Examples of messages
  1177.  
  1178. [TBD]
  1179.  
  1180. Appendix B - Differences from eariler standards
  1181.  
  1182. [Editor's note: I will use this section for some rough notes concerning 
  1183. differences between drafts for now. Eventually I will make this real.
  1184.  
  1185. 1. Fix quoted-pair (added parens)
  1186. 2. 4*DIGIT for year.
  1187. 3. Define year better.
  1188. 4. Take away silly padding restriction on day-of-month.
  1189. 5. Added "formula" to time zone semantics.
  1190. 6. Increase range of legal time and zone. (Researching reference)
  1191. 7. No more WS after ":"
  1192. 8. Reworded Reply-To
  1193. 9. Remove Reply-To != From
  1194. 10. Got rid of "case-insensitive" stuff
  1195. 11. Fixed FWS and comment
  1196. 12. Domain literals moved to addressing section.
  1197. 13. More explanation of Bcc reply and that Bcc may be empty
  1198. 14. Put optional CFWS back into Date.
  1199. 15. Take out SHOULD NOT on NO-WS-CTL
  1200. 16. More explanation on Resent.
  1201. 17. Fixed description of optional-field to not allow defined names
  1202. 18. Fixed obs-text to include NUL and CR and LF properly
  1203. 19. Describe specials.
  1204. 20. Return-Path and Received now only pointers to SMTP
  1205. 21. More explanation on what Date means.
  1206. 22. Case sensitivity and %d stuff from ABNF
  1207.  
  1208. To do list:
  1209.  
  1210. Take out 1000 char line limit
  1211. Clean up "lexical" and "semantics" speak.
  1212. Possibly seperate message-id from addressing.
  1213. Figure out what to do about trace/resent ordering.
  1214. Specifically talk about X-* headers.
  1215. Strengthen 1.3.
  1216.  
  1217. ]
  1218.  
  1219.