Entorno
- Servidor DirectAdmin con Dovecot (IMAP/LMTP) + Exim (MTA) + Roundcube (Webmail)
- Formato de suscripciones Dovecot v2
- Correo almacenado en formato Maildir
Problema
Tras migrar cuentas de correo de cPanel a DirectAdmin, los usuarios reportan que los correos de Spam/Junk no son visibles en Roundcube. Al investigar, todas las carpetas estándar (Drafts, Sent, Trash, Junk) también pueden estar ausentes de la interfaz de webmail.
Causa raíz
Tres problemas causados por la migración de cPanel a DirectAdmin:
1. Nombre incorrecto de carpeta spam en el archivo de suscripciones
cPanel usa spam como nombre de carpeta IMAP para correo basura. DirectAdmin usa INBOX.spam. Después de la migración, el archivo de suscripciones de Dovecot aún referencia el nombre antiguo de cPanel, por lo que la carpeta no es visible en Roundcube aunque Exim entrega el spam correctamente a .INBOX.spam/new/.
2. Suscripciones de carpetas estándar faltantes
Los archivos de suscripciones migrados no tienen entradas para las carpetas IMAP estándar: Drafts, Sent, Trash y Junk. Estas carpetas existen en disco (como .Drafts, .Sent, .Trash, .Junk dentro de Maildir) pero no están listadas en el archivo de suscripciones.
El archivo de suscripciones de una cuenta nativa de DirectAdmin se ve así:
Drafts
INBOX.spam
Junk
Sent
Trash
V 2Una cuenta migrada solo tiene:
V 2
spam
Archive
...3. Propiedad del archivo cambiada a root tras ediciones por CLI
Al editar archivos de suscripciones con sed -i como root, el flag -i crea un archivo temporal y reemplaza el original, cambiando la propiedad a root:root. Dovecot se ejecuta como el usuario del sistema, por lo que Roundcube devuelve "Unable to perform operation, permission denied".
Propiedad correcta: {da_user}:mail con permisos 660.
Ubicación de archivos relevantes
| Archivo | Propósito |
|---|---|
/home/{user}/imap/{domain}/{account}/Maildir/subscriptions |
Suscripciones de carpetas IMAP de Dovecot (controla lo que muestra Roundcube) |
/etc/virtual/{domain}/filter |
Filtro a nivel de dominio de Exim (maneja el enrutamiento de entrega de spam) |
/etc/dovecot/conf/namespace_private.conf |
Configuración de namespace de Dovecot (define carpetas de uso especial) |
Solución
Paso 1: Reemplazar nombre de carpeta de cPanel con el de DirectAdmin
for acc in usuario1 usuario2 usuario3; do
sub="/home/{da_user}/imap/{dominio}/${acc}/Maildir/subscriptions"
if [ -f "$sub" ]; then
sed -i 's/^spam$/INBOX.spam/' "$sub"
fi
donePaso 2: Agregar suscripciones de carpetas estándar faltantes
for acc in usuario1 usuario2 usuario3; do
sub="/home/{da_user}/imap/{dominio}/${acc}/Maildir/subscriptions"
if [ -f "$sub" ]; then
for folder in Drafts Sent Trash Junk; do
if ! grep -q "^${folder}$" "$sub"; then
sed -i "/^$/a ${folder}" "$sub"
fi
done
fi
donePaso 3: Restaurar propiedad y permisos correctos
Crítico después de cualquier edición por CLI a archivos de suscripciones:
for acc in usuario1 usuario2 usuario3; do
sub="/home/{da_user}/imap/{dominio}/${acc}/Maildir/subscriptions"
if [ -f "$sub" ]; then
chown {da_user}:mail "$sub"
chmod 660 "$sub"
fi
doneVerificación
No se requiere reinicio de servicios. Dovecot lee el archivo de suscripciones en cada sesión IMAP. Los usuarios solo necesitan refrescar o volver a iniciar sesión en Roundcube.
Guía general para futuras migraciones desde cPanel
- El archivo de suscripciones debe tener
INBOX.spamen lugar despam - Las carpetas estándar (Drafts, Sent, Trash, Junk) deben estar listadas en el archivo de suscripciones
- La propiedad del archivo debe ser
{da_user}:mailcon permisos660 - El filtro de Exim (
/etc/virtual/{domain}/filter) debe entregar spam a.INBOX.spam/new/ - Las carpetas huérfanas como
.spam(legado de cPanel) pueden limpiarse si están vacías