Pular para o conteúdo

Passo a passo: cotas de caixa postal e Auto-Expunge no Dovecot

Por Equipe Técnica AviraHost · 13 min de leitura · Atualizado em · dovecot, email-corporativo, imap, auto-expunge, cotas-de-email, linux, postfix, AviraHost · 0

Cotas de caixa postal e Auto-Expunge no Dovecot são recursos que limitam o espaço usado por cada conta de e-mail e apagam automaticamente mensagens antigas da Lixeira, evitando que a caixa fique cheia sem intervenção manual. Para configurar cotas e Auto-Expunge no Dovecot em um servidor de e-mail corporativo, siga estes passos:

  1. Habilite o plugin quota no arquivo de configuração do Dovecot
  2. Defina o backend de cota (maildir) e os limites de storage e mensagens
  3. Configure avisos de cota via quota-warning (gatilhos e serviço)
  4. Configure o namespace de pastas especiais em 15-mailboxes.conf
  5. Ative o Auto-Expunge na pasta Trash com o tempo desejado
  6. Reinicie o Dovecot e teste com doveadm quota get

Pré-requisitos

  • Servidor com Ubuntu 24.04 LTS com Dovecot 2.3 já instalado e funcional
  • Acesso root ou sudo via SSH
  • Postfix configurado para entrega via LMTP ou LDA do Dovecot (necessário para a cota funcionar na entrega)
  • Contas de e-mail já criadas (virtuais ou do sistema, em formato Maildir)
  • Backup recente do servidor antes de alterar configurações de produção

Habilitando o plugin de cota no Dovecot

O controle de espaço em disco no Dovecot começa pela ativação do plugin quota, responsável por medir e aplicar os limites definidos para cada conta. Esse plugin funciona junto com o backend maildir, que lê o arquivo maildirsize dentro de cada caixa postal para saber quanto espaço já foi usado.

Edite o arquivo /etc/dovecot/conf.d/10-mail.conf e adicione o plugin na lista de plugins ativos:

mail_plugins = $mail_plugins quota

Em seguida, edite /etc/dovecot/conf.d/90-quota.conf para definir o backend, os limites padrão e o serviço de aviso:

plugin {
  quota = maildir:User quota
  quota_rule = *:storage=1G
  quota_rule2 = Trash:storage=+100M
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
}

service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = vmail
  unix_listener quota-warning {
    user = vmail
    mode = 0600
  }
}

O script /usr/local/bin/quota-warning.sh recebe o percentual e o usuário como argumentos ($1 e $2) e pode enviar um aviso via dovecot-lda ou outro mecanismo de alerta. Crie-o com permissão de execução (chmod +x) e teste manualmente antes de colocar em produção.

A regra quota_rule define o limite geral da conta (1 GB neste exemplo). A regra quota_rule2 concede até 100 MB de tolerância adicional para operações na pasta Trash quando o limite normal já foi atingido — isso permite que o usuário ainda mova mensagens para a Lixeira e libere espaço. O conteúdo da Trash, porém, continua sendo contabilizado no uso total da conta; a entrega de novas mensagens na INBOX só volta a funcionar quando o uso total cair abaixo do limite configurado.

Se a entrega for feita via LMTP, adicione o plugin também ao protocolo LMTP em /etc/dovecot/conf.d/20-lmtp.conf:

protocol lmtp {
  mail_plugins = $mail_plugins quota
}

Definindo cotas por conta ou por domínio

Cotas fixas para todos os usuários nem sempre refletem a realidade de um e-mail corporativo, onde diretoria e setores operacionais costumam ter necessidades diferentes. O Dovecot permite sobrepor a cota padrão por conta usando atributos extras no userdb.

Se as contas são gerenciadas via arquivo passwd-like (userdb passwd-file), adicione o campo de cota diretamente na linha do usuário em /etc/dovecot/users. Use hashes gerados por doveadm pw em vez de senhas em texto puro, e garanta que UID, GID e home estejam preenchidos (ou fornecidos via default_fields no bloco userdb). Restrinja as permissões do arquivo com chmod 640:

[email protected]:{SHA512-CRYPT}$6$hash...::::::userdb_quota_rule=*:storage=5G
[email protected]:{SHA512-CRYPT}$6$hash...::::::userdb_quota_rule=*:storage=10G

Esse valor sobrepõe a quota_rule global apenas para a conta especificada. Para ambientes com muitas contas, o userdb SQL é mais prático: configure uma consulta que retorne o campo quota_rule (ou userdb_quota_rule) diretamente do banco de dados por usuário. O backend de quota dict é usado para armazenar e consultar o uso contabilizado; os limites por usuário são retornados pelo userdb, e essas duas funções devem ser configuradas separadamente.

Depois de aplicar qualquer alteração, reinicie o serviço:

systemctl restart dovecot

Confirme o limite aplicado com:

doveadm quota get -u [email protected]
Quota name  Type     Value    Limit    %
User quota  STORAGE  102400   5242880  1
User quota  MESSAGE  340      -        0

A coluna Limit aparece em KB, então 5242880 corresponde a 5 GB, confirmando que a regra personalizada foi aplicada corretamente. Quando não há limite de mensagens configurado, a coluna exibe -.

Configurando Auto-Expunge na pasta Trash

O Auto-Expunge é uma diretiva nativa de configuração de caixas postais do Dovecot que remove mensagens definitivamente de uma pasta com base na idade, independente de a cota estar ou não próxima do limite. Ele é configurado no namespace de pastas especiais, dentro de /etc/dovecot/conf.d/15-mailboxes.conf.

Localize ou crie a definição da pasta Trash dentro do bloco de namespace e adicione a diretiva autoexpunge:

namespace inbox {
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
    autoexpunge = 30d
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
    autoexpunge = 14d
    autoexpunge_max_mails = 1000
  }
}

Com autoexpunge = 30d, qualquer mensagem na Trash com mais de 30 dias é expurgada automaticamente. A idade é contada a partir do momento em que a mensagem foi salva ou movida para a pasta (save timestamp), não da data de recebimento original — uma mensagem recebida há um ano e movida para a Lixeira hoje só será expurgada 30 dias depois dessa movimentação. Após migrações, o save timestamp pode diferir da data original de recebimento.

A expurgação é acionada ao encerramento de qualquer sessão IMAP, POP3 ou LMTP do usuário — não é necessário que a pasta Trash seja aberta especificamente nessa sessão. Contas totalmente inativas (sem nenhum login e sem entregas) não passam pelo processamento automático. Para cobrir essas contas e garantir a política de retenção independentemente da atividade, configure um job periódico via cron:

doveadm expunge -A mailbox Trash savedbefore 30d

A opção autoexpunge_max_mails complementa a regra por idade, limitando a quantidade máxima de mensagens guardadas na pasta, útil para o Junk/Spam que costuma acumular volume alto.

Atenção: o Auto-Expunge apaga as mensagens de forma permanente, sem mover para outra pasta intermediária. Não há como recuperá-las pelo próprio Dovecot depois da expurgação — garanta que existe rotina de backup antes de ativar essa diretiva em produção.

Reinicie o Dovecot para aplicar:

systemctl restart dovecot

Testando cota e Auto-Expunge na prática

Depois de aplicar as configurações, é importante validar que tanto a cota quanto o Auto-Expunge estão funcionando conforme esperado antes de liberar o ambiente para os usuários finais. Essa etapa evita surpresas, como contas bloqueadas por estouro de cota logo na primeira semana de uso.

Para recalcular a cota de uma conta manualmente (útil após migrações ou importações em massa):

doveadm quota recalc -u [email protected]

Para simular o envio de uma mensagem grande e verificar a recusa por estouro de cota, acompanhe o log durante o teste:

tail -f /var/log/mail.log

Ou, se o rsyslog não estiver instalado, use o journal:

journalctl -u dovecot -f
dovecot: lmtp([email protected]): Quota exceeded (mailbox for user is full)

Essa linha confirma que o Dovecot recusou a entrega porque a cota foi atingida. Se a mensagem for entregue mesmo com a cota cheia, revise se o plugin quota foi carregado corretamente no protocolo LMTP.

Para testar o Auto-Expunge sem esperar o prazo configurado, você pode reduzir temporariamente o valor para fins de teste (por exemplo, autoexpunge = 1m), fazer login via IMAP e encerrar a sessão, depois verificar se as mensagens antigas sumem da Trash. Depois do teste, restaure o valor de produção.

Quem ainda está estruturando o servidor de e-mail do zero pode complementar este guia com o artigo Como configurar servidor de email no Ubuntu 24.04, que cobre a instalação base do Postfix e Dovecot antes de aplicar cotas e Auto-Expunge.

Problemas comuns e como resolver

Sintoma: a cota não é aplicada mesmo após configurar quota_rule

Causa: o plugin quota não foi carregado no protocolo usado para entrega (LMTP ou LDA), apenas no IMAP.
Solução: adicione mail_plugins = $mail_plugins quota também dentro do bloco protocol lmtp em 20-lmtp.conf e reinicie o Dovecot.

Sintoma: mensagens continuam na Trash após o prazo do autoexpunge

Causa: o Auto-Expunge é processado ao encerramento de sessões IMAP, POP3 ou LMTP; contas totalmente inativas — sem nenhum login e sem entregas — não passam pelo processamento automático.
Solução: configure um job periódico com doveadm expunge -A mailbox Trash savedbefore 30d via cron para forçar a verificação em contas inativas e garantir a política de retenção independentemente da atividade.

Sintoma: erro "maildirsize" corrompido ou valores de cota incorretos

Causa: o arquivo de controle maildirsize dentro da caixa postal ficou dessincronizado após migração manual de arquivos ou falha de disco.
Solução: rode doveadm quota recalc -u [email protected] para forçar o recálculo a partir do conteúdo real do Maildir.

Sintoma: Postfix aceita a mensagem mas o Dovecot nunca recusa por cota

Causa: a entrega está sendo feita por um LDA externo ou pelo procmail, sem passar pelo dovecot-lda ou pelo LMTP do Dovecot.
Solução: configure o Postfix para usar dovecot como transporte LMTP, conforme descrito em Guia: como configurar Postfix para e-mail externo Ubuntu 24.04.

Perguntas frequentes

O que é Auto-Expunge no Dovecot?

Auto-Expunge é uma diretiva nativa de configuração de caixas postais do Dovecot (configurada por mailbox no namespace) que apaga permanentemente mensagens da pasta Lixeira (ou outra pasta configurada) após um período determinado, sem exigir ação manual do usuário. A idade de cada mensagem é contada a partir do momento em que ela foi salva ou movida para a pasta configurada (save timestamp), não da data de recebimento original. É muito usado para liberar espaço automaticamente em contas com cota limitada.

Como funciona a cota de caixa postal no Dovecot?

A cota no Dovecot é controlada pelo plugin quota, que pode usar backends como maildir, dict ou fs para medir o espaço usado por cada conta. Quando o usuário atinge o limite definido (por exemplo, storage=1G), o Dovecot recusa novas mensagens e retorna um erro ao cliente de e-mail ou ao Postfix durante a entrega via LMTP. É possível definir avisos de cota (quota warning) antes do limite ser atingido.

O Auto-Expunge apaga mensagens mesmo sem estourar a cota?

Sim. O Auto-Expunge atua de forma independente da cota: ele remove mensagens da pasta configurada (geralmente Trash) com base apenas na idade, mesmo que a conta tenha espaço disponível. Isso evita o acúmulo de mensagens esquecidas na Lixeira, que normalmente consomem espaço sem necessidade.

É possível recuperar e-mails apagados pelo Auto-Expunge?

Não, por padrão. O Auto-Expunge remove as mensagens de forma definitiva do maildir, sem passar por outra pasta intermediária, então não há recuperação automática pelo Dovecot. A única forma de recuperação é através de backups externos feitos antes da expurgação, por isso é essencial manter rotinas de backup regulares.

Como saber se a cota está configurada corretamente no Dovecot?

Execute o comando doveadm quota get -u [email protected] para verificar o uso atual e o limite configurado para a conta. A saída mostra os valores de STORAGE e MESSAGE sob o nome da raiz de cota configurada (ex.: "User quota"), permitindo confirmar se a cota está sendo aplicada. Para acompanhar os logs, use tail -f /var/log/mail.log (se o rsyslog estiver instalado) ou journalctl -u dovecot -f para identificar recusas de entrega por estouro de cota.

Conclusão

  • Ative o plugin quota tanto no IMAP quanto no protocolo de entrega (LMTP) para que os limites sejam realmente aplicados
  • Use autoexpunge nas pastas Trash e Junk com prazos diferentes, conforme a política de retenção da empresa
  • Teste com doveadm quota get e acompanhe os logs antes de liberar o ambiente para os usuários finais

Leia também

Precisa de ajuda com servidor de e-mail corporativo?

Configurar cotas e Auto-Expunge exige um servidor estável e com recursos previsíveis para rodar Dovecot e Postfix sem gargalos. Um VPS com desempenho consistente facilita esse tipo de ajuste fino em ambientes de produção.

Conheça os planos de VPS da AviraHost


Esta resposta foi útil?