Si al revisar las cuentas de correo electrónico en cPanel notas que el espacio utilizado aparece en KB (por ejemplo, 78 KB) cuando el uso real es de varios GB, se trata de un problema de sincronización entre los archivos de cuota de Dovecot y el caché de cPanel.
El archivo dovecot-quota dentro de cada buzón de correo es el responsable de almacenar el tamaño de la cuenta. Cuando este archivo no existe o contiene valores incorrectos, cPanel muestra datos desactualizados. Adicionalmente, el datastore de cPanel almacena estos valores en caché y no los actualiza automáticamente.
Antes de iniciar, obtén el usuario de cPanel asociado al dominio:
grep DOMINIO /etc/userdomains
El resultado mostrará algo como: dominio1.com.mx: dominio1c — donde dominio1c es el USUARIO y dominio1.com.mx es el DOMINIO.
Confirma el espacio real que ocupa cada cuenta de correo en el servidor:
du -sh /home/USUARIO/mail/DOMINIO/*/
Si los valores coinciden con lo que muestra cPanel, no es necesario continuar. Si hay discrepancias significativas (cPanel muestra KB cuando el uso real es MB o GB), procede con los siguientes pasos.
Obtén la lista de cuentas de correo registradas en cPanel para el dominio:
uapi --user=USUARIO Email list_pops_with_disk | grep "email:"
Este script elimina los archivos dovecot-quota existentes, recalcula las cuotas con Dovecot y escribe los valores correctos para cada cuenta:
for account in $(ls /home/USUARIO/mail/DOMINIO/); do
rm -f /home/USUARIO/mail/DOMINIO/${account}/dovecot-quota
doveadm quota recalc -u "${account}@DOMINIO" 2>/dev/null
QUOTA=$(doveadm quota get -u "${account}@DOMINIO" 2>/dev/null \
| grep "Mailbox" | grep "STORAGE" | awk '{print $3}')
MESSAGES=$(doveadm quota get -u "${account}@DOMINIO" 2>/dev/null \
| grep "Mailbox" | grep "MESSAGE" | awk '{print $3}')
if [ -n "$QUOTA" ]; then
MAILPATH="/home/USUARIO/mail/DOMINIO/${account}"
echo "priv/quota/storage=${QUOTA}" > "${MAILPATH}/dovecot-quota"
echo "priv/quota/messages=${MESSAGES}" >> "${MAILPATH}/dovecot-quota"
chown USUARIO:USUARIO "${MAILPATH}/dovecot-quota"
echo "${account}: storage=${QUOTA} messages=${MESSAGES}"
fi
done
Cada cuenta imprimirá su nombre con los valores de storage y messages. Verifica que coincidan con lo obtenido en el Paso 1.
Elimina los archivos de caché del datastore para forzar una lectura fresca:
rm -f /home/USUARIO/.cpanel/datastore/*email*
rm -f /home/USUARIO/.cpanel/datastore/*quota*
rm -f /home/USUARIO/.cpanel/datastore/_Cpanel::Quota*
Reinicia el servicio de cPanel para que la interfaz web lea los nuevos datos:
/scripts/restartsrv_cpsrvd
Este paso lee la cuota actual de cada cuenta, la cambia temporalmente a 500 MB y la restaura al valor original, forzando a cPanel a refrescar los datos en la interfaz web:
for account in $(ls /home/USUARIO/mail/DOMINIO/); do
# Leer la cuota actual antes de modificar
CURRENT_LIMIT=$(doveadm quota get -u "${account}@DOMINIO" 2>/dev/null \
| grep "^Mailbox" | grep "STORAGE" | awk '{print $4}')
if [ "$CURRENT_LIMIT" = "-" ] || [ -z "$CURRENT_LIMIT" ]; then
RESTORE_QUOTA=0
else
RESTORE_QUOTA=$((CURRENT_LIMIT / 1024))
fi
# Toggle para forzar refresh
uapi --user=USUARIO Email edit_pop_quota \
email=${account} domain=DOMINIO quota=500 2>/dev/null
# Restaurar cuota original
uapi --user=USUARIO Email edit_pop_quota \
email=${account} domain=DOMINIO quota=${RESTORE_QUOTA} 2>/dev/null
echo "${account}: restaurada a ${RESTORE_QUOTA} MB"
done
quota=100).Recarga la página de cPanel con Ctrl+F5 (hard refresh).
Verifica que los valores de Storage coincidan con los del Paso 1.
Si alguna cuenta individual no se actualizó, ejecuta solo para esa cuenta:
uapi --user=USUARIO Email edit_pop_quota \
email=CUENTA domain=DOMINIO quota=500
uapi --user=USUARIO Email edit_pop_quota \
email=CUENTA domain=DOMINIO quota=0
Los siguientes comandos pueden revertir la corrección y no deben usarse después de completar el procedimiento:
find /home/USUARIO/mail/ -name "maildirsize" -delete — Puede causar que los valores se regeneren incorrectamente./scripts/fixquotas — Sobrescribe los archivos de cuota con valores incorrectos.doveadm quota recalc después del Paso 3 — Ya se ejecuta dentro del script; ejecutarlo nuevamente puede sobrescribir el archivo dovecot-quota.