Thursday, July 29, 2010

Php mail() regresa TRUE pero no envía el correo.

Claves: PHP, mail, mail(), sendmail, linux, WHM, exim, correos, false, spamd, spam assassin, "En Linux, la función PHP "mail()" regresa TRUE pero no envía el correo. Los correos si se envían mediante la terminal usando "Sendmail" y "mail"."

Ok...
Hoy estoy haciendo el deployment de la nueva versión de RadioAlternativa. Al hacer pruebas, me di cuenta que los correos para los usuarios no estaban siendo enviados, algo muy extraño.

De colpe pensé que sería cosa de mi programación, aunque había funcionado bien en el servidor casero. Probé todo, y los correos seguian sin enviarse. Hice un ejemplo básico que debía de funcionar sin importar nada (un escript php con solamente mail('dire@ccion','asunto','mensaje')) y NADA.

Después, mediante SSH ejecuté el comando Sendmail y Mail, ambos enviaron correctamente el correo... cosa extraña que me indicaba que el problema residia en PHP.

Pasé cerca de dos horas buscando en la configuración de WHM algo que me pudiera ayudar, sin tener ningún resultado. Me decidí a solicitar ayuda al soporte del centro de datos y oh sorpresa! el chat estaba fuera de linea.

Entonces, se me prendió el foco (jaja)... chequé el log del envío de correos en /var/log/maillog; encontré una linea que coincidia con el envío que estaba intentando hacer y aparentemente era SPAMD (SpamAssassin) el que estaba bloqueando el correo. Procedí a deshabilitar SpamAssassin para hacer la prueba, y NADA!!!!

En este punto, ya estaba desesperado. Buscando de nuevo en la configuración de WHM, arriba de donde deshabilitas SpamAssassin vi una opción que bloqueaba el envío de correos si estos se intentaban enviar con el usuario "nobody". Ahí indica que ese usuario generalmente lo usa PHP si NO corre bajo PHPSuexec.

Como último intento, deshabilité esa opción ya que el servidor de RadioAlternativa PHP no se está ejecutando con Suexec. OHHH MARAVILLA! Ya se envían los correos.

Problema:
En Linux, la función PHP "mail()" regresa TRUE pero no envía el correo. Los correos si se envían mediante la terminal usando "Sendmail" y "mail".

Solución:
  • Ingresar a la configuración de WHM
  • Debajo de "Server Configuration" dar click en "Tweak Settings"
  • Buscar la opción "Prevent the user 'nobody' from sending out mail to remote addresses (PHP and CGI scripts generally runs as nobody if you are not using PHPSuexec and Suexec respectively)"
  • Deshabilitar dicha opción
  • Guardar los cambios.

Espero que sea de utlidad! =)
-Emmanuel

No comments:

Post a Comment