【问题标题】:php mail() returning false, but not in command linephp mail()返回false,但不在命令行中
【发布时间】:2012-09-04 13:12:52
【问题描述】:

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

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

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

所以,我一直在查看 php.ini 中的 Sendmail-settings,所有这些都已签出,当我在命令行中运行它时,它运行良好并向我发送电子邮件:

# sendmail
mail@example.com
test message

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

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

它还可以毫无问题地发送电子邮件!那会是什么?我开始认为这可能是某种权限问题,也许 www-data 在运行脚本时遇到了一些问题。仍然不确定,因为我什至无法运行此脚本:

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

它也返回 false!我已经运行了 visudo 命令并添加了以下行以防万一:

www-data ALL=(ALL) ALL

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

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

【问题讨论】:

  • 在使用邮件失败时,您是否在系统邮件错误日志(/var/log/mail 或类似内容)中看到任何错误?
  • 删除mail()。使用即PhpMailer 并通过SMTP 发送,您就安全了。
  • 有很多错误说 SYSERR(UID0): Who are you?: Permission denied 和一些抱怨在 RunAsUser 和 TrusedUser unknown user smmsp: Permission denied 上设置了 smmsp 的 submit.cf 文件。我该怎么办? @路易斯

标签: php apache email ubuntu


【解决方案1】:

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

还有一些其他的。

我的错误日志中有一个条目说Segmentation fault。 2天后发现问题。我在我的 debian 系统上使用了 Exim4,与 apache2 的组合出现了分段错误。我用 Postfix 替换了 Exim4,它成功了!

但是,在您的情况下,您无法运行像 whoami 这样的 exec,您应该追求这条道路。

因为邮件功能最终会来到操作系统,执行命令应该可以工作!

【讨论】:

  • 那你建议我怎么做呢? php中什么控制了这种权限?
【解决方案2】:

您可以使用 phpMailer throw SMTP 发送电子邮件,而无需使用 mail() 函数。 代码是here(http://phpmailer.worxware.com/) 只是一个想法

可能可以使用这个extation for opencart 来使用phpmailer 来替换邮件功能。我没有对此进行过测试,并认为它可能会给某人一些想法。

【讨论】:

  • 好吧,不,OpenCart 使用了 mail() 函数,所以很遗憾,我需要它来工作。否则我不会这么费心。
  • 我更新了我的答案,看起来有人为打开购物车做了一个扩展以使用 phpmailer 这可能对你没有帮助,但它可以帮助那些没有那么多访问服务器的人。跨度>
【解决方案3】:

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

【讨论】:

  • 没关系,找到了。但是文件几乎相同,这不是问题。还有其他想法吗?
  • 为了安全起见,将 apache php.ini 重命名为 php.ini.bak 并复制 cli php.ini 并检查。它将缩小您要调查的问题范围
【解决方案4】:

在我的情况下,我正在使用的 Magento docker 映像中使用的是 php-fpm。它保持 php 预加载(带有配置)。

重新启动后,它选择了新设置:how to restart 或只是 sudo killall php-fpm

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 2011-07-26
    • 2010-11-30
    • 2019-08-06
    • 1970-01-01
    • 2021-02-26
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多