We use a number of filters with the following form to seperate mail from various sources into subfolders on our IMAP server using exim:
# Move freebsd-stable mail to its own folder
if $h_to: contains stable@??? or $h_cc: contains stable@??? then
save "/home/grayskies/mailusers/david/.Mailing Lists.FreeBSD.Stable/"
finish
endif
Up through exim 4.14 on my FreeBSD 4.8 system this worked without a flaw. This morning we upgraded to 4.20 and all of a sudden all mail started appearing in the main Inbox. At first we thought something had gone wrong with the filter, but a look at the debug output shows that the filter runs perfectly and runs the correct save command, but the mail ends up being saved in the top level folder regardless. I've included our maildir transport section and the debug output below. If anyone has any idea what might be happening we would love to have our folder sorting back. ;)
-David Powers
# This transport handles deliveries to a maildir - it shadow transports to spamcheck_addmail
# if the right options are set
maildir_delivery:
driver = appendfile
maildir_format = true
create_directory = true
create_file = belowhome
directory = ${lookup pgsql{select deliverto from addresses, domains where domains.domain='${quote_pgsql:$domain}' and addresses.address='${quote_pgsql:$local_part}' and addresses.domainid=domains.id and ad... (continues)
quota = ${lookup pgsql{select addresses.diskquota from addresses, domains where domains.domain='${quote_pgsql:$domain}' and addresses.address='${quote_pgsql:$local_part}' and addresses.domainid=domains.id... (continues)
quota_warn_threshold = 90%
shadow_condition = ${lookup pgsql{select addresses.id from addresses, domains where domains.domain='${quote_pgsql:$domain}' and addresses.address='${quote_pgsql:$local_part}' and addresses.domainid=domains... (continues)
shadow_transport = spamcheck_addmail
46493 Condition is true: $h_subject: contains bobo
46493 Filter: save message to: /home/grayskies/mailusers/david/.Inside Systems/
46493 Filter: finish
46493 Filtering set up at least one significant delivery or other action.
46493 No other deliveries will occur.
46493 Filter: end of processing
46491 rda_interpret: subprocess yield=0 error=NULL
46491 set transport maildir_delivery
46491 address_filter_router router generated /home/grayskies/mailusers/david/.Inside Systems/
46491 pipe, file, or autoreply
46491 errors_to=NULL transport=maildir_delivery
46491 uid=1000 gid=1000 home=NULL
46491 routed by address_filter_router router
46491 envelope to: david@???
46491 transport: <none>
46491 locking /var/spool/exim/db/retry.lockfile
46491 locked /var/spool/exim/db/retry.lockfile
46491 opened hints database /var/spool/exim/db/retry: flags=0
46491 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
46491 Considering: /home/grayskies/mailusers/david/.Inside Systems/
46491 unique = /home/grayskies/mailusers/david/.Inside Systems/:david@???
46491 queued for maildir_delivery transport
46491 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
46491 After routing:
46491 Local deliveries:
46491 /home/grayskies/mailusers/david/.Inside Systems/
46491 Remote deliveries:
46491 Failed addresses:
46491 Deferred addresses:
46491 search_tidyup called
46491 close PGSQL connection: localhost/mail/mailuser
46491 >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
46491 --------> /home/grayskies/mailusers/david/.Inside Systems/ <--------
46491 locking /var/spool/exim/db/retry.lockfile
46491 locked /var/spool/exim/db/retry.lockfile
46491 opened hints database /var/spool/exim/db/retry: flags=0
46491 dbfn_read: key=T:/home/grayskies/mailusers/david/.Inside Systems/:david@???
46491 no retry record exists
46491 search_tidyup called
46494 search_open: pgsql "NULL"
46494 search_find: file="NULL"
46494 key="select addresses.diskquota from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='maildir' limit $
46494 LRU list:
46494 internal_search_find: file="NULL"
46494 type=pgsql key="select addresses.diskquota from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='mail$
46494 database lookup required for select addresses.diskquota from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delive$
46494 PGSQL query: select addresses.diskquota from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='maildir' $
46494 PGSQL new connection: host=localhost port= database=mail user=mailuser
46494 lookup yielded: 0
46494 changed uid/gid: local delivery to /home/grayskies/mailusers/david/.Inside Systems/ </home/grayskies/mailusers/david/.Inside Systems/> transport=maildir_delivery
46494 uid=1000 gid=1000 pid=46494
46494 auxiliary group list: 1000
46494 home=NULL current=/
46494 set_process_info: 46494 delivering 19Ho02-000C5p-E7 to /home/grayskies/mailusers/david/.Inside Systems/ using maildir_delivery
46494 appendfile transport entered
46494 search_open: pgsql "NULL"
46494 cached open
46494 search_find: file="NULL"
46494 key="select deliverto from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='maildir' limit 1" partial$
46494 LRU list:
46494 internal_search_find: file="NULL"
46494 type=pgsql key="select deliverto from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='maildir' limit$
46494 database lookup required for select deliverto from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='mai$
46494 PGSQL query: select deliverto from addresses, domains where domains.domain='grayskies.net' and addresses.address='david' and addresses.domainid=domains.id and addresses.delivertype='maildir' limit 1
46494 PGSQL using cached connection for localhost/mail/mailuser
46494 lookup yielded: /home/grayskies/mailusers/david/
46494 appendfile: mode=600 notify_comsat=0 quota=0
46494 directory=/home/grayskies/mailusers/david/ format=maildir
46494 message_prefix=null
46494 message_suffix=null
46494 delivering in maildir format in /home/grayskies/mailusers/david/
46494 writing to file tmp/1053363635.H10235P46494.zarathustra.voxel.net
46494 writing data block fd=6 size=1050 timeout=0
46494 renaming temporary file
46494 renamed tmp/1053363635.H10235P46494.zarathustra.voxel.net as new/1053363635.H10235P46494.zarathustra.voxel.net
46494 appendfile yields 0 with errno=0 more_errno=0
46494 search_tidyup called
46491 journalling /home/grayskies/mailusers/david/.Inside Systems/:david@???
46494 close PGSQL connection: localhost/mail/mailuser