Viewing Mail

Mail viewing is a really important angle, as hypertext mail is going to be really cool, and there is such a lot of stuf f which is mail to which one will need to refer.

See also: sending mail

Current practice

Currently, there are many sets of scripts which take a stream of mail and arrange it into a web. The web is then basically static, in that it is not designed for easy manipualion. Also, it is a rather heavy user of files.

Most mail interfaces manipulate mail by actually moving mail from one mbox file from another. This is slow. It involves rebuilding indexes on each of the mbox files involved, which is also slow although can be incremental. This systems doesn't allow the same message to be filed in two mailboxes unless it is duplicated (yuk).

Requirements

To give the functionality of a good mail application, I see the need for a basic store of messages, which I would expect to be by date. Making this a Berkeley mailbox (mbox) format makes life a lot easier for integration with other systems.A mail folder then becomes a view, or query, on the mail. The most general model is that mail messages can have arbitrary labels (flags) added a la emacs RMAIL. The labels would have to be selected from a set, which is user definable. In a web application, a label could be represented as including a list of all messages having that label. Adding a label would be a question of making a link from the label to the message.

(Should this mailbox system be reserved for messages? Why not allow any URL to be included in the indexing system?)

Garbage collection

The lifetime of a message would be affected by its date, and other parameters in a flexible expression.

Software components

Use of the message-id and date as a URL for mail messages.

Indexing of mbox files to allow rapid retrieval of messages by date and message-id, and retrieval by message-id only being rapid for recent messages.

It may be that the rest of the fucntionality is best implemented using a relational database program, but a set of hash objects and data objects would probably work fine for most people's work load.

Tim BL