Platform SDK: MAPI

TNEF Stream Syntax

This topic presents a Bakus-Nauer like description of the TNEF stream syntax. In this description, nonterminal elements that have a further definition are in italics. Constants and literal items are in bold. Sequences of elements are listed in order on a single line. For example, the Stream item consists of the constant TNEF_SIGNATURE, followed by a Key, followed by an Object. When an item has more than one possible implementation, the alternatives are listed on consecutive lines. For example, an Object can consist of a Message_Seq, a Message_Seq followed by an Attach_Seq, or just an Attach_Seq.

TNEF_Stream:
TNEF_SIGNATURE Key Object
Key:
a nonzero 16-bit unsigned integer

TNEF enabled transports generate this value before using the TNEF implementation to generate a TNEF stream.

Object:
Message_Seq
Message_Seq Attach_Seq
Attach_Seq
Message_Seq:
attTnefVersion
attTnefVersion Msg_Attribute_Seq
attTnefVersion attMessageClass
attTnefVersion attMessageClass Msg_Attribute_Seq
attMessageClass
attMessageClass Msg_Attribute_Seq
Msg_Attribute_Seq
attTnefVersion:
LVL_MESSAGE attTnefVersion sizeof(ULONG) 0x00010000 checksum
attMessageClass:
LVL_MESSAGE attMessageClass msg_class_length msg_class checksum
Msg_Attribute_Seq:
Msg_Attribute
Msg_Attribute Msg_Attribute_Seq
Msg_Attribute:
LVL_MESSAGE attribute-ID attribute-length attribute-data checksum

Attribute-ID is one of the TNEF attribute identifiers, such as attSubject. Attribute-length is the length in bytes of the attribute data. Attribute-data is the data associated with the attribute.

Attach_Seq:
attRenddata
attRenddata Att_Attribute_Seq
attRenddata:
LVL_ATTACHMENT attRenddata sizeof(RENDDATA) renddata checksum

Renddata is the data associated with the RENDDATA structure containing the rendering information for the corresponding attachment. The RENDDATA structure is defined in the TNEF.H header file.

Att_Attribute_Seq:
Att_Attribute
Att_Attribute Att_Attribute_Seq
Att_Attribute:
LVL_ATTACHMENT attribute-ID attribute-length attribute-data checksum

Attribute-ID, attribute-length, and attribute-data have the same meanings as for the Msg_Attribute item.