2.1.3.2 ABNF Description

 TNEFStream = TNEFHeader TNEFVersion OEMCodePage MessageData *AttachData
  
 TNEFHeader = TNEFSignature LegacyKey
 TNEFSignature = %x78.9F.3E.22
  
 ; Any number will suffice here. This is now legacy.
 LegacyKey = UINT16
  
 TNEFVersion = attrLevelMessage idTnefVersion Length TNEFVersionData Checksum
  
 OEMCodePage = attrLevelMessage idOEMCodePage Length OEMCodePageData Checksum
  
 MessageData = *MessageAttribute [MessageProps]
 MessageAttribute = attrLevelMessage idMessageAttr Length Data Checksum
 MessageProps = attrLevelMessage idMsgProps Length Data Checksum
  
 ; An attachment is determined/delimited by attAttachRendData, followed by
 ; other encoded attributes, if any, and ending with attAttachment if there are
 ; any encoded properties.
 AttachData = AttachRendData [*AttachAttribute] [AttachProps]
 AttachRendData = attrLevelAttachment idAttachRendData Length Data Checksum
 AttachAttribute = attrLevelAttachment idAttachAttr Length Data Checksum
 AttachProps = attrLevelAttachment idAttachment Length Data Checksum
  
 ; TNEF Version. Any number will suffice here. This is now legacy.
 TNEFVersionData = 4*4OCTET
  
 ; This is the code page of attribute strings. The TNEF stream MUST contain a
 ; code page in which all characters are 8 bits
 ; in length, for compatibility with legacy applications that cannot handle
 ; strings with embedded zero characters.
 OEMCodePageData = PrimaryCodePage SecondaryCodePage
 PrimaryCodePage=UINT32
  
 ; Secondary CodePage is unused. It SHOULD contain zero.
 SecondaryCodePage=%x00.00.00.00
  
 ; The length of the following data field in bytes. All attribute lengths are
 ; 32-bit integers, including any terminating null characters.
 Length = INT32
  
 ; Data of the attribute itself, flattened out based on the particular attribute
 ; according to the rules that follow.
 Data = 0*OCTET
  
 ; 16-bit unsigned integer that is the sum, modulo 65536, of the data bytes for
 ; the attribute value data, calculated over the entire length of the attribute data.
 ; In the case where the attribute contains enhanced properties with padding, the
 ; pad bytes MUST be included in the calculation.
 Checksum = UINT16
  
 ; Level where attribute applies, either to the message itself or to
 ; an attachment.
 attrLevelMessage = %x01
 attrLevelAttachment = %x02
  
 ; Attribute ID Tags
  
 ; TNEF Version
 idTnefVersion = %x06.90.08.00
  
 ; OEM Codepage. See attOemCodepage handling in section 5 and Appendix A.
 idOemCodepage = %x07.90.06.00
  
 ; Message-level attributes. SHOULD all be at attrLevelMessage.
 idMessageAttr = idMessageClass / idFrom / idSubject / idDateSent /
  idDateRecd / idMessageStatus / idMessageID /
  idBody / idPriority / idDateModified /
  idRecipTable / idOriginalMessageClass / idOwner / idSentFor /
  idDelegate / idDateStart / idDateEnd / idAidOwner / idRequestRes
  
 ;  PidTagMessageClass property ([MS-OXOMSG] section 2.2.2.1)
 idMessageClass = %x08.80.07.00
  
 ;  PidTagSender_XXX properties, as specified in section 2.1.3.1.1
 idFrom = %x00.80.00.00
  
 ;  PidTagSubject property ([MS-OXCMSG] section 2.2.1.46)
 idSubject = %x04.80.01.00
  
 ; PidTagClientSubmitTime property ([MS-OXOMSG] section 2.2.3.11)
 idDateSent = %x05.80.03.00
  
 ; PidTagMessageDeliveryTime property ([MS-OXOMSG] section 2.2.3.9)
 idDateRecd = %x06.80.03.00
  
 ; PidTagMessageFlags property ([MS-OXCMSG] section 2.2.1.6)
 idMessageStatus = %x07.80.06.00
  
 ; PidTagSearchKey property ([MS-OXCPRPT] section 2.2.1.9)
 idMessageID = %x09.80.01.00
  
 ; PidTagBody property ([MS-OXCMSG] section 2.2.1.56.1)
 idBody = %x0C.80.02.00
  
 ; PidTagImportance property ([MS-OXCMSG] section 2.2.1.11)
 idPriority = %x0D.80.04.00
  
 ; PidTagLastModificationTime property ([MS-OXCMSG] section 2.2.2.2)
 ; for the message
 idDateModified = %x20.80.03.00
  
 ; Message Property Encapsulation
 idMsgProps = %x03.90.06.00
  
 ; PidTagMessageRecipients propety ([MS-OXCMSG] section 2.2.1.47).
 ; For more details, see section 2.1.3.5.2.2.
 idRecipTable = %x04.90.06.00
  
 ; PidTagOriginalMessageClass property ([MS-OXPROPS] section 2.824)
 idOriginalMessageClass = %x00.06.07.00
  
 ; PidTagReceivedRepresenting_XXX or 
 PidTagSentRepresenting_XXX properties, as specified in section 2.1.3.1.1
 idOwner = %x00.00.06.00
  
  ; PidTagSentRepresenting_XXX properties, as specified in section 2.1.3.1.1
 idSentFor = %x01.00.06.00
  
 ; PidTagReceivedRepresentingEntryId property ([MS-OXOMSG] section 2.2.1.25)
 idDelegate = %x02.00.06.00
  
 ; PidTagStartDate property ([MS-OXOCAL] section 2.2.1.30)
 idDateStart = %x06.00.03.00
  
 ; PidTagEndDate property ([MS-OXOCAL] section 2.2.1.31)
 idDateEnd = %x07.00.03.00
  
 ; PidTagOwnerAppointmentId property ([MS-OXOCAL] section 2.2.1.29)
 idAidOwner = %x08.00.05.00
  
 ; PidTagResponseRequested property ([MS-OXOCAL] section 2.2.1.36)
 idRequestRes = %x09.00.04.00
  
 ; Attachment-level attributes. All MUST be at attrLevelAttachment.
 idAttachAttr = idAttachData / idAttachTitle / idAttachMetaFile /
 idAttachCreateDate / idAttachModifyDate / idAttachTransportFilename
  
 ; PidTagAttachDataBinary property ([MS-OXCMSG] section 2.2.2.7)
 idAttachData = %x0F.80.06.00
  
 ; PidTagAttachFilename property ([MS-OXCMSG] section 2.2.2.11)
 idAttachTitle = %x10.80.01.00
  
 ; PidTagAttachRendering property ([MS-OXCMSG] section 2.2.2.17)
 idAttachMetaFile = %x11.80.06.00
  
 ;  PidTagCreationTime property ([MS-OXCMSG] section 2.2.2.3)
 idAttachCreateDate = %x12.80.03.00
  
 ; PidTagLastModificationTime property ([MS-OXCMSG] section 2.2.2.2)
 ; for the attachment.
  idAttachModifyDate = %x13.80.03.00
  
 ; PidTagAttachTransportName property ([MS-OXCMSG] section 2.2.2.19)
 idAttachTransportFilename = %x01.90.06.00
  
 ; Attachment RendData, as specified in section 2.1.3.3.15
 idAttachRendData = %x02.90.06.00
  
 ; Attachment table row
 idAttachment = %x05.90.06.00
Show: