Blog sobre Web Hosting y Dominios

Solución al error "message has lines too long for transport" en Exim

Si estás experimentando errores de rebote (delivery) con el mensaje "message has lines too long for transport" al enviar correos desde Outlook clásico hacia cuentas externas a través de un servidor Exim, pero los correos funcionan correctamente desde el nuevo Outlook o webmail, este artículo te mostrará la solución definitiva.

Síntomas del Problema

  • ✅ Los correos internos (mismo servidor) se envían correctamente
  • ✅ Los correos desde Nuevo Outlook funcionan perfectamente
  • ❌ Los correos desde Outlook clásico a dominios externos fallan con el error: message has lines too long for transport

El mensaje que estan enviando tiene imagenes pegadas en el mensaje en lugar de estar como archivo adjunto

 

Causa del Problema

El problema ocurre cuando se cumplen estas condiciones:

  1. Outlook clásico genera correos con líneas que exceden los límites del protocolo SMTP tradicional (998 caracteres según RFC 5322)
  2. El servidor Exim está configurado para enviar correos externos a través de un smarthost o gateway (como SpamExperts, relay SMTP, etc.)
  3. El transport de Exim no está configurado para manejar líneas largas o usar el protocolo CHUNKING

¿Por qué Outlook clásico y el nuevo Outlook se comportan diferente?

  • Outlook clásico: Usa SMTP/MAPI tradicional y puede generar headers MIME, firmas HTML y contenido Base64 con líneas muy largas
  • Nuevo Outlook: Usa Microsoft Graph API que codifica el contenido de manera más compatible con los límites SMTP estándar

Solución

La solución consiste desde el Panel WHM en modificar los transports de Exim para que:

  1. Aumenten significativamente el límite de longitud de línea
  2. Habiliten el protocolo CHUNKING (BDAT) que evita las restricciones de longitud

Paso 1: Acceder al Editor Avanzado de Exim

  1. Inicia sesión en WHM o cPanel
  2. Ve a Service ConfigurationExim Configuration Manager
  3. Haz clic en Advanced Editor

Paso 2: Localizar la Sección de Transports

Busca la sección "Section: TRANSPORTSTART" o "begintransport"

Paso 3: Modificar el Transport para Smarthost con DKIM

Localiza tu transport que maneja el envío a través del smarthost (por ejemplo: remote_smtp_smart_dkim) y modifícalo así:

ANTES (configuración problemática):

 

remote_smtp_smart_dkim:
driver = smtp
hosts_require_tls = *
message_linelength_limit = 990 # o sin esta línea
interface = ${if exists {/etc/mailips}{${lookup{$sender_address_domain}lsearch*{/etc/mailips}{$value}{}}}{}}
helo_data = ${if exists {/etc/mailhelo}{${lookup{$sender_address_domain}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
dkim_domain = $sender_address_domain
dkim_selector = default
dkim_private_key = "/var/cpanel/domain_keys/private/${lookup{$dkim_domain}dsearch{/var/cpanel/domain_keys/private/}}"
dkim_canon = relaxed
headers_add = "${perl{check_mail_permissions_headers}}"

DESPUÉS (configuración correcta):

remote_smtp_smart_dkim:
driver = smtp
hosts_require_tls = *
message_linelength_limit = 1000000 # ← AÑADIR: Límite muy alto
hosts_try_chunking = * # ← AÑADIR: Habilitar CHUNKING
interface = ${if exists {/etc/mailips}{${lookup{$sender_address_domain}lsearch*{/etc/mailips}{$value}{}}}{}}
helo_data = ${if exists {/etc/mailhelo}{${lookup{$sender_address_domain}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
dkim_domain = $sender_address_domain
dkim_selector = default
dkim_private_key = "/var/cpanel/domain_keys/private/${lookup{$dkim_domain}dsearch{/var/cpanel/domain_keys/private/}}"
dkim_canon = relaxed
headers_add = "${perl{check_mail_permissions_headers}}"

Paso 4: Modificar Otros Transports (Opcional pero Recomendado)

Si tienes otros transports para smarthost sin DKIM, modifícalos también:

remote_smtp_smart_regular:
driver = smtp
hosts_require_tls = *
message_linelength_limit = 1000000 # ← AÑADIR
hosts_try_chunking = * # ← AÑADIR
interface = ${if exists {/etc/mailips}{${lookup{$sender_address_domain}lsearch*{/etc/mailips}{$value}{}}}{}}
helo_data = ${if exists {/etc/mailhelo}{${lookup{$sender_address_domain}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
headers_add = "${perl{check_mail_permissions_headers}}"

Paso 5: Guardar y Aplicar Cambios

  1. Haz clic en Save en el Advanced Editor
  2. cPanel automáticamente recargará la configuración de Exim
  3. Verifica que aparezca el mensaje: "The system successfully saved the configuration."

Paso 6: Verificar la Configuración (Opcional)

Desde SSH, puedes verificar que los cambios se aplicaron correctamente:

# Verificar el transport
exim -bP transport remote_smtp_smart_dkim | grep -E "message_linelength|chunking"

# Deberías ver:
# message_linelength_limit = 1000000
# hosts_try_chunking = *

¿Qué Hacen Estos Cambios?

message_linelength_limit = 1000000

Esta directiva establece el límite máximo de caracteres por línea en 1 millón (prácticamente sin límite). Esto permite que Exim procese correos con líneas muy largas sin rechazarlos.

Valores comunes:

  • 998 - Límite estándar RFC 5322
  • 0 - Sin límite (puede causar problemas con algunos servidores)
  • 1000000 - Límite muy alto pero definido (recomendado)

hosts_try_chunking = *

Esta directiva habilita el protocolo CHUNKING (BDAT) que es una extensión de SMTP (RFC 3030) que permite:

  • Enviar el contenido del mensaje en bloques binarios
  • Evitar las restricciones de longitud de línea del SMTP tradicional
  • Mejor manejo de mensajes con contenido binario o codificado

El asterisco * significa "intentar con todos los hosts". Si el servidor receptor no soporta CHUNKING, Exim automáticamente regresará al método tradicional.

Suscríbete a nuestro blog!

No te perderás de todo el contenido que subimos cada semana. Hablamos de hosting, diseño web, optimización de tu sitio, seguridad, entre muchas otras cosas más.

Artículos Relacionados

Isotipo Solo Web Solo Web

Cómo Configurar SpamExperts Outgoing en cPanel/WHM: Mejora la entrega de correos a tus clientes

la entregabilidad del correo electrónico es fundamental. Para empresas y usuarios con servidores...