我试图找出为什么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
非常感谢任何帮助!
答案 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;
那没关系!我希望你能解决这个方法的问题