On Thu, 2004-05-27 at 20:07, Joshua Goodall wrote:
On Wed, May 26, 2004 at 07:31:30PM -0400, Geo Carncross wrote:
Just as an implementation point; it would be good if the specification language was Sieve.
This could require the IMAP server fetch the entire contents of a message before processing something as simple as a FETCH FLAGS command.
That would be a naive implementation.
I didn't say _would_, I said _could_. Read on...
Also, much of sieve would be otherwise useless (fileinto, keep, etc).
The rationale is this: if a Sieve-based delivery agent exists, you'll be using some kind of frontend tool to write configuration filters. It is a big usability win if the delivery filter language, and thus the interface, has the same logic as the virtual folder specification language and interface.
One might add an "appearin" extension to sieve that would work like "fileinto" but only be a reference to wherever the message actually went.
If this were the case, the task could actually be made simpler: "appearin" would add the message to the mailbox, but mark it with some special flags that Dovecot would know that actions on this message must be postprocessed by the sieve program (after mirroring to the original copy of the message-- wherever it was fileinto'd).
Whenever changes where made, the copies of the messages would be deleted in such a way that they were REALLY DELETED (without having to EXPUNGE) and they could be redelivered.
The obvious benefit to this manner is that sieve actually makes this behavior pleasant, and it requires only MINIMAL changes to dovecot.
_AND_ you get to pretend you can reuse all your helpful sieve scripts and script generators :)
[[ and in reality, you probably can, with minor adjustments to take advantage of appearin ]]
With this, the Outbox and Shared virtual folders could be implemented. One could also implement the PHB-filter I described.
However. This doesn't make it possible to implement the virtual Trashbox (unless sieve could ask questions about mailboxes instead of "the current message"), the virtual Junk folder (same reason). Sieve doesn't have a way to ask "FOR ALL DELETED MESSAGES", or "FOR ALL KEYWORD JUNK MESSAGES" -- instead you have to say "if this message is deleted", or "if this message is junk" -- something that unless the sieve implementation was optimized for, would require an extraneous amount of work.
Much more so than playing IMAP questions, anyway.
It'd also require sieve be available to dovecot, which it isn't (yet).
Indeed. If there was a dovecot-API-based delivery agent, I hope it would speak Sieve. Such a thing lurks at the back of my mind in the stack marked "interesting projects".
Sieve is not a complicated language, but adding the "appearin" extension wouldn't require a system so intricately tied to dovecot. One could use arbitrary scripts, with "appearin" implemented as a simple program. It might suit some peoples desires, but I don't think it would help mine out any...