Icono del sitio Carlos Herrera

Solución: Error «User unknown in virtual alias table» en Plesk con correo externo

Descripción del problema

Cuando tienes un servidor Plesk que gestiona el hosting y DNS de un dominio, pero el correo electrónico está alojado en un servicio externo (como Office 365, Google Workspace, etc.), puedes encontrarte con este error al intentar enviar correos desde otros dominios del mismo servidor:

User unknown in virtual alias table

Escenario típico

¿Por qué ocurre este error?

Postfix (el servidor de correo de Plesk) considera que si un dominio está alojado en el servidor (aunque solo sea para hosting/DNS), debe entregar el correo localmente. Esto ocurre porque:

  1. El dominio existe en las tablas virtuales de Postfix (/var/spool/postfix/plesk/virtual)
  2. Postfix consulta virtual_alias_domains antes que transport_maps
  3. Encuentra el dominio como «local» y no consulta los registros MX externos
  4. Intenta buscar el buzón localmente y falla con «User unknown»

Diagnóstico

1. Verifica si el dominio está en las tablas virtuales:

postmap -q tudominio.com hash:/var/spool/postfix/plesk/virtual

Si devuelve algo (como «1»), el dominio está registrado como virtual local.

2. Verifica la configuración actual:

postconf virtual_alias_domains

Si muestra virtual_alias_domains = $virtual_alias_maps, ese es el problema.

3. Verifica que los MX externos estén configurados:

dig tudominio.com MX +short

Debe mostrar los servidores de correo externos (ej: tudominio-com.mail.protection.outlook.com)

Solución completa

Paso 1: Desactivar el servicio de correo en Plesk

  1. Accede a Plesk → Sitios web y dominios → tudominio.com
  2. Ve a Correo → Configuración de correo
  3. Selecciona «No configurado»
  4. Guarda los cambios

Paso 2: Configurar transport maps

Añade el dominio al archivo de transporte para forzar entrega externa:

echo "tudominio.com smtp:" >> /var/spool/postfix/plesk/transport
postmap /var/spool/postfix/plesk/transport

Paso 3: Modificar virtual_alias_domains

Edita la configuración principal de Postfix:

vi /etc/postfix/main.cf

Busca la sección de configuraciones virtuales (cerca de estas líneas):

virtual_mailbox_domains = $virtual_mailbox_maps, hash:/var/spool/postfix/plesk/virtual_domains
virtual_alias_maps = $virtual_maps, hash:/var/spool/postfix/plesk/virtual
virtual_mailbox_maps = , hash:/var/spool/postfix/plesk/vmailbox

Añade esta línea justo después:

virtual_alias_domains =

Importante: Déjala vacía (sin valor después del =). Esto desactiva el comportamiento por defecto donde Postfix trata todos los dominios en virtual_alias_maps como locales.

Paso 4: Verificar y recargar

# Verifica la nueva configuración
postconf virtual_alias_domains

# Debe mostrar:
# virtual_alias_domains =

# Verifica que el transport esté activo
postmap -q tudominio.com hash:/var/spool/postfix/plesk/transport

# Debe devolver:
# smtp:

# Recarga Postfix
postfix reload

Paso 5: Prueba el envío

Intenta enviar un correo desde cualquier dominio del servidor hacia el dominio con correo externo. Debería funcionar correctamente.

Casos especiales

Si el dominio es tu servidor DNS maestro

Si el dominio (ej: merakia.es) es utilizado como servidor DNS maestro con subdominios como ns1.merakia.es y ns2.merakia.es, NO intentes eliminarlo de las tablas de Plesk. La solución de virtual_alias_domains = es la correcta en este caso.

Si tienes múltiples dominios con correo externo

Añade cada dominio al archivo transport:

echo "dominio1.com smtp:" >> /var/spool/postfix/plesk/transport
echo "dominio2.com smtp:" >> /var/spool/postfix/plesk/transport
echo "dominio3.com smtp:" >> /var/spool/postfix/plesk/transport
postmap /var/spool/postfix/plesk/transport
postfix reload

Si tienes subdominios con correo

Si subdominios como subdominio.tudominio.com también usan correo externo, añádelos también al transport:

echo "subdominio.tudominio.com smtp:" >> /var/spool/postfix/plesk/transport
postmap /var/spool/postfix/plesk/transport

Verificación de que funciona

Después de aplicar los cambios, envía un correo de prueba y verifica los logs:

tail -f /var/log/maillog

Deberías ver algo como:

postfix/smtp[12345]: Connecting to tudominio-com.mail.protection.outlook.com[X.X.X.X]:25
postfix/smtp[12345]: 1234ABCD: to=<usuario@tudominio.com>, relay=tudominio-com.mail.protection.outlook.com[X.X.X.X]:25, status=sent

Esto confirma que Postfix está entregando el correo a los servidores externos correctamente.

Troubleshooting

El dominio sigue apareciendo en las tablas virtuales

Esto es normal y no es un problema. Lo importante es que virtual_alias_domains = esté vacío, lo que hace que Postfix ignore esas tablas para el enrutamiento.

Los correos se quedan en cola

Verifica la cola de correos:

mailq

Si hay correos atascados, verifica:

  1. Conectividad con los servidores MX externos:
    telnet tudominio-com.mail.protection.outlook.com 25
  2. Que el firewall permita conexiones salientes al puerto 25
  3. Que tu servidor no esté en listas negras (RBL)

Error: «Relay access denied»

Si recibes este error, verifica que relay_domains esté correctamente configurado:

postconf relay_domains

Debe estar vacío o no incluir el dominio problemático.

Resumen de la solución

La clave está en dos configuraciones fundamentales:

  1. Transport maps: Indica a Postfix que use SMTP externo para el dominio
    echo "tudominio.com smtp:" >> /var/spool/postfix/plesk/transport
    postmap /var/spool/postfix/plesk/transport
  2. Virtual alias domains vacío: Fuerza a Postfix a consultar transport_maps primero
    # En /etc/postfix/main.cf
    virtual_alias_domains =

Con estas dos configuraciones, Postfix dejará de intentar entregar localmente y consultará los registros MX externos correctamente.

Configuración final en main.cf

Tu configuración debe quedar así:

# Configuración de dominios virtuales
virtual_mailbox_domains = $virtual_mailbox_maps, hash:/var/spool/postfix/plesk/virtual_domains
virtual_alias_maps = $virtual_maps, hash:/var/spool/postfix/plesk/virtual
virtual_mailbox_maps = , hash:/var/spool/postfix/plesk/vmailbox
virtual_alias_domains =

# Transport maps para dominios externos
transport_maps = hash:/var/spool/postfix/plesk/transport

Notas importantes


Aplicable a: Plesk Obsidian, Postfix 3.x

Salir de la versión móvil