Como resolver o erro 75 not a directory no Dovecot e Sieve
Voltar para blog

Como resolver o erro 75 not a directory no Dovecot e Sieve

04/10/2026 · 4 min · E-mail

Quem gerencia servidores de e-mail baseados em Dovecot sabe que o motor de indexação é rápido e robusto, mas pequenas inconsistências entre os metadados e o sistema de arquivos podem travar caixas postais específicas.

Recentemente passei por uma situação curiosa: uma única conta de e-mail no servidor parou de processar mensagens e expurgar itens excluídos, enquanto todas as outras contas do mesmo domínio funcionavam normalmente. Ao investigar o log, o doveadm falhava com o código de saída 75 (EX_TEMPFAIL) e uma mensagem apontando que um arquivo não era um diretório (Not a directory).

Abaixo mostro o diagnóstico da estrutura do Maildir++, por que o Dovecot confundiu o arquivo de regras do Sieve com uma pasta de mensagens e como corrigi o índice sem perder nenhum e-mail.


1. O sintoma inicial e o código de erro 75 no doveadm#

O sinal de alerta apareceu quando rotinas automáticas de manutenção e comandos manuais de limpeza (expunge) começaram a falhar para a conta usuario@meudominio.com.br:

Erro: “/usr/bin/doveadm” relatou o código de erro “75” quando foi encerrado:
doveadm(usuario@meudominio.com.br): Error: maildir: stat(/home/usuario/mail/meudominio.com.br/usuario/.dovecot.sieve/tmp) failed: Not a directory
doveadm(usuario@meudominio.com.br): Error: cmd expunge: Syncing mailbox INBOX.dovecot.sieve failed: stat(/home/usuario/mail/meudominio.com.br/usuario/.dovecot.sieve/tmp) failed: Not a directory

O ponto central da mensagem é: stat(.../.dovecot.sieve/tmp) failed: Not a directory.

No formato Maildir++, toda pasta de e-mail precisa conter três subpastas obrigatórias: cur, new e tmp. O Dovecot estava tentando sincronizar uma suposta caixa postal chamada INBOX.dovecot.sieve e procurando pela pasta tmp/ dentro dela. Como .dovecot.sieve é um arquivo (e não uma pasta), o sistema operacional retornou erro imediato.


Para entender por que o Dovecot passou a enxergar um arquivo de configuração como se fosse uma pasta IMAP, inspecionei o diretório físico da conta afetada via terminal:

[root@servidor ~]# ls -la /home/usuario/mail/meudominio.com.br/usuario/.dovecot.sieve
lrwxrwxrwx 1 usuario usuario 21 Jan 21 13:33 /home/usuario/mail/meudominio.com.br/usuario/.dovecot.sieve -> sieve/roundcube.sieve

O arquivo .dovecot.sieve na raiz do correio é, na verdade, um link simbólico que aponta para o script de filtros do webmail Roundcube (sieve/roundcube.sieve).

Para comparar com uma conta saudável do mesmo domínio (atendimento@meudominio.com.br), listei os arquivos de controle:

[root@servidor ~]# ls -la /home/usuario/mail/meudominio.com.br/atendimento/ | grep .dovecot
-rw-r-----  1 usuario usuario      0 Jan 24 dovecot-acl-list
-rw-r-----  1 usuario usuario   6856 Feb  1 dovecot.index
-rw-r-----  1 usuario usuario 812524 Jul  3 dovecot.index.cache
-rw-r-----  1 usuario usuario   5000 Jul  3 dovecot.index.log
-rw-r-----  1 usuario usuario   7632 Feb  1 dovecot.list.index
-rw-r-----  1 usuario usuario   4044 May  4 dovecot.list.index.log
-rw-r-----  1 usuario usuario     54 Apr  2 dovecot-quota
-rw-r-----  1 usuario usuario  40589 Apr  2 dovecot-uidlist

A conta atendimento não possuía o link .dovecot.sieve na raiz porque nunca havia criado regras de filtro no Roundcube.

Voltando à conta afetada, verifiquei os arquivos de índice do Dovecot:

[root@servidor ~]# ls -la /home/usuario/mail/meudominio.com.br/usuario/ | grep .dov
-rw-r-----  1 usuario usuario   3944 Jun 15 dovecot.index
-rw-r-----  1 usuario usuario 226172 Jun 15 dovecot.index.cache
-rw-r-----  1 usuario usuario  16992 Jun 15 dovecot.index.log
-rw-r-----  1 usuario usuario   7720 Jun 15 dovecot.list.index
-rw-r-----  1 usuario usuario   4108 Jun 15 dovecot.list.index.log
-rw-------  1 usuario usuario    236 Jan 21 .dovecot.svbin
-rw-r-----  1 usuario usuario  10454 Jun 15 dovecot-uidlist

O binário compilado .dovecot.svbin existia na raiz, provando que o motor Sieve estava operacional. O problema foi uma inconsistência no arquivo de índice da lista de caixas (dovecot.list.index): após alguma edição de pasta ou restauração de backup, o Dovecot indexou erroneamente o prefixo .dovecot.sieve como se fosse um diretório Maildir++ (onde pastas começam com ponto, como .Sent ou .Trash).


3. Removendo a ambiguidade e forçando a sincronização do índice#

Para restabelecer a operação da caixa postal, precisei remover temporariamente o link simbólico conflitante e forçar o Dovecot a reavaliar os diretórios reais em disco:

# Passo 1: Remover o link simbólico na raiz da conta
rm /home/usuario/mail/meudominio.com.br/usuario/.dovecot.sieve

# Passo 2: Forçar a ressincronização completa do índice da INBOX
doveadm force-resync -u usuario@meudominio.com.br INBOX

O comando doveadm force-resync varre o sistema de arquivos, purga entradas fantasmas nos arquivos dovecot.index e reconstrói o catálogo sem a falsa pasta INBOX.dovecot.sieve. A execução retornou limpa, com código 0.


4. Validação do tráfego IMAP em tempo real#

Para confirmar que a caixa postal voltou a sincronizar sem travar os processos de login, acompanhei o log de correio em tempo real:

tail -f /var/log/maillog | grep -i "usuario@meudominio.com.br"

O log registrou acessos bem-sucedidos do webmail e clientes de e-mail:

dovecot: imap-login: Logged in: user=<usuario@meudominio.com.br>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
dovecot: imap(usuario@meudominio.com.br): Disconnected: Logged out in=82, out=950, bytes=82/950
dovecot: imap-login: Logged in: user=<usuario@meudominio.com.br>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
dovecot: imap(usuario@meudominio.com.br): Disconnected: Logged out in=427, out=38510, bytes=427/38510

Os comandos de expunge e as listagens de mensagens voltaram a rodar sem retornar o erro 75.


5. Auditoria de outras contas no servidor#

Para checar se outras contas do servidor continham links similares e verificar se estavam saudáveis, rodei uma busca no diretório de e-mails:

find /home/usuario/mail/ -name ".dovecot.sieve" -type l -exec ls -l {} +

Encontrei links idênticos em contas como contato@meudominio.com.br e nfe@meudominio.com.br. Para validar se o Dovecot estava gerenciando essas contas corretamente, consultei o status do Sieve via CLI:

doveadm sieve list -u contato@meudominio.com.br
doveadm sieve list -u nfe@meudominio.com.br

Ambas retornaram roundcube ACTIVE sem erros. Isso confirmou que o problema não era o link simbólico em si, mas sim um índice corrompido que havia classificado o link como pasta de mensagens exclusivamente na conta afetada.


6. Automação preventiva e lições do maildir++#

Para prevenir problemas futuros com links quebrados de Sieve deixados por clientes webmail, criei um pequeno script de checagem para rodar em rotinas periódicas:

#!/bin/bash
# Verificador de integridade de links do Sieve no Maildir

for user in $(doveadm user '*' | cut -d'@' -f1); do
    SIEVE_LINK="/home/usuario/mail/meudominio.com.br/$user/.dovecot.sieve"
    if [ -L "$SIEVE_LINK" ]; then
        if [ ! -e "$SIEVE_LINK" ]; then
            echo "Aviso: link simbolico quebrado para o usuario: $user"
        fi
    fi
done

O que fica de aprendizado#

No formato Maildir++, qualquer arquivo ou pasta que comece com ponto (.NomeDaPasta) no mesmo nível da INBOX pode ser interpretado como subpasta IMAP caso o índice seja gravado incorretamente. Se você encontrar erros de stat procurando pela pasta tmp/, verifique se o Dovecot não está tentando tratar um arquivo oculto de configuração como se fosse uma pasta de e-mails. A remoção do arquivo conflitante combinada com doveadm force-resync resolve o travamento de forma limpa e definitiva.

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários