2012-09-11 18 views
9

He estado buscando en stackoverflow y muchos otros sitios web para obtener ideas, pero nada ha funcionado hasta ahora y necesito más ayuda directa.php mail() devuelve falso, pero no en la línea de comandos

Tengo un servidor Ubuntu dedicado (9.04 jaunty) y estoy ejecutando varios sitios web PHP allí, con apache2. Mi problema es que la función mail() ha dejado de funcionar. Desde hace un tiempo, he estado utilizando PEAR Mail Queue para la mayoría de los correos electrónicos, por lo que no estoy seguro de cuándo mail() dejó de funcionar, pero todavía lo necesito para una configuración de OpenCart, entre otras cosas, pero mail() mantiene la devolución falsa sin importar lo que haga. Incluso esta simple código no funcionará:

<?php 
mail('[email protected]','test','test'); 
?> 

lo tanto, he estado mirando el Sendmail-valores definidos en php.ini, que todos Dale un vistazo, y cuando corro esto en la línea de comandos, que funciona bien y me envía un correo electrónico:

# sendmail 
[email protected] 
test message 

así que pensé que podría ser php sí que tiene un problema, así que trato el siguiente comando:

# php -r "mail('[email protected]','test','test');" 

y también envía el correo electrónico sin ningún problema! Entonces, ¿qué podría ser? Empecé a pensar que podría ser algún tipo de problema de permiso, que tal vez www-data tenía algunos problemas con la ejecución del script. Todavía no estoy seguro de esto, porque ni siquiera puedo ejecutar este script:

<?php 
echo exec('whoami'); 
?> 

¡También devuelve falso! Me he encontrado el comando visudo y añade la siguiente línea si acaso:

www-data ALL=(ALL) ALL 

Y he cambiado los propietarios de usuario y de grupo de los archivos de root: root a www-data: www-data pero todavía nada!

¿Qué más puedo probar? ¡Debe haber algo! ¿Alguien puede ayudarme?

+1

¿Ve algún error en el sistema-mail-error-log (/ var/log/mail o algo así) mientras usa el correo cuando falla? –

+0

Suelta 'mail()'. Utilice, por ejemplo, 'PhpMailer' y haga que se entregue a través de' SMTP' y se encontrará en un lugar seguro. –

+0

Hay muchos errores que dicen 'SYSERR (UID0): ¿Quién es usted ?: Permiso denegado' y algunos que se quejan del archivo submit.cf en la línea con RunAsUser y TrusedUser' usuario desconocido smmsp: Permiso denegado' donde smmsp está establecido en ambos. ¿Qué debería hacer con esto? @Louis – user1663164

Respuesta

0

Tuve el mismo problema hace unas semanas. Probé:

y algunos otros.

Tuve una entrada en mi registro de error diciendo Segmentation fault. Después de 2 días a encontró el problema. Usé Exim4 en mi sistema Debian, la combinación con apache2 me dio un error de segmentación. Reemplacé Exim4 con Postfix y funcionó.

Sin embargo, en su caso no puede ejecutar un ejecutivo como whoami y debe seguir ese camino.

¡Debido a que la función de correo finalmente llega al sistema operativo, un comando de ejecución debería funcionar!

+0

Entonces, ¿qué sugieres que haga al respecto? ¿Qué en php controla este tipo de permisos? – user1663164

0

Puede enviar un correo electrónico utilizando phpMailer para lanzar SMTP sin usar su función de correo(). El código es here(http://phpmailer.worxware.com/) sólo una idea

posiblemente puede utilizar este extation para opencart utilizar phpmailer para reemplazar la función de correo electrónico. No lo he probado y pensé que podría darle algunas ideas a alguien.

+0

Bueno, no, OpenCart usa la función mail() - por lo que necesito que funcione, desafortunadamente. De lo contrario, no me molestaría tanto con esto. – user1663164

+0

Actualicé mi respuesta Parece que alguien ha hecho una extation para abrir el carro para usar phpmailer Esto puede no ayudarlo, pero podría ayudar a alguien que no tiene tanto acceso al servidor. – Justin

2

¡La línea de comandos y el servidor web no comparten el mismo php.ini! Compruebe qué php.ini se utiliza en la línea de comandos y en el módulo del servidor.

+0

¿Dónde puedo verificar esto? – user1663164

+0

No importa, lo encontré. Pero los archivos son bastante idénticos, ese no es el problema. ¿Alguna otra idea? – user1663164

+0

intente simplemente estar en el lado seguro cambie el nombre de apache php.ini a php.ini.bak y copie el cli php.ini y verifique. Se reducirá el alcance de su problema para mirar –

0

En mi caso fue php-fpm utilizado en la imagen Magento docker con la que estaba jugando. Mantuvo php precargado (con configuración).

Después de reiniciar, recogió configuraciones nuevas: how to restart o simplemente sudo killall php-fpm.

Cuestiones relacionadas