PHP mail () работает из командной строки, но не apache

Я пытаюсь понять, почему функция электронной почты в PHP терпит неудачу при вызове через веб-браузер (например, apache), но я могу запустить тот же скрипт из командной строки, используя

php -f mailtest.php

Это один из серверов Fedora моего клиента, поэтому я не понимаю его полностью, но у меня есть root-доступ, если мне нужно что-то изменить.

от php.ini:

sendmail_path = / usr / sbin / sendmail -t -i

Не уверен, что это может иметь значение, но / usr / sbin / sendmail является символической ссылкой на / etc / alternatives / mta, которая является символической ссылкой на /usr/sbin/sendmail.sendmail. FWIW у пользователя apache есть разрешение на запуск sendmail (проверенный sendmail непосредственно из командной строки).

OS: Fedora Core 7 Linux (kernel 2.6.23.17) Apache: 2.2.8 PHP: 5.2.6 

Любая помощь здесь будет принята с благодарностью!

Я нашел проблему. SELinux не позволял apache использовать sendmail. Чтобы диагностировать, я использовал

 $ sestatus -b | grep sendmail httpd_can_sendmail off 

Затем, чтобы исправить проблему:

 $ restorecon /usr/sbin/sendmail $ setsebool -P httpd_can_sendmail 1 

Подробнее об этом читайте здесь .

Это ошибка прав пользователя? Ваша учетная запись и сценарий, используемые для выполнения скриптов PHP, могут иметь разные привилегии.

Что-нибудь в apache error_log? Является ли PHP запущенным как модуль apache или двоичный код CGI?

EDIT: Хммм … ничего в журнале ошибок. Как вызывается обращение к mail(...) ? Что-нибудь интересное в почтовом журнале? Это зависит от MTA, часто / var / log / maillog

EDIT 2: safe_mode ли safe_mode и вы используете дополнительные_параметры mail() ?

Это мой первый ответ здесь, на StackOverflow! : о

Так что у меня была такая же проблема, как у вас, матовый! Я использую OpenSuse. Я понял, что postfix check привела к

 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 

поэтому я выполнил следующие команды:

 # 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} 

и затем я попробовал простой PHP-скрипт из своего браузера, чтобы проверить, все ли работает нормально: (если вы хотите отправить письмо abc@gmail.com)

 <?php $ret = mail('abc@gmail.com', 'subject', 'message'); if ($ret === true) echo 'Success'.PHP_EOL; else echo 'Error'.PHP_EOL; 

и это прекрасно! Я надеюсь, что вы устраните проблему с помощью этого метода