MailFormat3.cr
Copyright Ó 1987, 1991 by Xerox Corporation. All rights reserved.
MChen, 09-Apr-87 10:40:47 PDT
Bill Jackson (bj) May 13, 1987 2:32:58 am PDT
Doug Terry, November 9, 1988 5:03:50 pm PST
The complete declaration of the MailFormat protocol is given below. This protocol describes the collection of message body parts associated with the MailTransport.ctStandardMessage contents type.
MailFormat: PROGRAM 1516 VERSION 3 = BEGIN
DEPENDS UPON
Time (15) VERSION 2,
MailTransport (17) VERSION 5;
Bulk Data Format
All messages consist of a sequence of message body parts. See MailTransport for a description of the bulk data format used to transport a message.
Types and Constants
BodyPartType: TYPE = MailTransport.BodyPartType;
Date: TYPE = Time.Time;
RName: TYPE = MailTransport.RName;
AttributeType: TYPE = LONG CARDINAL;
Val: TYPE = SEQUENCE OF UNSPECIFIED;
Attribute: TYPE = RECORD [
type: AttributeType,
value: Val
];
RNameList: TYPE = SEQUENCE OF RName;
IPMessageID: TYPE = RECORD [
originator: RName,
Note: The originator is optional in X.400, so clients cannot assume
[during ID comparisons] that other clients will supply this field.
uniqueString: STRING
];
IPMessageIDList: TYPE = SEQUENCE 100 OF IPMessageID;
There can be up to 100 message ids in a list.
Standard Message Body Part Types
A standardMessage has an attributes body part first, followed by a sequence of user-body parts. Attributes are listed in a section below.
Clients are encouraged to use these predefined types to identify messages that have the specified characteristics.
Interpretation
InterpretedBodyPartType: TYPE = { headingBodyPart(0), vpFolder(1), nsTextFile(2), vpDocument(3), otherNSFile(4), multinationalNote(5), ia5Note(6), pilotFile(7), g3Fax(8), teletex(9), telex(10), iso6937Note(11), interpress(12) };
BodyPartIndicatorArray: TYPE = ARRAY InterpretedBodyPartType OF BOOLEAN;
InterpretedBodyPartValues: TYPE = RECORD [
isPresent: BodyPartIndicatorArray,
headingBodyPart: HeadingBodyPart, -- (0)
vpFolder: Filing.SerializedFile, -- (1)
nsTextFile: Filing.SerializedFile, -- (2)
vpDocument: Filing.SerializedFile, -- (3)
otherNSFile: Filing.SerializedFile, -- (4)
multinationalNote: STRING, -- (5)
ia5Note: STRING, -- (6)
pilotFile: SEQUENCE OF UNSPECIFIED, -- (7) ???
g3Fax: X.420.g3Fax, -- (8)
teletex: X.420.teletex, -- (9)
telex: F.60.telex, -- (10)
iso6937Note: ISO6937.X.409.CEN/CENCELEC, -- (11)
interpress: Interpress -- (12)
];
headingBodyPart: BodyPartType = 0;
HeadingBodyPart: TYPE = SEQUENCE 150 OF Attribute;
There can be up to 150 attributes in a message.
vpFolder: BodyPartType = 1;
A Xerox Filing Protocol Filing.SerializedFile representing a viewpoint folder.
nsTextFile: BodyPartType = 2;
A Xerox Filing Protocol Filing.SerializedFile representing a text file.
vpDocument: BodyPartType = 3;
A Xerox Filing Protocol Filing.SerializedFile representing a viewpoint document.
otherNSFile: BodyPartType= 4; 
A Xerox Filing Protocol Filing.SerializedFile other than vpFolder, nsTextFile, or vpDocument
multinationalNote: BodyPartType= 5;
A maximum of LAST[CARDINAL] characters from the Xerox Character Code Standard.
ia5Note: BodyPartType= 6; 
A maximum of LAST[CARDINAL] characters from international Alphabet No 5. Very similar to ASCII.
pilotFile: BodyPartType = 7;
The file type used in the Xerox Development Environment.
g3Fax: BodyPartType = 8;
A g3Fax document encoded as defined in X.420.
teletex: BodyPartType = 9;
A teletex document encoded as defined in X.420.
telex: BodyPartType = 10;
A telex document encoded as defined in F.60.
iso6937Note: BodyPartType = 11;
An ISO6937 body part X.409 encoded according to the CEN/CENELEC implementation agreements.
interpress: BodyPartType = 12;
An Interpress body part encoded according to the Xerox Interpress Electronic Printing Standard.
Mail Attributes of a StandardMessage.
Each user agent must construct a collection of attributes to associate with a message.
Interpretation
InterpretedAttributeType: TYPE = { xx(0), messageID(1), originator(2), authorizingUsers(3), primaryRecipients(4), copyRecipients(5), blindCopyRecipients(6), inReplyTo(7), obsoletes(8), crossReferences(9), subject(10), expiryDate(11), replyBy(12), replyToUsers(13), importance(14), sensitivity(15), autoforwarded(16, immutable(17), replyRequest(18), textAnnotation(19), forwardedHeadings(20),
firstInterlispType(4910), lastInterlispType(4919),
firstGWType(4920), lastGWType(4927) };
InterpretedAttributeIndicatorArray: TYPE = ARRAY InterpretedAttributeType OF BOOLEAN;
InterpretedBodyPartValues: TYPE = RECORD [
isPresent: InterpretedAttributeIndicatorArray,
xx: XX, -- (0)
messageID: MessageID, -- (1)
originator: Originator, -- (2)
authorizingUsers: AuthorizingUsers, -- (3)
primaryRecipients: PrimaryRecipients, -- (4)
copyRecipients: CopyRecipients, -- (5)
blindCopyRecipients: BlindCopyRecipients, -- (6)
inReplyTo: InReplyTo, -- (7)
obsoletes: Obsoletes, -- (8)
crossReferences: CrossReferences, -- (9)
subject: Subject, -- (10)
expiryDate: ExpiryDate, -- (11)
replyBy: ReplyBy, -- (12)
replyToUsers: ReplyToUsers, -- (13)
importance: Importance, -- (14)
sensitivity: Sensitivity, -- (15)
autoforwarded: Autoforwarded, -- (16)
immutable: Immutable, -- (17)
replyRequest: ReplyRequest, -- (18)
textAnnotation: TextAnnotation, -- (19)
forwardedHeadings: ForwardedHeadings, -- (20)
firstInterlispType: XX, -- (4910)
lastInterlispType: XX, -- (4919)
firstGWType: XX, -- (4920)
lastGWType: XX, -- (4927)
];
messageID: AttributeType = 1;
MessageID: TYPE = IPMessageID;
Contains a unique ID for the message.
originator: AttributeType = 2;
Originator: TYPE = RName;
The name of the user who actually submitted the message. The contents of this field are normally the same as the contents of the originator field of the envelope.
authorizingUsers: AttributeType = 3;
AuthorizingUsers: TYPE = RNameList;
The name(s) of the user(s) who authorized the message, to be used when different from the name in the originator field.
primaryRecipients: AttributeType = 4;
PrimaryRecipients: TYPE = RNameList;
The names of the primary recipients of the message. Note that the contents of this field need not be the same as the contents of the recipient list on the envelope, which may also include names of both kinds of copy recipients.
copyRecipients: AttributeType = 5;
CopyRecipients: TYPE = RNameList;
The names of the secondary recipients for the message.
blindCopyRecipients: AttributeType = 6;
BlindCopyRecipients: TYPE = RNameList;
Identifies recipients for "blind" copies of the message. The members of this list will get copies of the message, but their names will not appear in any of the fields seen by other recipients. Other recipients will get a special version of the message with the BlindCopyRecipients omitted.
inReplyTo: AttributeType = 7;
InReplyTo: TYPE = IPMessageID;
Designates previous correspondence to which this message is a reply. The usual contents of this field would be the IPMessageID field of the message being replied to.
obsoletes: AttributeType = 8;
Obsoletes: TYPE = IPMessageIDList;
Identifies one or more messages that this one supplants. Should contain one or more message IDs.
crossReferences: AttributeType = 9; 
CrossReferences:TYPE = IPMessageIDList;
Identifies other correspondence that this message references.
subject: AttributeType = 10;
Subject: TYPE = STRING;
Whatever information the originator provided to summarize or indicate the nature of the message.
expiryDate: AttributeType = 11;
ExpiryDate: TYPE = Date;
The date on which a message loses effect. Useful for voice mail.
replyBy: AttributeType = 12;
ReplyBy: TYPE = Date;
The date by which replies to this message are requested.
replyToUsers: AttributeType = 13;
ReplyToUsers: TYPE = RNameList;
The names to be used as recipients for replies to this message.
importance: AttributeType = 14;
Importance: TYPE = {low(0), normal(1), high(2)};
Indicates the significance of the message.
sensitivity: AttributeType = 15;
Sensitivity: TYPE = {personal(0), private(1), companyConfidential(2)};
Indicates the sensitivity of the message.
autoforwarded: AttributeType = 16;
Autoforwarded: TYPE = BOOLEAN;
Indicates that the forwarded message body part(s) were auto-forwarded.
immutable: AttributeType = 17; 
Immutable: TYPE = ARRAY 0 OF UNSPECIFIED;
Immutable: TYPE = RECORD [ ];
If present, this attribute prevents a mail gateway from modifying the contents of a message. Any formatting information goes in additional attributes [not defined here].
replyRequest: AttributeType = 18;
ReplyRequest: TYPE = RNameList;
If present, this attribute indicates who is expected to reply to the message.
textAnnotation: AttributeType = 19;
TextAnnotation: TYPE = STRING;
Plain text sting which may be parsed by a gateway to the arpanet. A masimum of 2000 characters are allowed.
forwardedHeadings: AttributeType = 20;
ForwardedHeadings: TYPE = SEQUENCE OF ForwardedMessageInfo;
ForwardedMessageInfo: TYPE = RECORD [
envelope: EnvelopeAtt,
heading: HeadingAtt,
associatedBodyParts: assocBP,
indexOfParentHeading: IndexOfParentHeading
];
BodyPartIndex: TYPE = CARDINAL;
EnvelopeAtt: TYPE = SEQUENCE 100 OF MailTransport.EnvelopeItem;
HeadingAtt: TYPE = SEQUENCE 150 OF Attribute;
assocBP: TYPE = SEQUENCE 500 OF BodyPartIndex;
IndexOfParentHeadingKind: TYPE = { null(0), nested(1) };
IndexOfParentHeading: TYPE = CHOICE IndexOfParentHeadingKind OF {
null => NullRecord,
nested => NestedIndex
};
NullRecord: TYPE = RECORD [ ];
NestedIndex: TYPE = RECORD [ index: CARDINAL];
This attribute will appear in messages containing a forwarded message. Note that headings may be nested several levels deep.
Attributes used by Xerox
The following mail attributes are reserved for use by specialized Xerox client programs. They are not intended for use by all User Agents and do not correspond to any CCITT heading components. They are not a part of the standard for compatibility purposes and are recorded here for bookkeeping purposes only.
firstInterlispType: AttributeType = 4910;
lastInterlispType: AttributeType = 4919;
block of attributes reserved for special Interlisp data.
firstGWType: AttributeType = 4920;
lastGWType: AttributeType = 4927;
block of attributes reserved for gateway use.
END.