PHP mail()可以从命令行运行,但不能运行apache

时间:2009-09-22 22:20:27

标签: php apache email command-line sendmail

我试图找出为什么PHP中的邮件功能在通过Web浏览器(即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 个答案:

答案 0 :(得分:19)

我发现了问题。 SELinux阻止了apache能够使用sendmail。要诊断,我用了

$ sestatus -b | grep sendmail  
httpd_can_sendmail                   off

然后实际解决问题:

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

详细了解here

答案 1 :(得分:0)

apache的error_log中有什么内容吗? PHP是作为apache模块还是CGI二进制文件运行的?

编辑:嗯...错误日志中没有任何内容。对mail(...)的调用会返回什么?邮件日志中有什么有趣的东西?这取决于MTA,通常是/ var / log / maillog

编辑2:safe_mode是否已开启,您使用的是mail()功能的 additional_parameters 吗?

答案 2 :(得分:0)

是用户权限错误吗?您的帐户和用于执行PHP脚本的帐户可能具有不同的权限。

答案 3 :(得分:0)

这是我在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;

那没关系!我希望你能解决这个方法的问题