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

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.