ABNF描述
TNEFStream = TNEFHeader TNEFVersion OEMCodePage MessageData *AttachDataTNEFHeader = 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.48.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.881)
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 = %x00.02.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