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


php mail() returning false, but not in command line

我一直在stackoverflow和许多其他网站上寻找想法,但到目前为止一切都不起作用,我需要更直接的帮助。

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

<?php
mail('mail@example.com','test','test');
?>

所以,我一直在查看php.ini中的Sendmail设置,这些设置都检查出来了,当我在命令行中运行时,它运行良好,并向我发送了一封电子邮件:

# sendmail
mail@example.com
test message

所以我认为php本身可能有问题,所以我尝试了以下命令:

# php -r "mail('mail@example.com','test','test');"

而且它发送电子邮件也没有任何问题!那会是什么呢?我开始认为这可能是某种权限问题,也许www数据在运行脚本时出现了一些问题。仍然不确定,因为我甚至不能运行这个脚本:

<?php
echo exec('whoami');
?>

它也返回false!我运行了visudo命令,并添加了以下行以备不时之需:

www-data ALL=(ALL) ALL

我已经将文件的用户和组所有者从root:root更改为www data:www data,但仍然没有!

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

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

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

  • PHP mail()可以从命令行工作,但不能从apache工作
  • PHP";mail()"函数从php5-cli发送邮件,但在浏览器运行脚本时不发送邮件

还有其他一些。

我在错误日志中有一个条目,上面写着Segmentation fault。两天后,a发现了问题。我在debian系统上使用了Exim4,与apache2的组合出现了分段错误。我用Postfix取代了Exim4,它成功了!

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

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

您可以使用phpMailer发送电子邮件,并使用您的mail()函数抛出SMTP。代码在这里(http://phpmailer.worxware.com/)只是一个想法

可以使用opencart的这个extation来使用phpmailer来代替mail函数。我还没有对此进行测试,只是想它可能会给一些人一些想法。

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

重新启动后,它选择了新的设置:如何重新启动或仅sudo killall php-fpm