php mail()返回false,但不在命令行中

php mail()返回false,但不在命令行中,php,apache,email,ubuntu,Php,Apache,Email,Ubuntu,我一直在stackoverflow和许多其他网站上寻找想法,但到目前为止没有任何效果,我需要更多的直接帮助 我有一个专用的Ubuntu服务器(9.04 jaunty),我在那里运行几个PHP网站,使用apache2。我的问题是mail()函数已停止工作。从很久以前开始,我就一直在使用PEAR Mail Queue处理大多数电子邮件,所以我不确定Mail()何时停止工作,但我仍然需要它来进行OpenCart设置,以及其他一些事情,但是Mail()无论我做什么都会返回false。即使是这个简单的代码

我一直在stackoverflow和许多其他网站上寻找想法,但到目前为止没有任何效果,我需要更多的直接帮助

我有一个专用的Ubuntu服务器(9.04 jaunty),我在那里运行几个PHP网站,使用apache2。我的问题是mail()函数已停止工作。从很久以前开始,我就一直在使用PEAR Mail Queue处理大多数电子邮件,所以我不确定Mail()何时停止工作,但我仍然需要它来进行OpenCart设置,以及其他一些事情,但是Mail()无论我做什么都会返回false。即使是这个简单的代码也无法工作:

<?php
mail('mail@example.com','test','test');
?>
所以我认为可能是php本身有问题,所以我尝试以下命令:

# php -r "mail('mail@example.com','test','test');"
而且它也发送电子邮件没有任何问题!那会是什么呢?我开始想这可能是某种权限问题,也许www数据在运行脚本时遇到了一些问题。仍然不确定,因为我甚至无法运行此脚本:

<?php
echo exec('whoami');
?>
我已经将文件的用户和组所有者从root:root更改为www-data:www-data,但仍然没有更改


我还能试什么?一定有什么事!有人能帮我吗?

几周前我也遇到过同样的问题。我试过:

还有其他一些

我的错误日志中有一个条目说
分段错误
。两天后,a发现了问题。我在我的debian系统上使用了Exim4,与apache2的结合导致了分段错误。我用后缀替换了Exim4,它成功了

但是,在您的情况下,您不能运行像
whoami
这样的exec,您应该遵循该路径


因为邮件功能最终会进入操作系统,所以exec命令应该可以工作

您可以使用phpMailer发送电子邮件,而不必使用You mail()函数。 代码是 只是个主意


可能可以将此用于opencart,以使用phpmailer替换邮件功能。我没有测试过它,只是为了让它能给别人一些想法。

命令行和Web服务器不共享同一个php.ini!检查命令行和服务器模块中使用的php.ini

在我玩的Magento docker图像中使用了
php fpm
。它保持了php的预加载(带有配置)


重新启动后,它选择了新的设置:或者只是
sudo killall php fpm

当使用邮件失败时,您是否在系统邮件错误日志(/var/log/mail或类似内容)中看到任何错误?请删除
mail()
。使用即
PhpMailer
并通过
SMTP
发送,您就安全了。有很多错误会说
SYSERR(UID0):你是谁?:权限被拒绝
,还有一些人抱怨在RunAsUser和TrusedUser
未知用户smmsp的行中提交了submit.cf文件:权限被拒绝
,其中在这两个行上都设置了smmsp。我该怎么处理这个@路易斯登:你建议我怎么办?php中的什么控制这种权限?不,OpenCart使用mail()函数,所以很遗憾,我需要它来工作。否则我就不会这么麻烦了。我更新了我的答案。似乎有人对open cart进行了扩展以使用phpmailer。这可能对您没有帮助,但可以帮助那些无法访问该服务器的人。不管怎样,找到它了。但文件几乎完全相同,这不是问题所在。还有其他想法吗?为了安全起见,请尝试将apache php.ini重命名为php.ini.bak并复制cli php.ini并进行检查。这将缩小你要调查的问题范围
<?php
echo exec('whoami');
?>
www-data ALL=(ALL) ALL