PHP mail () работает из командной строки, но не apache - PullRequest
4 голосов
/ 23 сентября 2009

Я пытаюсь выяснить, почему функция почты в 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

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

Ответы [ 4 ]

19 голосов
/ 23 сентября 2009

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

$ sestatus -b | grep sendmail  
httpd_can_sendmail                   off

Тогда, чтобы действительно решить проблему:

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

Подробнее об этом здесь .

0 голосов
/ 26 октября 2016

Это мой первый ответ здесь, на 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;

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

0 голосов
/ 23 сентября 2009

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

0 голосов
/ 23 сентября 2009

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

РЕДАКТИРОВАТЬ: Хммм ... ничего в журнале ошибок. Что возвращает звонок на mail(...)? Что-нибудь интересное в почтовом журнале? Это зависит от MTA, часто / var / log / maillog

РЕДАКТИРОВАТЬ 2: safe_mode включен, и вы используете дополнительные функции *1008* дополнительные параметры ?

...