With dovecots zlib plugin, it's possible to have compressed mails in the users maildir.
I've written a script to compress all mails on my mailserver:
#!/bin/sh
compress_maildir () {
cd $1
DIRS=`find -maxdepth 2 -type d -name cur`
for dir in $DIRS; do
echo $dir
cd $dir
FILES=`find -type f -name „*,S=*“ -not -regex „.*:2,.*Z.*“`
#compress all files
for FILE in $FILES; do
NEWFILE=../tmp/${FILE}
#echo bzip $FILE $NEWFILE
if ! bzip2 -9 $FILE -c > $NEWFILE; then
echo compressing failed
exit -1;
fi
#reset mtime
if ! touch -r $FILE $NEWFILE; then
echo setting time failed
exit -1
fi
done
echo Locking $dir/..
if PID=`/usr/libexec/dovecot/maildirlock .. 120`; then
#locking successfull, moving compressed files
for FILE in $FILES; do
NEWFILE=../tmp/${FILE}
if [ -s $FILE ] && [ -s $NEWFILE ]; then
echo mv $FILE $NEWFILE
mv $FILE /tmp
mv $NEWFILE ${FILE}Z
else
echo mv failed
exit -1
fi
done
kill $PID
else
echo lock failed
exit -1
fi
cd - >/dev/null
done
}
compress_maildir /home/user/.maildir/
chown -R username:users /home/user/.maildir/
If using this script, please do it after an backup/copy of the maildir, the script is far away from being perfect
If the Script is rerun, it checks the files for a Z at the end of the filename, so the file isn't recompressed.
With compressed mails i saved ~25% of space.