RFC 680

Message Transmission Protocol

๐Ÿ“… published April 1975, from ietf

RFC 680: Message Transmission Protocol โœจ

Okay bestie, this is RFC 680 ๐ŸŽ€ It was published on April 30, 1975 by the Network Working Group, with NIC 32116. The authors are Theodore H. Myer and D. Austin Henderson, both from BBN-TENEX ๐Ÿ’– The title block doesn't list a category, and it doesn't say this doc obsoletes or updates anything ๐Ÿ™ˆ


This doc defines a bunch of message fields that go beyond the ones covered in RFC 561 ๐Ÿฆ‹ The overall message format is compatible with RFC 561, and it leans super hard on the miscellaneous fields RFC 561 already set up ๐Ÿ’… The goal is to create ARPANET standards for the syntax and semantics of these extra fields. Not every Message Server is expected to automatically process all of them ๐Ÿ™ˆ But sites that want to use these fields need a standard to work with ๐Ÿซถ

This doc tries to walk the line between stuff that's useful for humans and stuff that's useful for machines ๐Ÿงš The general vibe is that these fields are helpful to people even when nothing processes them automatically. Most machine-readable bits are wrapped in angle brackets (<>), so automatic processes can tell easily and unambiguously whether to look in a field and where ๐Ÿ” The whole spec is made excessively general so people can experiment ๐ŸŒˆ Future docs based on experience will get more specific. This is just the next step after <RFC 561> โญ

The doc has two sections ๐Ÿ’… Section I covers the relevant parts of RFC 561 that define the basic message syntax. Section II lists the new (and existing) header fields along with their proposed uses.

SECTION I: BASIC MESSAGE SYNTAX ๐ŸŽ€

Here's the grammar, copied exactly as it is in the original ๐Ÿ’–

<message>            ::=     <header><crlf><body>
<header>             ::=     <required header><optional header>
<required header>    ::=     <date item><sender item>
<date item>          ::=     DATE:<sp><date><sp>AT<sp>
                             <time>-<zone><crlf>
<date>               ::=     <vdate>  !  <tdate>
<vdate>              ::=     <dayofmonth><SP><vmonth><SP><vyear>
<tdate>              ::=     <tmonth>/<dayofmonth>/<tyear>
<dayofmonth>         ::=     one or two decimal digits
<vmonth>             ::=     JAN ! FEB ! MAR ! APR ! MAY ! JUN !
                             JUL ! AUG ! SEP ! OCT ! NOV !  DEC
<tmonth>             ::=     one or two decimal digits
<vyear>              ::=     four decimal digits
<tyear>              ::=     two decimal digits
<zone>               ::=     EST ! EDT ! CST ! CDT ! MST ! MDT !
                             PST ! PDT ! GMT ! GDT
<time>               ::=     four decimal digits
<sender item         :=      SENDER: <sp><user><sp>AT<sp><host>
                             <crlf>
<optional header>    ::=     <subjects><optional items>
<subjects>           ::=     !<subject item> !
                             <subject item><subjects>
<subject item>       ::=     SUBJECT:<sp><line><crlf>
<optional items>     ::=     <optional item> ! <optional item>
                             <optional items>
<optional item>      ::=     <messid> ! <addressee item> !
                             <other item>
<addressee item>     ::=     <addressee keyword>:<sp><addressee
                             list><crlf>
<addressee keywork>  ::=     TO:! CC:! BCC:!
<messid>             ::=     Message-ID:<sp>[<Net
                             Address>}]<line>
                             <crlf>
<other item>         ::=     <other keyword>:<sp><line><crlf>
<other keyword>      ::=     FROM ! IN-REPLY-TO! REFERENCES!
                             KEYWORD ! PRECEDENCE !
                             MESSAGE-CLASS!
                             SPECIAL-HANDLING! AUTHENTICATION!
                             ACCESSION-KEY
<address list>       ::=     <addressee> ! <addressee><addressee
                             list>
<addressee>          ::=     <mailbox> ! <mailbox group>
<mailbox>            ::=     <user><host spec><attention spec>
<host spec>          ::=     !@<host>
<attention spec>     ::=     (ATTN:<sp><user list>)
<user list>          ::=     <user> ! <user><user list>
<mailbox group>      ::=     <group name>:(<group numbers>)
<group numbers>      ::=     ! (<mailbox list>)
<mailbox list>       ::=     <mailbox> ! <mailbox>,<mailboxlist>
<body>               ::=     <line><CRLF> ! <line><CRLF><body>
<user>               ::=     <word>
<host>               ::=     a standard host name
<group name>         ::=     ! <word>
<line>               ::=     a string containing any of the 128
                             ASCII
                             characters except CR and LF
<word>               ::=     a string containing any of the 128
                             ASCII
                             characters except CR, LF, and SP
<CRLF>               ::=     CR LF
<SP>                 ::=     space

Notes, bestie ๐Ÿ“

  1. A message can have at most one MESSAGE-ID item.
  2. All items with the same keyword must be grasped together.

Please note the following ๐Ÿ‘€

(1) The case (upper or lower) of keywords doesn't matter. That covers 'FROM', 'DATE', 'SUBJECT', 'AT', <host>, <zone>, <vmonth> and <keyword>. Even though 'FROM' is written in uppercase in the formal syntax above, it can show up in an actual message header as 'FROM', 'from', 'From', or whatever else ๐Ÿ’…

(2) Nobody's legislated the format of <user> beyond banning spaces from it ๐Ÿ™ˆ

(3) The time has no internal punctuation โฐ

SECTION II: MESSAGE HEADER FIELDS ๐Ÿ’–

A. ORIGINATOR SPECIFICATION FIELDS ๐Ÿฆ‹

FROM

This field holds the identity of the person who wanted this message sent ๐Ÿ’Œ It's expected to be the originator field the user specifies when one person enters a message on behalf of another. The message-creation process should default this field to the user entering the message. [The usage for FROM and SENDER differs from that of RFC 561.]

SENDER

This field holds the identity of the person who sends the message ๐Ÿ“ฎ It's expected that the message-creation process sets this automatically. Some sites might not include this field in external communications ๐Ÿ™ˆ

AUTHENTICATION

This field describes which originator fields have been authenticated, and which operating systems did the authenticating ๐Ÿ” It should be created by the message transmission and/or reception processes (FTP/Operating System level).

It's expected that current systems will only be able to authenticate the SENDER field ๐Ÿ˜ญ Later systems might have ways to verify that the FROM actually authorized the SENDER to act for them ๐Ÿ‘‘ Once the FROM is authenticated, the SENDER won't be necessary for external distribution anymore ๐Ÿซถ

B. REFERENCE SPECIFICATION FIELDS ๐ŸŒธ

MESSAGE-ID

This field holds a unique identifier that refers to this message ๐Ÿชช The format is:

[Net Address]Text String CRLF

Examples:

[ISIB]7-DEC-74.14:23:45
[ARC]QLOURNAL 39274a3

Uniqueness is guaranteed when each net-address message processor makes the text after the net-address unique for that net-address. Note that it says net-address and not site name ๐Ÿ‘€ That would let BBN, for instance, allocate unique identifiers across all four machines, which can be addressed as BBN within the message system. Users get a more integrated service out of that โœจ

The text after the net-address isn't defined here, because the problems with that spec are too big right now ๐Ÿ˜ญ The net-address should still let automatic processes figure out if they can handle the text after it intelligently. That opens up a few kinds of automatic processing for the local message reader ๐Ÿงš

  1. If the site uses a filing mechanism the reader knows, the reader can retrieve the message.
  2. If the site supports remote message access (a protocol not currently defined), the message id can be passed to the remote site. The message has been filed in the Datacomputer, using the entire message id (including the net-address) as the handle, so the reader can retrieve it from the Datacomputer ๐Ÿ’พ

IN-REPLY-TO

This field identifies previous correspondence that this message answers ๐Ÿ’ฌ If message identifiers are used in this field, they should be enclosed in angle brackets (<>).

REFERENCES

This field identifies other correspondence that this message references ๐Ÿ“š If message identifiers are used, they should be enclosed in angle brackets (<>).

KEYWORDS

This field holds keywords or phrases from the message, separated by commas ๐Ÿท๏ธ

C. RECEIVER SPECIFICATION FIELDS ๐Ÿ’Œ

TO

This field holds the identity of the primary receivers of the message ๐Ÿ’–

CC

This field holds the identity of the secondary receivers of the message ๐Ÿฉท

BCC

This field holds the identity of the tertiary receivers of the message ๐Ÿคซ It should not be made available to the primary and secondary receivers, but it may be recorded to provide information for access control ๐Ÿ”’

D. MESSAGE-TYPE SPECIFICATION FIELDS ๐ŸŽ€

PRECEDENCE

This field describes how important and urgent the message is ๐Ÿšจ Machine-readable notations go in angle brackets (<>). <PRIORITY> means the message should be delivered as soon as possible. <ROUTINE> means priority processing isn't necessary. Plain text can also go in this field ๐Ÿ’…

MESSAGE-CLASS

This field describes the "legal" status of the message โš–๏ธ Examples include Official, Unofficial, Record, Off the Record, and Junk Mail. No automatic processing of this field is immediately expected ๐Ÿ™ˆ Some message creation processes might, for example, always insert:

MESSAGE CLASS: Unofficial ARPANET Message

SPECIAL-HANDLING

This field holds any special instructions for how the receiver's end should handle the message ๐Ÿซฃ Machine-readable notations go in angle brackets (<>). <PRIVATE> means the message reception process should not help the user pass copies around to others ๐Ÿค Plain text can also go in this field ๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from