PHP mail () funziona da linea di comando, ma non apache
-
13-09-2019 - |
Domanda
Sto cercando di capire il motivo per cui la funzione mail di PHP non riesce quando viene chiamato tramite browser web (vale a dire apache), ma posso eseguire lo stesso script dalla riga di comando utilizzando
php -f mailtest.php
Questo è uno dei server Fedora del mio cliente, in modo da non Grok completamente, ma ho l'accesso come root dovrebbe ho bisogno di cambiare nulla.
da php.ini:
sendmail_path = / usr / sbin / sendmail -t -i
Non sono sicuro se questo potrebbe importa, ma / usr / sbin / sendmail è un link simbolico a / etc / alternatives / MTA, che è un link simbolico di nuovo a /usr/sbin/sendmail.sendmail. FWIW l'utente apache ha permesso di eseguire sendmail (sendmail testato direttamente dalla riga di comando).
OS: Fedora Core 7 Linux (kernel 2.6.23.17)
Apache: 2.2.8
PHP: 5.2.6
Qualsiasi aiuto qui sarà molto apprezzato!
Soluzione
Ho trovato il problema. SELinux impediva apache da essere in grado di utilizzare sendmail. Per diagnosticare, ho usato
$ sestatus -b | grep sendmail
httpd_can_sendmail off
Poi, per risolvere realmente il problema:
$ restorecon /usr/sbin/sendmail
$ setsebool -P httpd_can_sendmail 1
Per saperne di più su di esso href="http://www.linux-archive.org/fedora-selinux-support/38002-selinux-newbie.html" qui .
Altri suggerimenti
Si tratta di un errore di autorizzazioni utente? Il suo conto e quello utilizzato per eseguire gli script PHP possono avere diversi privilegi.
Tutto ciò in error_log del apache? È PHP eseguito come modulo di Apache o di un binario CGI?
EDIT: Hmmm ... niente nel registro degli errori. Che cosa significa la chiamata a mail(...)
tornare? Qualcosa di interessante nel log di posta? Questo può variare a seconda della MTA, spesso / var / log / maillog
EDIT 2: E 'safe_mode
acceso e stai usando della funzione mail()
additional_parameters
Questa è la mia prima risposta qui su StackOverflow! : O
Così ho avuto lo stesso problema di te, Matt! Io uso OpenSuse. Ho capito che postfix check
portato 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
così mi sono imbattuto nei prossimi comandi:
# 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}
e poi, ho cercato di semplice script PHP da mio browser per verificare se tutto funziona bene: (supponendo che si vuole spedire abc@gmail.com)
<?php
$ret = mail('abc@gmail.com', 'subject', 'message');
if ($ret === true)
echo 'Success'.PHP_EOL;
else
echo 'Error'.PHP_EOL;
e va bene! Spero che risolvere il problema con questo metodo