Thursday, July 29, 2010

EXIM siempre envia con hostname

Claves: exim, sendmail, mail, -f, php, whm

Ok. Esta es corta. De nuevo al estar en el deployment de radioalternativa me di cuenta que los mensajes de correo estaban enviandose bajo el sobre "kkk@server.radioalternativa.com" (el kkk es un nombre de usuario, que obviamente no diré).

Esto impedia que el SPF montado sobre radioalternativa.com no funcionara. Pasé horas investigando y platicando con el soporte del hosting. Para no hacer el cuento largo, después de como 10 modificaciones en la configuración intentando que sendmail funcionara con -f (para forzar una dirección de envío), me di cuenta que EXIM bloquea ciertos usuarios para que no abusen y se hagan pasar por otros.

La solución:
En la configuración de EXIM hay que añadir "trusted_users = kkk", así permitimos que el usuario "kkk" pueda hacer uso del parámetro "-f" de sendmail.

Felices ahora, ya funciona el SPF.

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