使用 PHP 的 mail() 可以从命令行工作,而不是从 Apache 工作,知道为什么吗?



我在OS X (Yosemite)上使用XAMPP,使用PHP的标准mail()函数通过Sendmail (OS X别名Postfix)发送。我可以用其他方式发送电子邮件,比如在Postfix配置文件中指定SMTP服务器或使用PHP类,但我想先让基本的mail()功能工作-有很多传统网站依赖它。

命令行和Apache的PHP都作为同一个用户运行(通过exec()函数使用whoami进行测试,以及创建文件和查看权限)。它们都使用相同的php.ini文件。

当我从终端运行PHP脚本时,它暂停了一会儿,我看到它在邮件日志文件中被处理,我在目的地得到电子邮件,mail()函数返回true

当我通过Apache运行脚本时,它暂停了一点,邮件日志上没有命中,没有电子邮件到达,函数返回false,没有任何错误…无论我如何更改报告级别或查看各种日志文件。它似乎只是悄悄地失败了。

是否有什么东西阻止Apache在后台与邮件服务器交互?就像OS X里的东西?或者可能是PHP中的错误?还是XAMPP独有的东西?我尝试升级到最新版本的XAMPP(它删除了我所有的配置文件并破坏了db grrr),但结果相同。什么好主意吗?

我找到了解决方案,出于某种原因PHP。ini中的sendmail路径必须是这样的这样PHP邮件才能通过OS X Yosemite上的Apache:

sendmail_path = "env -i /usr/sbin/sendmail -t -i"

感谢所有努力寻找答案的人

从web服务器调用的PHP可以配置与命令行PHP非常不同,因为mod_php是一个单独编译的模块。它不调用通过终端访问的标准php命令。

当使用mod_php时,请求/响应通过apache。

设置可以有很多不同的方式(它肯定是不同的):-不同的php.ini(确保你使用的是相同的)-指令设置从。htaccess文件—环境变量Apache的配置可以改变php的行为

也……

OSX与PHP捆绑在一起。请确保,在终端中,您正在运行从XAMPP调用php.exe(而不是捆绑的那个)。


调试:

  • 检查你的邮件日志,看看有什么错误出现(邮件日志应该在/var/log/maillog)
  • 查看邮件功能结果的var_dump:

    var_dump(mail('someone@example.com', 'foo', 'msg'));

  • 检查sendmail路径

最新更新