Just want to throw out there that different email clients will use different names for their deleted items.
I'm using a cron job to clean up the "Trash", "Deleted Messages" and "Deleted Items" folders, including any folder that starts with those strings. Survey your system and see what variations you find. I decided not to share my Perl script, since it uses the file date (Perl's "-M" which returns days between script start time and file modification time), not the date it was moved into the Trash folder. Hmm… I just did some quick tests and it looks like I should use -C (days since file change time) to trigger of the timestamp of when the file was moved to the trash. So, here's my script. Interested in feedback. I have it in my /etc/cron.daily so it runs every night. The file globs take care of directory hashing for both domains and users. I figured this was more efficient than recursing through the domain list, getting a domain's home directory, recursing through the user list and then processing the files. -Tom #!/usr/bin/perl $|++; $days = 45; @globs = ( '*/*/Maildir/.Trash*/{cur,new}', '?/*/*/Maildir/.Trash*/{cur,new}', '*/?/*/Maildir/.Trash*/{cur,new}', '?/*/?/*/Maildir/.Trash*/{cur,new}', '*/*/Maildir/.Deleted\ {Messages,Items}*/{cur,new}', '?/*/*/Maildir/.Deleted\ {Messages,Items}*/{cur,new}', '*/?/*/Maildir/.Deleted\ {Messages,Items}*/{cur,new}', '?/*/?/*/Maildir/.Deleted\ {Messages,Items}*/{cur,new}' ); $c = 0; print "Deleting mail in .Trash and .Deleted Messages folders, over $days days old.\n"; foreach $path (@globs) { while ($name = glob ('/home/vpopmail/domains/' . $path)) { opendir (D, $name) or print "failed to open $name\n"; while ($f = readdir(D)) { # skip non-files next if (! -f "$name/$f"); $t = -C "$name/$f"; if ($t > $days) { unlink "$name/$f"; $c++; } } } } print "Deleted $c messages over $days days old\n"; On Nov 12, 2012, at 8:21 AM, Matt Rauch wrote: >> Hello, >> >> Sorry if this isn't the place to ask, but I've looked >> all over and haven't managed to find a clear solution. I'm >> looking for a way to have items that have been in the user's >> .Trash folder for a certain period of time (lets say 30 days >> or older) removed automatically. I thought there must be >> built-in functionality for this, or a script someone has come >> up with to manage this sort of thing. I've see a squirrelmail >> plugin that does it based on number of logins or every x >> number of days, but it empties the whole trash and doesn't >> check each message's age individually. >> >> Any help would be greatly appreciated. >> >> Thanks, >> >> Matt Rauch > > Just to update everyone. I did find a way to accomplish this even though we > are using the vpopmail auth. I found this script online and modified it to > fit my login info: > ---------------------------------------------------------- > #!/usr/local/bin/bash > # MySQL details > > HOST="localhost"; > USER="vpopmail"; > PWD="vpopmail passwd"; > > # Output sql to a file that we want to run > echo "USE vpopmail; select concat(pw_name,'@',pw_domain) as username from > vpopmail;" > /tmp/query.sql; > > # Run the query and get the results > results=`mysql -h $HOST -u $USER -p$PWD -N < /tmp/query.sql`; > > # Loop through each row > for row in $results > do > /usr/local/bin/doveadm expunge -u $row mailbox Trash savedbefore 52w > done > > --------------------------------------------------------- > > Maybe this can help someone else who is in the same boat. > > Matt Rauch > > > > !DSPAM:50a11bf333991914119077!