Hi all,
I'm experimenting with the expire plugin and seem have run into a small problem. I am using Dovecot 1.2.4 on a test server. The config is taken mostly verbatim from the expire plugin wiki page [1], using MySQL as a database. See below for detailed output.
Namespace "private" has "/" configured as mailbox separator:
namespace private { separator = / prefix = inbox = yes }
The "expire =" section from dovecot.conf thus looks like this:
plugin { expire = Trash 7 INBOX/Spam 8 INBOX/Spam/To-Discard 3 ... }
Three mailboxes/folders are kept track of: Trash, INBOX/Spam and INBOX/Spam/Spam-To-Discard (this one holds messages that scored high enough to very unlikely be legitimate and should be deleted soon).
But when a message is put into one of these folders the mailbox attribute of the expires table uses "." as mailbox separator:
mysql> select * from expires; +-----------------+----------------------------+--------------+ | username | mailbox | expire_stamp | +-----------------+----------------------------+--------------+ | foo@example.org | INBOX.Spam.Spam-To-Discard | 1253114526 | | foo@example.org | INBOX.Spam | 1253114528 | +-----------------+----------------------------+--------------+
Consequently, expire-tool --test seems to choke on this:
# dovecot --exec-mail ext /usr/local/libexec/dovecot/expire-tool --test
Info: foo@example.org/INBOX.Spam.Spam-To-Discard:
mailbox 'INBOX.Spam.Spam-To-Discard' removed from config
Info: foo@example.org/INBOX.Spam: mailbox 'INBOX.Spam'
removed from config
When I manually update the mailbox attribute to use "/" as separator expire-tool seems to work correctly:
# dovecot --exec-mail ext /usr/local/libexec/dovecot/expire-tool --test
Info: foo@example.org/INBOX/Spam/Spam-To-Discard: stop, expire
time in future: Wed Sep 16 17:22:06 2009
Using "." as separator in the "expire =" line doesn't work either: the expires table isn't written to at all when a message is put in one of the specified folders. Presumably because INBOX/Spam is the real mailbox but INBOX.Spam is monitored by the expire plugin and there is no INBOX.Spam to put in messages.
So I believe this is not the expected behaviour? Or am I doing anything wrong? I'd rather not change the separator from "/" to "." in all the namespaces if that can be avoided.
Thanks in advance,
Andreas
dovecot -n:
# 1.2.4: /usr/local/etc/dovecot.conf # OS: Linux 2.6.26-2-686 i686 Debian 5.0.2 log_timestamp: %Y-%m-%d %H:%M:%S protocols: managesieve imap imaps pop3 pop3s listen: 83.65.168.220 127.0.0.1 login_dir: /usr/local/var/run/dovecot/login login_executable(default): /usr/local/libexec/dovecot/imap-login login_executable(imap): /usr/local/libexec/dovecot/imap-login login_executable(pop3): /usr/local/libexec/dovecot/pop3-login login_executable(managesieve): /usr/local/libexec/dovecot/managesieve-login mail_access_groups: mail mail_privileged_group: mail mail_location: maildir:~/Maildir mail_drop_priv_before_exec: yes mail_executable(default): /usr/local/libexec/dovecot/imap mail_executable(imap): /usr/local/libexec/dovecot/imap mail_executable(pop3): /usr/local/libexec/dovecot/pop3 mail_executable(managesieve): /usr/local/libexec/dovecot/managesieve mail_plugins(default): autocreate acl expire mail_plugins(imap): autocreate acl expire mail_plugins(pop3): expire mail_plugins(managesieve): mail_plugin_dir(default): /usr/local/lib/dovecot/imap mail_plugin_dir(imap): /usr/local/lib/dovecot/imap mail_plugin_dir(pop3): /usr/local/lib/dovecot/pop3 mail_plugin_dir(managesieve): /usr/local/lib/dovecot/managesieve namespace: type: public separator: / prefix: Public/ location: maildir:/var/mail/public:CONTROL=~/Maildir/control/public:INDEX=~/Maildir/index/public list: yes namespace: type: private separator: / prefix: Backup/ location: maildir:~/Maildir-backup hidden: yes list: no namespace: type: private separator: / inbox: yes list: yes subscriptions: yes lda: log_path: info_log_path: auth_socket_path: /var/run/dovecot/auth-master postmaster_address: postmaster@mailtest0.rise-s.com mail_plugins: sieve acl expire auth default: mechanisms: plain login passdb: driver: pam passdb: driver: sql args: /etc/dovecot/dovecot-sql.conf userdb: driver: passwd userdb: driver: static args: uid=vmail gid=vmail home=/var/vmail/%Ld/%Ln allow_all_users=yes socket: type: listen client: path: /var/spool/postfix/private/auth mode: 432 user: postfix group: postfix master: path: /var/run/dovecot/auth-master mode: 384 user: vmail plugin: expire: Trash 7 INBOX/Spam 5 INBOX/Spam/Spam-To-Discard 3 expire_dict: proxy::expire sieve: ~/.dovecot.sieve sieve_dir: ~/sieve sieve_global_path: /etc/dovecot/sieve/default.sieve sieve_global_dir: /etc/dovecot/sieve/global/ sieve_before: /etc/dovecot/sieve/before/ autocreate: Trash autocreate2: Drafts autocreate3: Sent autocreate4: INBOX/Spam autocreate5: INBOX/Spam/Spam-To-Discard autosubscribe: Trash autosubscribe2: Drafts autosubscribe3: Sent autosubscribe4: INBOX/Spam autosubscribe5: INBOX/Spam/Spam-To-Discard acl: vfile:/etc/dovecot/acl dict: expire: mysql:/etc/dovecot/dovecot-dict-expire.conf
/etc/dovecot/dovecot-dict-expire.conf:
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=xxx
map { pattern = shared/expire/$user/$mailbox table = expires value_field = expire_stamp
fields { username = $user mailbox = $mailbox } }
The expires table:
CREATE TABLE expires ( username varchar(100) not null, mailbox varchar(255) not null, expire_stamp integer not null, primary key (username, mailbox) );
[1] http://wiki.dovecot.org/Plugins/Expire
Andreas Ntaflos Vienna, Austria
GPG Fingerprint: 6234 2E8E 5C81 C6CB E5EC 7E65 397C E2A8 090C A9B4