Resolvendo conflitos de quota de e-mail e erros de SMTPUTF8 em ambiente Exim/Dovecot#
Durante migrações de e-mail entre painéis de controle (como cPanel para Plesk ou vice-versa), dois problemas aparecem com grande frequência: discrepâncias entre o uso real de disco das caixas postais e o limite exibido no painel administrativo, e falhas de entrega com o erro SMTPUTF8 used when not advertised.
Tratando ambos os problemas em conjunto, restabelecemos a estabilidade operacional do servidor SMTP (MTA) e das quotas locais do Dovecot.
1) Diagnóstico inicial e verificação de versões#
Antes de alterar qualquer arquivo de configuração, é recomendável obter as versões dos principais pacotes envolvidos para mapear compatibilidades de sintaxe:
# Verificar a versão do Exim
exim -V
# Verificar a versão do Dovecot
doveadm --version
# Obter a versão do cPanel/WHM instalada
cat /usr/local/cpanel/version
2) Conflito de quota inconsistente#
Sintomas comuns:
- A interface web/painel informa que a caixa está "lotada", mas o disco possui espaço de armazenamento livre.
- O usuário não consegue enviar ou receber e-mails devido a suposto estouro de quota, mas o tamanho físico do diretório está abaixo do limite configurado.
A. Medição física via shell (maildir)#
Verifique o tamanho físico real ocupado pela mailbox diretamente no disco do servidor:
# Exibir o tamanho de todas as caixas de um domínio
du -h --max-depth=1 /home/usuario/mail/domain.com/ | sort -h
B. Consultar quota declarada no Dovecot#
Consulte as métricas ativas na memória do Dovecot para a conta afetada:
# Obter limites de quota do usuário específico
doveadm quota get -u [email protected]
Se o valor retornado pelo du e o reportado pelo doveadm quota get apresentarem grande divergência, o arquivo de cache maildirsize está desatualizado ou corrompido.
C. Verificar se a configuração de quota está ativa no Dovecot#
Certifique-se de que o plugin de quota está carregado e verifique as regras ativas de limite no Dovecot. Caso precise inspecionar ou ajustar regras personalizadas pós-migração, verifique as diretivas de quota_rule nos arquivos de configuração do Dovecot (tipicamente localizados em /etc/dovecot/conf.d/90-quota.conf):
# Validar se o plugin de quota está habilitado no mail_plugins
doveconf -n | grep -i "mail_plugins"
# Consultar limites de quota globais e regras de tamanho
doveconf quota_rule
3) Procedimento de correção de quota (runbook)#
Passo a: realizar o backup completo dos arquivos maildirsize#
# Criar diretório seguro para o backup
BACKUP_DIR="/root/maildirsize-backup-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Encontrar e copiar os arquivos maildirsize mantendo a árvore de pastas para backup
find /home/usuario/mail/domain.com/ -name "maildirsize" -exec cp --parents {} "$BACKUP_DIR/" \;
# Alternativa: Criar um arquivo compactado tar.gz com todos os arquivos maildirsize
find /home/usuario/mail/domain.com/ -name "maildirsize" -exec tar czf "$BACKUP_DIR/maildirsize-backup.tar.gz" {} +
echo "Backup completo de quotas salvo em: $BACKUP_DIR"
Passo b: remover os arquivos de quotas obsoletos#
Remova os arquivos maildirsize desatualizados para forçar o Dovecot a gerar novos índices limpos:
find /home/usuario/mail/domain.com/ -name "maildirsize" -exec rm -f {} \;
Passo c: recalcular a quota no Dovecot#
Comande o Dovecot para recalcular o uso de disco com base na varredura física real das pastas:
# Recalcular quota de uma caixa de e-mail específica
doveadm quota recalc -u [email protected]
# Recalcular quota para todas as contas de um domínio em lote usando globbing seguro (evita ls)
for dir in /home/usuario/mail/domain.com/*/; do
mailbox="$(basename "$dir")"
doveadm quota recalc -u "[email protected]"
done
Passo d: sincronizar o cache do painel (cPanel)#
Se o servidor utiliza cPanel, atualize o cache interno do painel de controle para sincronizar as visualizações na interface administrativa:
/scripts/update_db_cache
Passo e: verificação pós-recálculo#
Valide se as caixas postais agora mostram os valores idênticos entre o disco e as queries do Dovecot, e realize um teste prático de envio:
# Comparar valores da consulta com uso real de disco
doveadm quota get -u [email protected]
du -sh /home/usuario/mail/domain.com/contato/
# Auditar logs do Dovecot buscando alertas de quota (syslog tradicional)
tail -n 50 /var/log/maillog | grep -i "quota"
# Alternativa para sistemas sob systemd
journalctl -u dovecot --since "1 hour ago" | grep -i "quota"
# Testar o envio de um e-mail de teste de quota
echo "Teste de quota de email" | mail -s "Teste de Quota" [email protected]
4) Falha de entrega SMTPUTF8#
O Erro: SMTPUTF8 used when not advertised
Causa: Esse erro ocorre quando o cliente de e-mail envia um cabeçalho contendo caracteres especiais UTF-8 sem que o servidor SMTP de destino (MTA) anuncie a extensão SMTPUTF8 (RFC 6531) no handshake inicial (EHLO). Como o destino é antigo ou não suporta UTF-8 no envelope, a transação é rejeitada na origem.
A. Diagnóstico da fila do Exim#
Monitore e analise as mensagens retidas na fila do Exim decorrentes de falhas de SMTPUTF8:
# Buscar erros de SMTPUTF8 nos logs principais do Exim
grep -i "smtputf8" /var/log/exim_mainlog | tail -n 50
# Alternativa usando journalctl se exim_mainlog não for mantido fisicamente
journalctl -u exim --since "2 hours ago" | grep -i "smtputf8"
# Alternativa caso o caminho físico varie (ex: Debian/Ubuntu)
grep -i "smtputf8" /var/log/exim/mainlog | tail -n 20
# Listar todas as mensagens na fila do Exim
exim -bp
Compreendendo a Saída de exim -bp:#
A listagem exibe as mensagens no formato: 12h 1.8K 1abcde-0001ab-ab <[email protected]> [email protected]
- Coluna 1: Tempo na fila (ex:
12hpara 12 horas). - Coluna 2: Tamanho do e-mail (ex:
1.8K). - Coluna 3: ID único da mensagem (ex:
1abcde-0001ab-ab). - Coluna 4: Remetente e destinatário da mensagem.
Para contar e filtrar mensagens antigas presas na fila:
# Contar total de mensagens na fila
exim -bp | wc -l
# Filtrar mensagens na fila há mais de 24 horas
exim -bp | awk '$1 ~ /d$/ {print}' | head -n 20
B. Consultar a configuração SMTPUTF8 no Exim#
# Verificar se o Exim está anunciando a diretiva smtputf8_advertise_hosts
exim -bP smtputf8_advertise_hosts
# Verificar se a linha existe no arquivo físico de configuração
grep -i "smtputf8" /etc/exim.conf
Nota: No cPanel/WHM, você também pode checar a configuração via API:
whmapi1 listeximconfig | grep -i smtputf8
5) Resolução do erro SMTPUTF8 no Exim#
Se o seu servidor de e-mail precisa enviar mensagens contendo envelopes ou cabeçalhos UTF-8 para servidores remotos legados que não anunciam a extensão, você deve configurar o Exim para desabilitar o anúncio forçado de suporte SMTPUTF8, permitindo fallback dinâmico.
Acesse WHM » Exim Configuration Manager » Advanced Editor, procure por smtputf8_advertise_hosts e defina o valor como vazio (ou remova a sinalização de IP).
Após a alteração, valide a sintaxe do arquivo e reinicie o Exim:
# Reiniciar o serviço do Exim
systemctl restart exim
Limpar fila de e-mails presos#
Para remover de forma forçada mensagens paradas devido a falhas recorrentes de SMTPUTF8:
# 1. Inspecionar cabeçalho de uma mensagem específica antes de apagar
exim -Mvh ID_DA_MENSAGEM
# 2. Listar mensagens de SMTPUTF8 e visualizar seus cabeçalhos com segurança
exim -bp | grep -i "smtputf8" | awk '{print $3}' | while read -r msgid; do
echo "=== MSG ID: $msgid ==="
exim -Mvh "$msgid" | head -15
echo -e "-------------------------\n"
done
# 3. Remover mensagens da fila contendo o erro SMTPUTF8 (após validação)
exim -bp | grep -i "smtputf8" | awk '{print $3}' | xargs -r exim -Mrm
# 4. Forçar a entrega seletiva apenas para o domínio problemático (evita sobrecarga)
exim -qff -R @dominio-destino.com
# Alternativa: Forçar a entrega global com cautela
# Nota: `-qff` (flush frozen) tenta entregar inclusive mensagens congeladas (frozen),
# enquanto `-qf` (flush normal) tenta apenas mensagens ativas. Em ambientes instáveis,
# prefira `-qf` ou `-qff -R @dominio` para limitar o escopo da tentativa.
exim -qff
SOP: checklist de migração de e-mail (quota + SMTPUTF8)#
Abaixo está o fluxo operacional para auditoria e estabilização de e-mails em migrações:
Pré-migração#
- [ ] Backup de Quotas do Dovecot: Exportar status atual:
doveadm quota get -A > /root/quota-original.txt - [ ] Backup Físico de maildirsize: Criar tar.gz de segurança de todos os diretórios
mail - [ ] Auditar Configuração SMTPUTF8: Checar status no servidor de origem:
exim -bP smtputf8_advertise_hosts - [ ] Espaço em Disco: Verificar limites e inodes livres no host de destino:
df -hedf -i
Durante a migração#
- [ ] Sincronizar dados de e-mail preservando permissões e datas originais (
rsync -avzouimapsync) - [ ] Manter arquivos
maildirsizecopiados temporariamente para auditoria
Pós-migração#
- [ ] Remover maildirsize: Apagar os índices importados (especialmente se importados via
imapsync) para evitar conflitos de cache - [ ] Recalcular Quotas: Forçar atualização das contas no Dovecot:
doveadm quota recalc -A(e auditar regras emquota_rule) - [ ] Ajustar Exim: Configurar
smtputf8_advertise_hostscaso envie para destinos sem suporte RFC 6531 - [ ] Verificar Logs: Monitorar erros de entrega no
/var/log/exim_mainlog,/var/log/maillogou usandojournalctl
Validação e aceite#
- [ ] Comparar consumo de disco com logs (
du -shvsdoveadm quota get) - [ ] Confirmar que o painel exibe as quotas corrigidas na interface gráfica
- [ ] Realizar teste SMTP de envio e recebimento em caixas novas e migradas
Script de auditoria de quota e fila de e-mail#
Utilize o script audit-quota.sh para varrer periodicamente as caixas de e-mail e reportar inconsistências ou acúmulos na fila:
#!/bin/bash
# audit-quota.sh - Auditoria e triagem de quotas e fila SMTP
# Uso: ./audit-quota.sh
set -euo pipefail
echo "=========================================================="
echo " INICIANDO AUDITORIA DE QUOTAS E FILA DO EXIM"
echo "=========================================================="
# 1. Obter versões
echo -e "\n[1] Versões dos Serviços:"
exim -V | head -n 1
doveadm --version 2>/dev/null || echo "Dovecot: $(dovecot --version)"
# 2. Consultar status da fila do Exim
echo -e "\n[2] Status da Fila Exim:"
QUEUE_COUNT=$(exim -bp | grep -c '^[0-9]' || true)
echo " Mensagens pendentes na fila: $QUEUE_COUNT"
if [ "$QUEUE_COUNT" -gt 0 ]; then
echo " Últimas 5 mensagens da fila:"
exim -bp | head -n 10
fi
# 3. Verificar arquivos maildirsize antigos (indicam falta de sincronismo)
echo -e "\n[3] maildirsize Sem Modificações Há Mais de 30 Dias:"
find /home/*/mail -name "maildirsize" -mtime +30 2>/dev/null | head -n 15 || echo " Nenhum arquivo maildirsize antigo encontrado."
# 4. Checar erros de quota nos logs do Dovecot
echo -e "\n[4] Logs Recentes de Erro de Quota (Dovecot):"
grep -i "quota" /var/log/maillog 2>/dev/null | tail -n 5 || echo " Nenhum log de quota encontrado no syslog."
# 5. Checar erros de SMTPUTF8 no Exim
echo -e "\n[5] Erros Recentes de SMTPUTF8 no Exim:"
grep -i "smtputf8" /var/log/exim_mainlog 2>/dev/null | tail -n 5 || echo " Nenhum log de erro SMTPUTF8 encontrado."
# 6. Verificar configuração de anúncio de suporte SMTPUTF8
echo -e "\n[6] Configuração de smtputf8_advertise_hosts no Exim:"
exim -bP smtputf8_advertise_hosts 2>/dev/null || echo " Diretiva não encontrada na configuração ativa do Exim."
echo -e "\n=========================================================="
echo " AUDITORIA CONCLUÍDA"
echo "=========================================================="
Considerações práticas#
Erros de quota e SMTPUTF8 pós-migração são causados por índices de arquivo inválidos (maildirsize) e falta de compatibilidade no anúncio de recursos internacionais em MTAs legados. Ao realizar backups dos arquivos de quotas antes de limpá-los, recalcular os limites via Dovecot CLI e configurar o parâmetro de compatibilidade de hosts no Exim, normalizamos o tráfego de e-mail com segurança e exatidão.
Este artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários