Le preguntamos a Gemini, la inteligencia artificial de Google, cómo resolver problemas de SendMail en linux
Explicanos detalladamente cómo resolver problemas de SendMail en linuxLa resolución de problemas en Sendmail exige diagnosticar tres áreas críticas: la resolución de nombres (FQDN y DNS), la correcta compilación de las macros en /etc/mail/ y la inspección de la cola de procesamiento.
1. Centro de Diagnóstico: Logs y Herramientas CLI
Antes de modificar la configuración, utiliza los comandos de diagnóstico nativos para determinar en qué etapa se interrumpe la entrega.
Archivos de registro de eventos
Debian / Ubuntu: /var/log/mail.log
RHEL / Rocky Linux / AlmaLinux: /var/log/maillog
Monitoreo en tiempo real (systemd):
Bash
sudo journalctl -u sendmail -f -n 100
Comandos de inspección de la cola y enrutamiento
Bash
# Ver los correos atascados en la cola de salida
mailq
# O bien:
sudo sendmail -bp
# Forzar el envío inmediato de la cola mostrando la traza completa (Verbose)
sudo sendmail -q -v
# Probar la resolución y enrutamiento de una dirección sin enviar correo
sendmail -bv usuario@dominio-destino.com
# Entrar en modo de prueba de reglas de enrutamiento de Sendmail
sendmail -bt
2. Errores Comunes y Soluciones Paso a Paso
Error 1: Arranque extremadamente lento de Sendmail (Delay de 30 a 60 segundos)
Síntoma: El comando systemctl restart sendmail o el arranque del sistema se congela durante casi un minuto antes de responder.
Causa: Sendmail intenta realizar una búsqueda DNS inversa sobre la IP local o resolver el Fully Qualified Domain Name (FQDN) antes de levantar el demonio y la consulta falla por timeout.
Solución: Edita /etc/hosts y vincula explícitamente el FQDN a las direcciones de bucle local (127.0.0.1 y ::1):
Plaintext
127.0.0.1 localhost mail.tudominio.com mail
::1 localhost mail.tudominio.com mail
Confirma que el comando hostname -f devuelva mail.tudominio.com de forma instantánea.
Error 2: "550 5.7.1 Relaying denied"
Síntoma: Un cliente de correo externo o una aplicación web no puede enviar correos a dominios externos a través del servidor.
Causa: La IP de origen no está autorizada como Relay en la base de datos de acceso de Sendmail.
Solución:
Edita el archivo de control de acceso:
Bash
sudo nano /etc/mail/access
Agrega la IP o subred permitida:
Plaintext
Connect:192.168.1.50 RELAY
Connect:10.0.0 RELAY
Recompila la base de datos hash: (Modificar el archivo plano no surte efecto hasta compilar la base de datos .db):
Bash
sudo makemap hash /etc/mail/access < /etc/mail/access
sudo systemctl restart sendmail
Error 3: Los cambios en sendmail.mc no surten efecto
Síntoma: Editas /etc/mail/sendmail.mc (por ejemplo, para cambiar la IP de escucha o activar TLS), pero el comportamiento del servicio no cambia tras reiniciar.
Causa: Sendmail no lee directamente el archivo .mc. Lee el binario compilado /etc/mail/sendmail.cf.
Solución: Debes compilar la plantilla de macros m4 antes de reiniciar el servicio:
Bash
cd /etc/mail
sudo make -C /etc/mail
# Si 'make' falla, compila directamente con m4:
sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
sudo systemctl restart sendmail
Error 4: Correos retenidos indefinidamente ("Deferred: Connection timed out")
Síntoma: En mailq aparecen múltiples correos con el estado Deferred y los logs muestran stat=Deferred: Connection timed out with mx.dominio.com.
Causa:
Tu proveedor de nube o ISP bloquea el puerto de salida 25/TCP.
Falta el registro PTR (DNS inverso) en tu IP pública y el receptor rechaza la conexión.
Solución:
Verifica si el puerto 25 saliente está abierto:
Bash
nc -zv mx1.hotmail.com 25
Si el puerto 25 está bloqueado por el ISP, configura un Smart Host (servidor SMTP Relay intermedio) en /etc/mail/sendmail.mc:
Plaintext
define(`SMART_HOST', `smtp.tuproveedor.com')dnl
Recompila con make -C /etc/mail y reinicia Sendmail.
Error 5: Fallos de autenticación SMTP / SASL
Síntoma: Los clientes reciben 535 5.7.0 Authentication failed al intentar enviar correos con usuario y contraseña.
Causa: El demonio saslauthd está detenido o desconfigurado.
Solución:
Comprueba el estado del servicio SASL:
Bash
sudo systemctl status saslauthd
Asegúrate de que Sendmail tenga permisos para leer el socket de SASL (normalmente localizado en /var/run/saslauthd).
Inicia y habilita el demonio:
Bash
sudo systemctl restart saslauthd
sudo systemctl enable saslauthd
Matriz de Referencia Rápida de Archivos