5

我试图弄清楚为什么 PHP 中的邮件函数在通过 Web 浏览器(即 apache)调用时会失败,但我可以使用命令行运行相同的脚本

php -f 邮件测试.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

4 回答 4

23

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

$ sestatus -b | grep sendmail  
httpd_can_sendmail                   off

然后实际解决问题:

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

在此处阅读更多相关信息。

于 2009-09-23T18:45:24.003 回答
0

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

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

编辑 2:safe_mode已打开并且您是否正在使用该mail()函数的附加参数?

于 2009-09-23T00:19:35.737 回答
0

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

于 2009-09-23T02:06:59.403 回答
0

这是我在 StackOverflow 上的第一个答案!:o

所以我和你有同样的问题,马特!我使用 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;

没关系!我希望你能用这种方法解决问题

于 2016-10-26T11:52:58.120 回答