Naturalmente vogliamo cancellare i vecchi messaggi di spam e pulire ogni tanto anche il cestino di tutti gli utenti, al fine di gestire al meglio lo spazio disco.
Se si vogliono cancellare i messaggi delle cartelle Junk e Trash che sono più vecchi di 60 giorni si può settare il namespace in questo modo nel file 15-mailbox.conf:
namespace {
mailbox Junk {
special_use = \Junk
auto = subscribe
autoexpunge = 60d
}
mailbox Trash {
special_use = \Trash
auto = subscribe
autoexpunge = 60d
}
}
Quando dico "più vecchi di 60 gioirni" intendo i messaggi che sono stati spostati nella cartella Junk o Trash almento 60 giorni fa, non i messaggi salvati nella Inbox 60 giorni fa e spostati in Junk o Trash oggi.
Nel caso si abbia la necessità di agire in modo diverso sulle singole caselle di posta, dare un occhiata a questo script di Tony Fung.
Lascio intatto quanto segue per coloro che non sono soddisfatti del metodo illustrato sopra e preferiscono utilizzare uno script bash e un cronjob. Coloro che invece hanno deciso di settare autoexpunge possono passare alla pagina successiva.
Questo comando
doveadm expunge -A mailbox Junk savedbefore 60d
farà una connessione al userdb, sql/MySQL nel nostro caso, e un ciclo su tutte (opzione -A) le mailbox degli utenti più vecchie di 60 giorni.
Sarà sufficiente creare uno script bash del genere
> nano /usr/local/dovecot/etc/dovecot_expunge.sh #!/bin/bash # DOVEADM="/usr/local/dovecot/bin/doveadm"; $DOVEADM expunge -A mailbox Trash savedbefore 90d $DOVEADM expunge -A mailbox Junk savedbefore 60d
assegnargli i privilegi di esecuzione
chmod +x /usr/local/dovecot/etc/dovecot_expunge.sh
e lanciarlo via cronjob una volta al mese o quando si vuole
cat >> /etc/cron.d/qmail << EOF # dovecot delete spam & trash 40 3 12 * * /usr/local/dovecot/etc/dovecot_expunge.sh EOF
Cosa fare nel caso si utilizzi il vecchio driver vpopmail per l'autenticazione
Sfortunatamente, le API di vpopmail non sembrano supportare delle funzionalità del genere. Fortuna vuole che Costel Balta ha proposto una eccellente soluzione in questo commento. Puoi scaricare il suo script qui.
#!/bin/bash
#
# Author: Costel Balta
# Slightly modified by Roberto Puzzanghera
#
# Config and executables path
VPOPMAIL_MYSQL_CONFIG="/home/vpopmail/etc/vpopmail.mysql"
# mysql bin
MYSQL=$(which mysql)
# Extract mysql params
HOST=$(sed -n "/#/! s/^\(.*\)|.*|.*|.*|.*/\1/p" $VPOPMAIL_MYSQL_CONFIG)
PORT=$(sed -n "/#/! s/^.*|\(.*\)|.*|.*|.*/\1/p" $VPOPMAIL_MYSQL_CONFIG)
USER=$(sed -n "/#/! s/^.*|.*|\(.*\)|.*|.*/\1/p" $VPOPMAIL_MYSQL_CONFIG)
PWD=$(sed -n "/#/! s/^.*|.*|.*|\(.*\)|.*/\1/p" $VPOPMAIL_MYSQL_CONFIG)
DB=$(sed -n "/#/! s/^.*|.*|.*|.*|\(.*\)/\1/p" $VPOPMAIL_MYSQL_CONFIG)
# dovecot details
DOVEADM="/usr/local/dovecot/bin/doveadm";
# 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 (adjust the path to mysql)
results=`$MYSQL -h $HOST -u $USER -p$PWD -N < /tmp/query.sql`;
# Loop through each row
for row in $results
do
echo "Purging $row Trash and Junk mailbox..."
# Purge expired Trash
$DOVEADM -v expunge mailbox Trash -u "$row" savedbefore 90d
# Purge expired Junk
$DOVEADM -v expunge mailbox Junk -u "$row" savedbefore 60d
done
Questo script esegue una query mysql selezionando tutti gli utenti dal database vpopmail, ne salva i risultati in una variabile e itera sulle mailbox di tutti gli utenti cancellando le vecchie email dal cestino e dalla cartella Junk. Poichè questo script contiene i parametri di accesso a mysql deve essere lanciato come root e concedere solo a root i privilegi.
Se si vuole evitare di ricevere le notifiche di quanto fatto da doveadm nella casella postmaster, cancellare la riga che inizia con echo, soprattutto se si hanno milioni di utenti.
cd /usr/local/dovecot/etc wget https://notes.sagredo.eu/files/qmail/dovecot_expunge/dovecot_expunge-cb mv dovecot_expire dovecot_expire.sh chown root:root dovecot_expire.sh chmod 0700 /usr/local/dovecot/etc/dovecot_expire.sh
Lanciare lo script una volta al mese o ogni quanto si vuole come un cronjob
> crontab -e # dovecot delete spam & trash #minute hour mday month wday command 40 3 12 * * /usr/local/dovecot/etc/dovecot_expire.sh


Commenti
Re-iter di vpopmail
malvivent7 28 maggio 2015 16:23 CET
Ciao Roberto, innanzitutto complimenti per l'ottima guida dettagliata e esplicativa ti scrivo per proporti un'alternativa nel reitero selettivo di vpopmail su tutti gli utenti di un particolare dominio:
#!/bin/sh # PATH=~vpopmail/bin:/usr/bin:/bin:/usr/local/bin DOMAIN=${1:?No domain specified} for USER in `vuserinfo -n -D $DOMAIN` do #doveadm -v quota recalc -u $USER@$DOMAIN #doveadm index -u $USER@$DOMAIN INBOX doveadm fts optimize -u $USER@$DOMAIN #doveadm fts rescan -u $USER@$DOMAIN #doveadm -Dv search -u $USER@$DOMAIN mailbox INBOX savedbefore 365d doneHo inserito alcune istruzioni specifiche di dovecot.
Rispondi | Permalink
grazie per il contributo!
roberto puzzanghera malvivent7 5 giugno 2015 22:36 CET
grazie per il contributo!
Rispondi | Permalink