From: CSBVAX::MRGATE!info-vax-RELAY@KL.SRI.COM@SMTP 10-JUL-1988 04:44 To: ARISIA::EVERHART Subj: VMS mail file formats (again, sigh..) Received: from unocss.unl.edu ([129.93.1.11]) by KL.SRI.COM with TCP; Wed, 29 Jun 88 08:48:36 PDT Received: by unocss.unl.edu (4.12/4.7) id AA08254; Wed, 29 Jun 88 10:29:01 cdt Date: Wed, 29 Jun 88 10:29:01 cdt From: fritz@unocss.unl.edu (Tim Russell) Message-Id: <8806291529.AA08254@unocss.unl.edu> To: info-vax@kl.sri.com Subject: VMS mail file formats (again, sigh..) Well all, I just don't understand what the problem is with ftp'ing from our machine, because I've done it just fine from both our VMS and Ultrix machines and had absolutely no problems. The only thing I can think of is that I had named the files in all uppercase, because I figured the vast majority of access would be from VMS machines, and if the person didn't know to use quotes all over the place it wouldn't work. Perhaps I was wrong. I've renamed /everything/ to lowercase now, so perhaps the problem will be fixed... Who knows? Would somebody give it a try now and let me know if it works? Silly me.. The only reason the mail format description was 47K is that it was my VMS mail file on our unix machine and had many messages in it.. I cleaned those out and it's now less than 10k, so I've decided to post it here. Please forgive me if you think this is too big, but with all the problems everyone has been having, I figured it was worth it. =============================================================================== From IGLESIAS@UCI.BITNET Sat Mar 19 01:13:07 1988 Return-Path: iglesias@orion.cf.uci.EDU From: Mike Iglesias Here's something I wrote up a couple of years ago. 17-Jan-86 VMS MAIL file formats Disclaimer: I don't guarantee the following information is totally correct. It is based on reading the microfiche and looking at mail files. This information was derived from the VMS 4.0 microfiche. Use at your own risk. If you find any errors, have any new information to add, etc., you can send them to me at the following addresses: BITNET: MIGLESIAS@UCIVMSA NSFnet: MIGLESIAS@VMSA.CF.UCI.EDU US Mail: Mike Iglesias University of California Computing Facility Irvine, Ca 92717 Overview -------- There are two file formats used in the VMS MAIL system: The format for SYS$SYSTEM:VMSMAIL.DAT and the format for MAIL.MAI. SYS$SYSTEM:VMSMAIL.DAT has information on any forwarding set for each user, any directory (other than the login directory) where his mail file is, and a personal name. MAIL.MAI (really *.MAI) is the file in each user's account that actually contains the mail messages. I've tried to use the names DEC used in the file MAILDEF.SDL (fiche 228) wherever I could. Format of SYS$SYSTEM:VMSMAIL.DAT -------------------------------- The SYS$SYSTEM:VMSMAIL.DAT (hereafter refered to as VMSMAIL.DAT) file is a keyed file. The key is the USERNAME, blank filled to 31 characters. Record format: Field name Type Size Contents ------------- -------------- --------------- -------------------------- USERNAME character 31 bytes USERNAME FLAGS bit unsigned word MAIL flags NEWMAIL number unsigned word New mail count SPARE spare area 7 longwords SPARE1 spare area 2 bytes DIRLNG number unsigned byte Length of dir name if set FNMLNG number unsigned byte Length of personal name FWDLNG number unsigned byte Length of forward address if any of the last three items are set non-zero, the strings that they describe the length of follow in this order: Forward address Personal name Directory name The FLAGS field contains the following flags: Flag name Bit Hex value Meaning ------------- ----- ----------- ---------------------------------- SELFSEND 0 0001 Send a copy to self on a SEND SELFREPLY 1 0002 Send a copy to self on a REPLY NOAUTOPURGE 2 0004 Don't autopurge on EXIT or ^Z The minimum record length is 68 bytes. The maximum is 833 (I think), but be forwarned that SYS$EXAMPLES:MAILUAF.COM appears to only handle records up to 255 bytes long. To find the user's MAIL.MAI file, you need the device and directory from their SYSUAF record and the directory name from VMSMAIL.DAT (if DIRLNG is non-zero). Format of MAIL.MAI (or any other mail file name) ------------------------------------------------ Each record in the actual mail file (MAIL.MAI, etc) has two keys - the data/time the message was received, and the folder to which it belongs. The keys are in the 'common header' portion of the record, which each record in the file has at the begining. The 'common' part of the record looks like this: Field name Type Size Contents ------------- -------------- --------------- -------------------------- DATIM date/time quadword date/time field FILKEYLEN count unsigned byte Length of data in FILEKEY FILEKEY character 39 bytes Filing key (FOLDER name) (The keys are DATIM and FILEKEY) If the high longword of the DATIM field is zero, then this is an info record, and the low longword is the info record type. Info record types are: Code Meaning ---- ------------------------------------------------ 1 LASTREAD - date/time of last read message (not used?) 2 WASTENAME - name of wastebasket folder 3 FILEINFO - file information 4 MW - mailwatch info (not used?) 5 NEWMSG - new message info (not used?) It appears that there is always a type 3 record (FILEINFO) and, if you use the SET WASTEBASKET_NAME command, there will be a type 2 (WASTENAME) record. Formats for FILEINFO and WASTENAME records are: FILEINFO: Field name Type Size Contents ------------- -------------- --------------- -------------------------- ('common' header) DELETEDBYTES count lognword # of deleted bytes in file WASTENAME: Field name Type Size Contents ------------- -------------- --------------- -------------------------- ('common' header) LENGTH count unsigned byte length of folder name WASTENAME character LENGTH bytes name of wastebasket folder A record in the mail file can be at most 2048 bytes long. Message header record --------------------- Each message in the mail file has a message header record. The message header record has the 'common' header, followed by the mail header. The 'common' header has the folder that the message is in in the FILEKEY field, with the length of the folder name in FILKEYLEN. The mail header has the following format: Field name Type Size Contents ------------- -------------- --------------- -------------------------- ('common' header) FLAGS bit unsigned word message flags FLAGSIZ count unsigned byte size of flag string if ASCII FLAGVAL unknown unsigned longwd value of /FLAG= HDSPARE spare byte spare byte to align data DATID date/time quadword Key id of message text rec variable data (see below) The variable data contains the 'from', 'to', etc. data for the message. The variable data is formatted as follows Field name Type Size Contents ------------- -------------- --------------- -------------------------- CODE value word variable data code LENGTH count unsigned word length of variable data DATA depends on data LENGTH bytes data The codes and their data types are: Code Data type ------- ---------------------------------------- 0 'From' text string 1 'to' text string 2 'subject' text string 3 'cc' text string 4 mailwatch info - unknown data type 5 number of records in message 6 spec of external file (not used) Codes 7-32767 are reserved to DIGITAL, 32768-65535 are reserved for customers. The FLAGS field contains the following flags: Flag name Bit Hex value Meaning ------------- ----- ----------- ---------------------------------- NEWMSG 0 0001 This is a new message REPLIED 1 0002 This message has been replied to SKIP1 2 0004 spare bit EXTMSG 3 0008 message is in an external file SYSMSG 4 0010 message is in system file If the EXTMSG flag is set, the DATID is used as part of the file name after it is made into printable ASCII. For instance, if the DATID field contains hex '0004008E5BA9F107', the external file name would be 'MAIL$0004008E5BA9F107.MAI;1'. Message Text record ------------------- The message text record contains the actual text of a mail message unless the EXTMSG flag is set in the header record. Each message text record contains 1 or more message text lines. A message text record has the following format: Field name Type Size Contents ------------- -------------- --------------- -------------------------- ('common' header) LENGTH count unsigned word length of message text line DATA character LENGTH bytes message text line The LENGTH and DATA are repeated for each message text line in the message (the number of records in the message text are in the mail message header; see above), up to the length of the record. The only field in the 'common' header part of the message text record that is filled in is the DATIM field, which is the same as the DATID field in the message header record for this message text. If the message resides in an external file, the file is a variable length sequential file (carriage return carriage control). ---------------------------------+-------------------------------------------- Tim Russell, Computer Operator | Internet: fritz@fergvax.unl.edu Campus Computing | Bitnet: OPER06@UNOMA1, CONSLT32@UNOMA1 University of Nebraska at Omaha | UUCP: {ihnp4}!unocss!fritz ---------------------------------+--------------------------------------------