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
> crontab -e # dovecot delete spam & trash #minute hour mday month wday command 40 3 12 * * /usr/local/dovecot/etc/dovecot_expunge.sh
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:
Ho 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