PHP mail () funciona desde la línea de comandos, pero no Apache
-
13-09-2019 - |
Pregunta
Estoy tratando de averiguar por qué la función de correo en PHP falla cuando se llama a través del navegador web (es decir, Apache), pero puedo ejecutar la misma secuencia de comandos desde la línea de comandos utilizando
php -f mailtest.php
Este es uno de los servidores de Fedora de mi cliente, por lo que no asimilo por completo, pero tengo acceso root si necesito cambiar nada.
en el php.ini:
sendmail_path = / usr / sbin / sendmail -t -i
No estoy seguro si esto podría importar, pero / usr / sbin / sendmail es un enlace simbólico a / etc / alternatives / MTA, que es un enlace de vuelta a /usr/sbin/sendmail.sendmail. Fwiw el usuario apache tiene permiso para ejecutar sendmail (Sendmail probado directamente desde la línea de comandos).
OS: Fedora Core 7 Linux (kernel 2.6.23.17)
Apache: 2.2.8
PHP: 5.2.6
Cualquier ayuda aquí será muy apreciada!
Solución
He encontrado el problema. SELinux estaba impidiendo Apache de ser capaz de utilizar Sendmail. Para diagnosticar, solía
$ sestatus -b | grep sendmail
httpd_can_sendmail off
A continuación, para fijar en realidad el problema:
$ restorecon /usr/sbin/sendmail
$ setsebool -P httpd_can_sendmail 1
Lea más sobre esto href="http://www.linux-archive.org/fedora-selinux-support/38002-selinux-newbie.html" aquí .
Otros consejos
¿Es un error de permisos de usuario? Su cuenta y la que se utiliza para ejecutar scripts PHP puede tener diferentes privilegios.
Cualquier cosa en error_log de Apache? PHP se está ejecutando como un módulo de Apache o un binario CGI?
EDIT: Hmmm ... nada en el registro de errores. ¿Qué hace la llamada a mail(...)
volver? Nada interesante en el registro electrónico? Esto variará dependiendo de la MTA, a menudo / var / log / registro de correo
EDIT 2: ¿Es safe_mode
enciende y se está usando de la función mail()
parametros_adicionales
Esta es mi primera respuesta aquí en StackOverflow! : O
Así que tenían el mismo problema que tú, Matt! Yo uso OpenSuse. Me di cuenta de que postfix check
resultó con
postfix/postfix-script: warning: not owned by group maildrop: /usr/sbin/postqueue
postfix/postfix-script: warning: not owned by group maildrop: /usr/sbin/postdrop
postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue
postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop
así que me encontré con los siguientes comandos:
# my postfix user is postfix and postfix group is maildrop
sudo chown 'postfix:maildrop' /usr/sbin/post{drop,queue}
sudo chmod g+s /usr/sbin/post{queue,drop}
y, a continuación, traté de simple script PHP desde mi navegador para comprobar si todo funciona bien: (suponiendo que desea enviar por correo abc@gmail.com)
<?php
$ret = mail('abc@gmail.com', 'subject', 'message');
if ($ret === true)
echo 'Success'.PHP_EOL;
else
echo 'Error'.PHP_EOL;
y eso está bien! Espero que solucionar el problema con este método