I resolved this issue by deleting some messages from my Junk mailbox which had
Date headers long in the past and future, despite being very old. It appears to
me that expire-tool quit when a message had a Date header forged to be
non-expired, despite the message being old enough to have been expired. A bug in
expire-tool?
- Alex Reinhart
On Apr 15, 2011, at 3:15 PM, Alex Reinhart wrote:
> Hello,
>
> I have dovecot set up with expire-tool to nuke Junk messages greater than
30 days old. On a server with many user accounts, it seems to work on most of
them.
>
> However, on my user account, expire-tool skips my Junk folder entirely,
despite it containing messages from January of this year. Here is the
expire-tool --test output:
>
> Info: alex at scienceforums.net/Junk: timestamp 1284027481 (Thu Sep 9
05:18:01 2010) -> 1304023056 (Thu Apr 28 15:37:36 2011)
>
> Then it skips to the next mailbox. (Note that I intentionally set the
timestamp back to force it to consider my mailbox.) I don't understand why
it doesn't want to expunge my 2700 junk messages when it will expunge
several thousand in other accounts happily. The expire plugin has been enabled
for probably over a year, so all of the messages should be tracked.
>
> My only hypothesis is that it has something to do with variables in the
mail_location; however, mail_location should be overridden by a user_query,
though that contains variables too. Would this account for the issue? It seems
unlikely, since other users on the server work just fine.
>
> dovecot -n output for the interested:
>
> # 1.2.9: /etc/dovecot/dovecot.conf
> # OS: Linux 2.6.32-24-server x86_64 Ubuntu 10.04.2 LTS ext3
> base_dir: /var/run/dovecot/
> log_timestamp: %Y-%m-%d %H:%M:%S
> protocols: managesieve imaps pop3s
> listen(default): *:143
> listen(imap): *:143
> listen(pop3): *:110
> listen(managesieve): *
> ssl_listen(default): *:993
> ssl_listen(imap): *:993
> ssl_listen(pop3): *:995
> ssl_listen(managesieve):
> login_dir: /var/run/dovecot//login
> login_executable(default): /usr/lib/dovecot/imap-login
> login_executable(imap): /usr/lib/dovecot/imap-login
> login_executable(pop3): /usr/lib/dovecot/pop3-login
> login_executable(managesieve): /usr/lib/dovecot/managesieve-login
> first_valid_uid: 150
> last_valid_uid: 150
> mail_privileged_group: mail
> mail_location: maildir:/var/vmail/%d/%u
> mbox_write_locks: fcntl dotlock
> mail_executable(default): /usr/lib/dovecot/imap
> mail_executable(imap): /usr/lib/dovecot/imap
> mail_executable(pop3): /usr/lib/dovecot/pop3
> mail_executable(managesieve): /usr/lib/dovecot/managesieve
> mail_plugins(default): quota imap_quota expire
> mail_plugins(imap): quota imap_quota expire
> mail_plugins(pop3): quota expire
> mail_plugins(managesieve):
> mail_plugin_dir(default): /usr/lib/dovecot/modules/imap
> mail_plugin_dir(imap): /usr/lib/dovecot/modules/imap
> mail_plugin_dir(pop3): /usr/lib/dovecot/modules/pop3
> mail_plugin_dir(managesieve): /usr/lib/dovecot/modules/managesieve
> lda:
> mail_plugins: quota sieve expire
> postmaster_address: postmaster at xyloid.org
> sendmail_path: /usr/lib/sendmail
> auth_socket_path: /var/run/dovecot/auth-master
> sieve_global_path: /etc/dovecot/sieve.global
> auth default:
> user: nobody
> passdb:
> driver: sql
> args: /etc/dovecot/dovecot-sql.conf
> userdb:
> driver: sql
> args: /etc/dovecot/dovecot-sql.conf
> socket:
> type: listen
> client:
> path: /var/spool/postfix/private/auth
> mode: 432
> user: postfix
> group: postfix
> master:
> path: /var/run/dovecot/auth-master
> mode: 432
> user: vmail
> group: mail
> plugin:
> quota: dict:user::proxy::quotadict
> quota_rule: *:storage=1G
> quota_rule2: Trash:storage=10%%
> quota_rule3: Junk:ignore
> sieve: /var/vmail/%d/%n/dovecot.sieve
> expire: Trash 7 Trash/* 7 Junk 30
> expire_dict: proxy::expire
> dict:
> quotadict: mysql:/etc/dovecot/dovecot-dict-quota.conf
> expire: mysql:/etc/dovecot/dovecot-dict-expire.conf
>
> And dovecot-dict-expire.conf:
>
> connect = host=localhost dbname=mail user=mail password=[password]
>
> map {
> pattern = shared/expire/$user/$mailbox
> table = expires
> value_field = expire_stamp
>
> fields {
> username = $user
> mailbox = $mailbox
> }
> }
>
> Thanks.
>
> - Alex Reinhart
>
>
>