[Dovecot] Expire plugin not executing for sieve plugin?

Dan Swartzendruber dswartz at druber.com
Thu Oct 20 18:01:29 EEST 2011


Running dovecot 1.2.12 on ubuntu 10.10.  Here is the problem: I have 
mysql backend for expire.  I am using the dovecot-postfix package which 
creates /etc/dovecot/conf.d/01-mail-stack-delivery.conf which looks like 
this:

# Some general options
protocols = imap imaps managesieve
disable_plaintext_auth = no
ssl = yes
ssl_cert_file = /etc/ssl/certs/ssl-mail.pem
ssl_key_file = /etc/ssl/private/ssl-mail.key
ssl_cipher_list = 
ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM
mail_location = maildir:~/Maildir
auth_username_chars = 
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

# IMAP configuration
protocol imap {
         mail_max_userip_connections = 10
         imap_client_workarounds = outlook-idle delay-newmail
         mail_plugins = expire
}

# LDA configuration
protocol lda {
         postmaster_address = postmaster
         mail_plugins = sieve expire
         quota_full_tempfail = yes
         deliver_log_format = msgid=%m: %$
         rejection_reason = Your message to <%t> was automatically 
rejected:%n%r
}

# Plugins configuration
plugin {
         sieve=~/.dovecot.sieve
         sieve_dir=~/sieve
         # If the user has no personal active script (i.e. if the file
         # indicated in sieve= does not exist), use this one:
         sieve_global_path = /var/lib/dovecot/sieve/default.sieve
}

The sieve is:

require "fileinto";
require "imap4flags";
if header :contains "X-Spam-Flag" "YES" {
   setflag "\\Seen";
   fileinto "SPAM";
   stop;
}

Originally, this did not have the setflag or stop - I added them hoping 
to fix the problem, but no luck.  The problem is this: when spam 
assassin has flagged a message as spam, the sieve runs and the message 
is in fact filed into the SPAM folder, but no expire entry is added to 
the database.  If I move such a message from the SPAM folder to the 
Inbox and then back to SPAM, voila, I *do* get the entry created.  Here 
is the mysql table before and after I did the move/move:

mysql> select * from expires;
+----------+---------------+--------------+
| username | mailbox       | expire_stamp |
+----------+---------------+--------------+
| dswartz  | Deleted Items |   1319720163 |
| dswartz  | Sent          |   1319120165 |
| denise   | Trash         |   1319139920 |
| samantha | Trash         |   1319136146 |
| denise   | Sent          |   1319655872 |
| danielle | Sent          |   1319192230 |
| samantha | Sent          |   1319268855 |
| dswartz  | Trash         |   1319725884 |
| samantha | SPAM          |   1321504531 |
+----------+---------------+--------------+
9 rows in set (0.00 sec)

mysql> select * from expires;
+----------+---------------+--------------+
| username | mailbox       | expire_stamp |
+----------+---------------+--------------+
| dswartz  | Deleted Items |   1319720163 |
| dswartz  | Sent          |   1319120165 |
| denise   | Trash         |   1319139920 |
| samantha | Trash         |   1319136146 |
| denise   | Sent          |   1319655872 |
| danielle | Sent          |   1319192230 |
| samantha | Sent          |   1319268855 |
| dswartz  | Trash         |   1319725884 |
| samantha | SPAM          |   1321504531 |
| dswartz  | SPAM          |   1321714666 |
+----------+---------------+--------------+
10 rows in set (0.00 sec)

It's almost like the fileinto stuff is not running the plugin code at 
all, or am I totally on drugs?  If I can't get a fix for this, I at 
least now can think of a hack to "fix" it.  e.g. every night, run a 
script that adds a "now" timestamp for everyone's SPAM folder to trick 
the periodic expire tool code into checking that folder, but obviously 
I'd rather have a real fix :)  If this is just 'how it works', is it 
better in 2.0?







More information about the dovecot mailing list