With my (seemingly endless) work on mail servers, I ran across a couple good pieces of information regarding the format and structure of Maildir’s.
A description of the folders, how to write messages to a maildir, the basic structure, etc:
Essentially, each filter has a ‘new’, ‘cur’, and ‘tmp’ directory. tmp is used when writing the message, and then the file is immediately moved to the ‘new’ directory, and the S=xxxx part added with the file size in bytes. Once a file is read by a mail client, it is moved to the ‘cur’ directory, a ‘:2,<FLAGS>’ parameter is added, where the flags can be used to mark the message as read, replied, deleted, etc
The format and ways to use the maildirsize file:
In the maildirsize file, the first line contains the quota size in the format xxxS,yyyC where xxx is the total size in bytes, and yyy is the number of messages. So a quota of 1048576S,1000C would be either 1 MB or 1000 messages (whichever occurs first). Then, each line after that contains two numbers. The first is a size in bytes, and the second is the number of messages.
Each time a new message is saved, a new line is added to maildirsize with its size. The total quota is calculated by totaling up the two columns. Occasionally, the maildirsize file is recalculated from scratch.