Como hacer que sendmail envíe los correos locales a otro servidor

12-11-2010

Hoy tuve este problema con uno de nuestro servidores web. En este servidor tenemos nuestro nombre de dominio principal, por ejemplo dominio.com y felizmente responde a www.dominio.com y dominio.com cuando lo llaman por http. También manda correo usando sendmail.

Pero, para el servidor que recibe y procesa nuestro correo está en mail.dominio.com y es una computadora muy aparte, ni siquiera está en el mismo país que nuestro servidor web. Nuestro DNS está bien configurado y cada que alguien manda un mensaje a @dominio.com nos llega perfectamente.

Sin embargo, si queremos mandarnos correo desde un script php en nuestro servidor web, éste se va al vacío porque nuestro sendmail considera a @dominio.com como parte de nuestro mismo servidor y trata de entregar el correo localmente. Como el usuario no existe, pues falla y el correo nunca llega a donde tiene que ir (y aunque existiera, no lo va a ir a ver).

Para arreglar este problema hay que darle a entender a nuestro sendmail que realmente @dominio.com no le pertenece. No es culpa del pobre sendmail, nada más hace lo que le dicen y puede ser que le estemos dando mala información en uno o más de estos tres lados:

  1. El archivo /etc/mail/local-host-names
  2. El archivo /etc/hosts
  3. Que uno de los nombres o alias de la máquina local sea dominio.com

Los primeros dos son cuestión de abrir esos archivos de texto y editarlos para quitar las referencias al nombre de nuestro dominio. El tercero se arregla cambiando el nombre de nuestra máquina con el comando hostname. Así:

hostname www.dominio.com

Reinicia sendmail y comprueba que no está considerando tu dominio como local haciendo:

echo '$=w' | sendmail -bt

Si dominio.com no aparece en la lista, ¡lo has logrado! Aunque no está de más hacer un script de prueba por si las dudas.

Roberto Baca

Escribo cosas de vez en cuando