On 9/20/2012 2:11 PM, Tom Horsley wrote:
A slightly off topic question, but maybe someone here has seen something like this:
I want a program that operates entirely on the client side of an IMAP server, and implements the sieve filtering language by doing the necessary client side operations to move mail on the IMAP server, expunge mail, etc.
It would also act as a proxy between my real mail client and the IMAP server so I'd never see any mail that hasn't been filtered first.
The benefits are obvious: I could finally get sieve filtering on my stupid corporate exchange mail server :-).
Interesting idea. I've been experimenting a bit with the sieve-filter command line tool and the Dovecot imapc mail storage backend. This does not entirely match your proposed solution, since it'll have to operate as a cron job, but at least it is a start.
I've configured my experiment as follows:
=> I built a simple dovecot.conf
protocols = none
listen = *, ::
mail_location = imapc:~/imapc imapc_host = your.host.tld imapc_port = 143 imapc_user = username imapc_password = <whatever> imapc_ssl = starttls imapc_ssl_verify = no
=> I tested whether IMAP connection works:
stephan@klara:~/test$ /usr/lib/dovecot/imap -c ./dovecot.conf
- PREAUTH [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE] Logged in as stephan 2342 SELECT INBOX
- FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
- OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
- 8274 EXISTS
- 0 RECENT
- OK [UIDVALIDITY 1348169448] UIDs valid
- OK [UIDNEXT 8275] Predicted next UID
- OK [NOMODSEQ] No permanent modsequences 2342 OK [READ-WRITE] Select completed.
=> I built a Sieve script called test.sieve:
require "fileinto"; require "mailbox";
# Just moves mail elsewhere fileinto :create "Target";
=> And finally tested operation using sieve-filter:
sieve-filter -v -e -W -c dovecot.conf test.sieve INBOX
In the process a few problems were encountered and solved. This means that this little experiment will only work with the latest revisions of Dovecot v2.1/v2.2 and a matching Pigeonhole from their respective Mercurial repositories.
The conclusion so far is that, in essence, what you'd like to do is possible. However, to make Sieve filtering look like it is being run at delivery rather than at regular intervals in the background, we will need to build some sort of IMAP plugin that monitors INBOX for new messages and passes them through a Sieve filter before the user's proxied IMAP client can see them. I'll have to investigate how much work implementing this would be.
Regards,
Stephan.