idx outlook express (ie4) index file
format
by jeff evans idx file format ---------------------- index size description -------- ------- ---------------- 1-4 4 bytes file id (the ascii string "jmf9") 5-8 4 bytes sub-id (the hex value 0x04000100) 9-12 4 bytes number of items in the index file (number of e-mail messages) 13-16 4 bytes file size in bytes 17-20 4 bytes ? (seems to contain the hex value 0x01000000) 21-24 4 bytes ? (seems to contain the hex value 0x10000100) 25-64 40 bytes string composed of 0x00's index items immediately follow this header. each item has the following format: index size description -------- ------- ---------------- 1-4 4 bytes flags (see below) 5-8 4 bytes ? 9-12 4 bytes entry number (unique for each index item) 13-16 4 bytes ? 17-20 4 bytes remaining size in this index item, including the size of this value and the size of the end buffer 21-24 4 bytes ? 25-28 4 bytes size of the message, in bytes 29-194 166 bytes seems to be mostly empty, usage was unclear 195-202 8 bytes date message received (a win32 filetime structure) 203-210 8 bytes date message sent (a win32 filetime structure) 211-212 2 bytes ? 213-216 4 bytes size of the subject field in bytes 217-x x bytes subject field (an ascii string - length is specified by the preceding value) x-x 4 bytes size of senders e-mail address in bytes x-x x bytes senders e-mail address (an ascii string - length specified by preceding value) x-x 4 bytes size of senders name in bytes x-x x bytes senders name (an ascii string - length specified by preceding value) x-x 4 bytes size of pop server in bytes x-x x bytes pop server message was retrieved from x-x 5 bytes ? x-x 4 bytes size of username used to log into pop server x-x x bytes username used to log into pop server (an ascii string) x-x 4 bytes size of the name of the mail account x-x x bytes name of the outlook express account that corresponds to the pop server x-x 8 bytes ? x-x 0-3 bytes variable length buffer which is used to make the length of the entry an even multiple of 4 notes: the size of the index entries is measured from the "remaining size" value. this value is calculated such that it is equal to the number of bytes between the start of this variable and the end of the variable length buffer. each index entry has a set of flags which describe it's properties. a normal message appears to have a value of 10h. messages that are marked as read by the mail client have a value of 12h (you can perform a bitwise and on the flags using 2h to determine if the message has been read. ex:) if (dwflags & 2) (message is not read) else (message is read) there are probably other values to indicate attachments and priorities, but i did not attempt to work these out. i can be reached via e-mail at: [email protected] or [email protected] jeff evans. |