Dovecot: Apagar Email Antigo

10 de Abril, 2016

Debian, Email, Informática, Linux, Servidores

Durante a manutenção de um servidor de email Linux (Dovecot + Postfix) perguntaram-me se poderia apagar todo o email com mais de dois anos. Neste guia explico como o fazer recorrendo à ferramenta de gestão do Dovecot.

A sintaxe da ferramenta doveadm para esta tarefa é:

doveadm expunge -u [email-do-utilizador] mailbox [pasta-imap] SENTBEFORE [data]

Pastas e Separador IMAP

Antes de apagar email precisamos de saber três coisas: se o servidor usa algum prefixo do IMAP (uma pasta pai onde estão todas as outras) e qual é, que pastas existem e qual o separador hierárquico. Mais informação aqui. Descobrimos listando as pastas de um utilizador (ex. test-user@server.dev):

user@xpto:~# doveadm mailbox list -u test-user@server.dev
INBOX
INBOX.Faturas
INBOX.Drafts
INBOX.Archive
INBOX.Trash
INBOX.Sent

Cada linha da resposta é uma pasta com o caminho completo, temos várias pastas Faturas, Drafts, Archive, Trash e Sent. O INBOX é, neste caso, o prefixo. O separador hierárquico é um ponto ..

Para apagar todo o email anterior a 1 de Janeiro de 2014 do utilizador test-user@server.dev nas pastas INBOX, Send e Trash, executamos:

doveadm expunge -u test-user@server.dev mailbox INBOX SENTBEFORE 1-Jan-2014
doveadm expunge -u test-user@server.dev mailbox INBOX.Sent SENTBEFORE 1-Jan-2014
doveadm expunge -u test-user@server.dev mailbox INBOX.Trash SENTBEFORE 1-Jan-2014

Por fim devemos sempre limpar a storage do utilizador com:

doveadm purge -u test-user@server.dev

E para todos os utilizadores?

Para apagar todo o email antigo de todos os utilizadores substituímos  -u test-user@server.dev por -A:

doveadm expunge -A mailbox INBOX SENTBEFORE 1-Jan-2014
doveadm expunge -A mailbox INBOX.Sent SENTBEFORE 1-Jan-2014
doveadm expunge -A mailbox INBOX.Trash SENTBEFORE 1-Jan-2014
doveadm purge -A

E para todas as pastas?

doveadm expunge -u test-user@server.dev mailbox '*' SENTBEFORE 1-Jan-2014
doveadm purge -u test-user@server.dev

Claro que isto é desaconselhado porque muitos utilizadores têm pastas especiais para emails antigos importantes.


E todos os utilizadores e todas as pastas?

doveadm expunge -A mailbox '*' SENTBEFORE 1-Jan-2014
doveadm purge -A

Servidores WHM/cPanel

Em servidores WHM/cPanel os comandos apagam os emails mas não atualiza as estatísticas da dimensão da pasta maildir. Corrigimos com:

/scripts/generate_maildirsize --allaccounts --confirm --verbose

Que irá recalcular o tamanho das pastas de email para todos os utilizadores.