2012-10-09 65 views
9

Tengo una máquina virtual CentOS 6.2 con Apache 2.2 y PHP 5.3 que estoy tratando de enviar desde la función de correo de PHP(). Puedo enviar correos electrónicos desde la CLI sin problemas, pero cuando PHP lo intenta, falla. En el registro de Sendmail es el siguiente:¿Cómo se puede enviar correos electrónicos a apache?

Oct 9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied 

Parece que Apache no tiene permiso para hacer esto, pero no estoy seguro de cómo solucionarlo. He encontrado mucha discusión sobre esto, pero no hay nada lo suficientemente específico para lo que estoy haciendo que pueda usar. Cualquier ayuda sería apreciada. Gracias!

+2

¿Cómo está intentando enviar este correo electrónico? Apache nunca debería tener que entrar en los directorios de spool de correo, debería simplemente hablar con el MTA de correo local. –

+0

Echa un vistazo a esta solución: http://forums.freebsd.org/showthread.php?t=32273 –

Respuesta

4

En primer lugar hay que comprobar si el permiso son correctos. Aquí es el permiso más adelante en mi sistema

# ls -l /usr/sbin/sendmail.sendmail -r-xr-sr-x root smmsp /usr/sbin/sendmail.sendmail

# ls -l /var/spool/clientmqueue drwxrwx--- smmsp smmsp /var/spool/clientmqueue

Si sus permisos o la propiedad es incorrecta, cambiarlo usando chown y chmod.

Si lo anterior es correcto, deshabilite selinux o si desea habilitar selinux, use chcon para establecer el contexto de selinux correcto.

http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html

Para deshabilitar SELinux utilizar temporalmente #setenforce 0

+1

Fue SELinux. ¡Ahora funciona! ¡Gracias! –

+1

No deshabilite SELinux :(Hay un booleano 'httpd_can_sendmail' para permitir que el servidor web envíe correos que deberían funcionar en este caso. Establezca esto con' setsebool -P httpd_can_sendmail 1', e incluya la opción '-P' para hágala persistente a través de los reinicios. –

1

Puede tener SELinux habilitado.

http://selinuxproject.org/page/Main_Page

Puede comprobar el estado de SELinux haciendo:

sestatus

Debería ver algo como:

SELinux status:     enabled 
SELinuxfs mount:    /selinux 
Current mode:     enforcing 
Mode from config file:   enforcing 
Policy version:     24 
Policy from config file:  targeted 

Puede activar SELinux de forma temporal a través de:

echo 0 >/selinux/enforce 

y hacia atrás con

echo 1 >/selinux/enforce 

Si lo hace temp. apáguelo, no instale RPM ni realice cambios. Creo que esto puede generar problemas para volver a habilitarlo.

Si desea desactivar SELinux de forma permanente, a continuación, tratar:

https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux.html

+0

¡Gracias por esta información! –

28

SELinux puede causar el problema, para verificar plazo:

getsebool -a | grep mail 

Si se muestra como bramido es SELinux:

allow_postfix_local_write_mail_spool --> off 

Puede desactivarlo, pero si desea mantenerlo (y debe, ya que proporciona una capa adicional de seguridad) que debe hacer algo más:

setsebool -P httpd_can_sendmail on 

Esto permitirá que el httpd para enviar mensajes de correo electrónico, como cuando se utiliza php mail().

+4

-P opción que sea permanente, por lo que después de reiniciar se volverá a activar :) – VSB

+2

Solo usé "setsebool -P httpd_can_sendmail on" y resolví el problema. Gracias – PookPook

11

Odio necro esto, pero ninguna de las soluciones aquí funcionó para mí. Sé muy poco sobre SELinux, pero acabé descubriendo el problema con esto (en CentOS 6):

getsebool httpd_can_sendmail 

Lo que me han dicho que es discapacitado. Corregido con

setsebool httpd_can_sendmail 1 
+0

Funcionó maravillosamente, gracias por publicar. – daveywc

+0

Esto funcionó para mí en centos –

+0

Eres un salvador .. Gracias .. –

Cuestiones relacionadas